And*_*ger 4 python lstm keras rnn
我有以下特征向量,每个样本包含一个特征,总共有32个样本:
X = [[0.1],[0.12],[0.3] ...... [0.10]]
以及由二进制值组成的标签向量
Y = [0,1,0,0,...... 1](也有32个样本)
我正在尝试使用Keras LSTM根据新条目预测序列的下一个值.我无法弄清楚的是"batch_input_shape"元组的含义:
model.add(LSTM(neurons, batch_input_shape=(?, ?, ?), return_sequences=False, stateful=True))
Run Code Online (Sandbox Code Playgroud)
根据这篇文章,第一个是批量大小,但另外两个呢?它们是每个样品的特征数量和样品数量吗?在这种情况下,batch_size的值应该是多少?
目前收到错误消息:
ValueError: Error when checking input: expected lstm_1_input to have 3 dimensions, but got array with shape (32, 1)
Run Code Online (Sandbox Code Playgroud)
编辑:这是模型声明:
def create_lstm(batch_size, n_samples, neurons, dropout):
model = Sequential()
model.add(LSTM(neurons, batch_size=batch_size, input_shape=(n_samples, 1), return_sequences=False, stateful=True))
model.add(Dropout(dropout))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
return model
Run Code Online (Sandbox Code Playgroud)
据该上的"状态" LSTM Keras序列模式指南(最底部),我们可以看到这三个要素是指:
预期的输入批量形状:(batch_size,timesteps,data_dim).请注意,我们必须提供完整的batch_input_shape,因为网络是有状态的.批次k中的索引i的样本是批次k-1中的样本i的后续.
您已经发现的第一个是在训练期间使用的批次的大小.您应该选择多少部分取决于您的具体问题,但主要取决于您的数据集的大小.如果指定批次大小x且数据集包含N样本,则在训练期间,您的数据将按N/x组大小(批次)分割x.
因此,您可能希望批量大小小于数据集的大小.没有唯一值,但您希望它比所有数据按比例缩小(比如一个或两个订单).有些人喜欢使用2(32,128等)的功率作为批量大小.在某些情况下,也可能根本不使用批次,并立即训练所有数据(尽管不一定更好).
另外两个值是时间步长(时间维度的大小)或每个样本序列具有的"帧",以及数据维度(即每个时间步长上数据向量的大小).
例如,假设你的输入序列是这样的X = [[0.54, 0.3], [0.11, 0.2], [0.37, 0.81]].我们可以看到这个序列的时间步长是,3而data_dim是2.
所以,ValueError你得到的很可能是由于这个(错误甚至暗示它预计3个暗淡).此外,请确保您的阵列是Numpy阵列.
作为最后一条评论,假设您说您总共有32个样本(即您的整个数据集包含32个样本),我认为数据太少而无法使用批次; 通常我看到的最小批量是32,所以在尝试使用批量培训之前,请考虑获取更多数据.希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
4866 次 |
| 最近记录: |