2017-04-10 107 views
1

我正在使用Keras进行一个简单的时间序列回归问题,我想使用最后20个收盘价预测下一个收盘价,根据一些示例,我有以下代码我发现:Python:在Keras上发布训练和预测回归

我写我的顺序模型在分离功能,需要通过“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

问题1:如何设置训练时期到期望值?

问题2:如何使用NN生成预测?

回答

2

首先,您最有可能使用Keras 2.0,在该版本中,参数nb_epochs已重新命名为epochs。

第二件事是,你必须标准化你的输入和输出到[0,1]范围。没有标准化就无法运作。同样为了匹配规范化的输出和网络范围,最好在输出层使用sigmoid激活。

+0

更改nb_epochs到时代工作像一个魅力... 关于数据:我的输入和输出已经在[0,1]范围内 关于激活函数:我改变了它,我仍然得到低预测结果是:0.003018886549398303当它应该已经比我的第一次线性激活的尝试大约有0.03的方式,但还没有完成,我的猜测是我有网络架构的问题,不再有语法和变量名称的问题......谢谢你的帮助 –

+0

@AndrésRangel你可能在[0,1]中有数据,但他们也是需要覆盖[0,1]中的完整范围,这将有助于训练。 –

1

您的网络没有收敛。尝试更改参数。损失应该持续下降。同时正确初始化参数。

+0

我应该尝试更改哪些参数? 我一直在与其他神经网络使用相同的框架,我明白,损失值应该减少每次迭代或至少收敛,但我不能确认损失的趋势,只有10个迭代... –