【发布时间】:2018-09-13 16:14:26
【问题描述】:
我使用 keras 构建 RNN,但是当我想将时间步长更改为不同大小时,我得到一个错误,我无法完成它 这是我的虚拟数据示例
from numpy import array
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Dropout
from sklearn.preprocessing import MinMaxScaler
from keras import optimizers
X=array(
[
[#first sample
[0,2],[1,2],[2,2] # three time steps and 2 features
]
,
[# sample 2
[0,2],[1,2],[2,2] # three time steps and 2 features
]
,
[# sample 3
[7,2], [9,2], [4,2] # three time steps and 2 features
]
,
[# sample 4
[2,2], [5,2], [4,2],[7,9] # four steps and 2 features
]
]
)
Y=np.array([1,2,3,4])
model = Sequential()
model.add(LSTM(8, input_shape=(None, 2),return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(32,return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(128,return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(58, activation='softmax'))
optimize=optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=None, decay=0.0)
model.compile(optimize,loss='sparse_categorical_crossentropy',metrics=['accuracy'])
model.summary()
model.fit(X,Y,batch_size=1,epochs=50,shuffle=True,verbose=2)
从代码中可以看出,我有 4 个序列和每个序列中的 2 个特征。 在最后一个序列中,我有 4 个时间步而不是 3 个,如果我将其更改为 3 个时间步,代码就可以正常工作,这就是问题所在, 但我希望它在不同的时间步骤上工作,如何在不使用填充或遮罩的情况下实现这一目标。
我确实阅读了描述不同解决方案的不同主题,但我无法在上面的示例中使用它
当我尝试运行上面的代码时出现错误
ValueError: Error when checking input: expected lstm_1_input to have 3 dimensions, but got array with shape (4, 1)
【问题讨论】:
标签: python tensorflow keras lstm recurrent-neural-network