Python:在 Keras 上发布训练和预测回归
Python: Issues training and predicting regression on Keras
我正在使用 Keras 处理一个简单的时间序列回归问题,我想使用最近 20 个收盘价预测下一个收盘价,根据我找到的一些示例,我有以下代码:
我根据 "build_fn" 参数的需要,将我的顺序模型写在一个单独的函数中:
def modelcreator():
model = Sequential()
model.add(Dense(500, input_shape = (20, ),activation='relu'))
model.add(Dropout(0.25))
model.add(Dense(250,activation='relu'))
model.add(Dense(1,activation='linear'))
model.compile(optimizer=optimizers.Adam(),
loss=losses.mean_squared_error)
return model
我创建 KerasRegressor 对象,传递模型创建函数和所需的拟合参数:
estimator = KerasRegressor(build_fn=modelcreator,nb_epoch=100, batch_size=32)
我通过具有 592 个样本的 KerasRegressor 对象训练模型:
self.estimator.fit(X_train, Y_train)
问题开始出现,尽管 nb_epoch=100 我的模型只训练了 10 个时期:
Epoch 1/10
592/592 [==============================] - 0s - loss: 6.9555e-05
Epoch 2/10
592/592 [==============================] - 0s - loss: 1.2777e-05
Epoch 3/10
592/592 [==============================] - 0s - loss: 1.0596e-05
Epoch 4/10
592/592 [==============================] - 0s - loss: 8.8115e-06
Epoch 5/10
592/592 [==============================] - 0s - loss: 7.4438e-06
Epoch 6/10
592/592 [==============================] - 0s - loss: 8.4615e-06
Epoch 7/10
592/592 [==============================] - 0s - loss: 6.4859e-06
Epoch 8/10
592/592 [==============================] - 0s - loss: 6.9010e-06
Epoch 9/10
592/592 [==============================] - 0s - loss: 5.8951e-06
Epoch 10/10
592/592 [==============================] - 0s - loss: 7.2253e-06
当我尝试使用数据样本进行预测时:
prediction = self.estimator.predict(test)
预测值应该接近 0.02-0.04 范围但是当我打印它时我得到 0.000980315962806344
Q1:如何将训练时期设置为所需值?
问题 2:如何使用神经网络生成预测?
您的网络没有收敛。尝试更改参数。损失应该持续减少。还要正确初始化参数。
首先,您很可能使用的是 Keras 2.0,在该版本中,参数 nb_epochs 已重命名为 epochs。
第二件事是您必须将输入和输出标准化到 [0, 1] 范围内。没有规范化就无法工作。同样为了匹配归一化输出和网络范围,最好在输出层使用 sigmoid 激活。
我正在使用 Keras 处理一个简单的时间序列回归问题,我想使用最近 20 个收盘价预测下一个收盘价,根据我找到的一些示例,我有以下代码:
我根据 "build_fn" 参数的需要,将我的顺序模型写在一个单独的函数中:
def modelcreator():
model = Sequential()
model.add(Dense(500, input_shape = (20, ),activation='relu'))
model.add(Dropout(0.25))
model.add(Dense(250,activation='relu'))
model.add(Dense(1,activation='linear'))
model.compile(optimizer=optimizers.Adam(),
loss=losses.mean_squared_error)
return model
我创建 KerasRegressor 对象,传递模型创建函数和所需的拟合参数:
estimator = KerasRegressor(build_fn=modelcreator,nb_epoch=100, batch_size=32)
我通过具有 592 个样本的 KerasRegressor 对象训练模型:
self.estimator.fit(X_train, Y_train)
问题开始出现,尽管 nb_epoch=100 我的模型只训练了 10 个时期:
Epoch 1/10
592/592 [==============================] - 0s - loss: 6.9555e-05
Epoch 2/10
592/592 [==============================] - 0s - loss: 1.2777e-05
Epoch 3/10
592/592 [==============================] - 0s - loss: 1.0596e-05
Epoch 4/10
592/592 [==============================] - 0s - loss: 8.8115e-06
Epoch 5/10
592/592 [==============================] - 0s - loss: 7.4438e-06
Epoch 6/10
592/592 [==============================] - 0s - loss: 8.4615e-06
Epoch 7/10
592/592 [==============================] - 0s - loss: 6.4859e-06
Epoch 8/10
592/592 [==============================] - 0s - loss: 6.9010e-06
Epoch 9/10
592/592 [==============================] - 0s - loss: 5.8951e-06
Epoch 10/10
592/592 [==============================] - 0s - loss: 7.2253e-06
当我尝试使用数据样本进行预测时:
prediction = self.estimator.predict(test)
预测值应该接近 0.02-0.04 范围但是当我打印它时我得到 0.000980315962806344
Q1:如何将训练时期设置为所需值?
问题 2:如何使用神经网络生成预测?
您的网络没有收敛。尝试更改参数。损失应该持续减少。还要正确初始化参数。
首先,您很可能使用的是 Keras 2.0,在该版本中,参数 nb_epochs 已重命名为 epochs。
第二件事是您必须将输入和输出标准化到 [0, 1] 范围内。没有规范化就无法工作。同样为了匹配归一化输出和网络范围,最好在输出层使用 sigmoid 激活。