Keras 汽车旅馆拟合多项式
Keras model to fit polynomial
我从 4 次多项式生成了一些数据,并想在 Keras 中创建一个回归模型来拟合这个多项式。问题是拟合后的预测似乎基本上是线性的。由于这是我第一次使用神经网络,我认为我犯了一个非常微不足道和愚蠢的错误。
这是我的代码:
model = Sequential()
model.add(Dense(units=200, input_dim=1))
model.add(Activation('relu'))
model.add(Dense(units=45))
model.add(Activation('relu'))
model.add(Dense(units=1))
model.compile(loss='mean_squared_error',
optimizer='sgd')
model.fit(x_train, y_train, epochs=20, batch_size=50)
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=100)
classes = model.predict(x_test, batch_size=1)
x_train
和 y_train
是包含 this file.
的前 9900 个条目的 numpy 数组
我尝试了不同的batch_sizes、时期数、层大小和训练数据量。似乎没有任何帮助。
请指出你看到的所有不合理的地方!
神经网络通常无法很好地推断多项式函数。但是,如果您的训练和测试数据来自同一范围,您可以获得相当不错的结果。我生成了一些数据并使用了您的代码:
import numpy as np
x_train=np.random.rand(9000)
y_train=x_train**4+x_train**3-x_train
x_train=x_train.reshape(len(x_train),1)
x_test=np.linspace(0,1,100)
y_test=x_test**4+x_test**3-x_test
x_test=x_test.reshape(len(x_test),1)
model = Sequential()
model.add(Dense(units=200, input_dim=1))
model.add(Activation('relu'))
model.add(Dense(units=45))
model.add(Activation('relu'))
model.add(Dense(units=1))
model.compile(loss='mean_squared_error',
optimizer='sgd')
model.fit(x_train, y_train, epochs=40, batch_size=50, verbose=1)
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=100)
classes = model.predict(x_test, batch_size=1)
test=x_test.reshape(-1)
plt.plot(test,classes,c='r')
plt.plot(test,y_test,c='b')
plt.show()
请注意,我将 epochs
增加到 40 以获得更多迭代和更准确的结果。我还设置了 verbose=1
以便能够看到损失的表现。损失确实减少到 7.4564e-04
,下面是我得到的结果。红线是网络的预测值,蓝线是正确值。你可以看到他们之间的距离很近。
我从 4 次多项式生成了一些数据,并想在 Keras 中创建一个回归模型来拟合这个多项式。问题是拟合后的预测似乎基本上是线性的。由于这是我第一次使用神经网络,我认为我犯了一个非常微不足道和愚蠢的错误。
这是我的代码:
model = Sequential()
model.add(Dense(units=200, input_dim=1))
model.add(Activation('relu'))
model.add(Dense(units=45))
model.add(Activation('relu'))
model.add(Dense(units=1))
model.compile(loss='mean_squared_error',
optimizer='sgd')
model.fit(x_train, y_train, epochs=20, batch_size=50)
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=100)
classes = model.predict(x_test, batch_size=1)
x_train
和 y_train
是包含 this file.
我尝试了不同的batch_sizes、时期数、层大小和训练数据量。似乎没有任何帮助。
请指出你看到的所有不合理的地方!
神经网络通常无法很好地推断多项式函数。但是,如果您的训练和测试数据来自同一范围,您可以获得相当不错的结果。我生成了一些数据并使用了您的代码:
import numpy as np
x_train=np.random.rand(9000)
y_train=x_train**4+x_train**3-x_train
x_train=x_train.reshape(len(x_train),1)
x_test=np.linspace(0,1,100)
y_test=x_test**4+x_test**3-x_test
x_test=x_test.reshape(len(x_test),1)
model = Sequential()
model.add(Dense(units=200, input_dim=1))
model.add(Activation('relu'))
model.add(Dense(units=45))
model.add(Activation('relu'))
model.add(Dense(units=1))
model.compile(loss='mean_squared_error',
optimizer='sgd')
model.fit(x_train, y_train, epochs=40, batch_size=50, verbose=1)
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=100)
classes = model.predict(x_test, batch_size=1)
test=x_test.reshape(-1)
plt.plot(test,classes,c='r')
plt.plot(test,y_test,c='b')
plt.show()
请注意,我将 epochs
增加到 40 以获得更多迭代和更准确的结果。我还设置了 verbose=1
以便能够看到损失的表现。损失确实减少到 7.4564e-04
,下面是我得到的结果。红线是网络的预测值,蓝线是正确值。你可以看到他们之间的距离很近。