刚接触LSTM,参考使用 LSTM 进行多变量时间序列预测这篇文章,写的很好,但是跑起来问题较多,可能是tensorflow的版本问题,跑的时候出现各种问题,今天上午改了一会,总算是跑通了,看这篇博客下面有类似问题的博友也很多,这里记录一下吧,希望有帮助.
python3.7
keras2.3.1
tensorflow2.2.0
ps:原题主也是使用的tensorflow+keras,虽然tensorflow2.X时候自带keras,但我是重新下的keras!
grid_search.fit(trainX,trainY)报错,Cannot clone object
这个问题,把grid_model = KerasRegresso r(build_fn=build_model, verbose=1, validation_data=(testX,testY))
这里的validation_data=(testX,testY) 移动到下面的grid_search.fit(trainX,trainY) 里,更改后的代码为:
def build_model(optimizer):
grid_model = Sequential()
grid_model.add(LSTM(50,return_sequences=True,input_shape=(30,5)))
grid_model.add(LSTM(50))
grid_model.add(Dropout(0.2))
grid_model.add(Dense(1))
grid_model.compile(loss = 'mse',optimizer = optimizer)
return grid_model
grid_model = KerasRegressor(build_fn=build_model,verbose=1)
parameters = {'batch_size' : [16,20],
'epochs' : [8,10],
'optimizer' : ['adam','Adadelta'] }
grid_search = GridSearchCV(estimator = grid_model,
param_grid = parameters,
cv = 2)
grid_search = grid_search.fit(trainX,trainY,validation_data=(testX,testY))
这里改完之后应该就不会有太大的问题,
这个也不算问题,就是看评论区说程序一直跑,不会停下来,这其实是在循环寻找最优参数,大概十几轮就停了
下面的可能会遇到的问题,(我遇到的额外问题
Cannot convert a symbolic Tensor (lstm/strided_slice:0) to a numpy array.
这个是numpy版本不对应问题,使用1.19.2版本就行
pip install -U numpy==1.19.2
TypeError: Descriptors cannot not be created directly
降级protobuf即可
pip install 'protobuf~=3.19.0'
大概到这里就解决的差不多了,有别的问题欢迎留言区讨论.