batch_input_shape Keras LSTM 上的元组
batch_input_shape tuple on Keras LSTM
我有以下特征向量,每个样本有一个特征,总共有 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))
根据this文章,第一个是批量大小,但另外两个呢?它们是每个样本的特征数量和样本数量吗?
在这种情况下,batch_size 的值应该是多少?
目前收到错误信息:
ValueError: Error when checking input: expected lstm_1_input to have 3 dimensions, but got array with shape (32, 1)
编辑:这是模型声明:
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
根据 this Keras Sequential Model guide on "stateful" LSTM(最底部),我们可以看出这三个元素的含义:
Expected input batch shape: (batch_size, timesteps, data_dim).
Note that we have to provide the full batch_input_shape since the network is stateful.
the sample of index i in batch k is the follow-up for the sample i in batch k-1.
您已经发现的第一个是在训练期间使用的批 大小。您应该选择多少部分取决于您的具体问题,但主要取决于数据集的大小。如果您指定 x
的批量大小并且您的数据集包含 N
个样本,则在训练期间,您的数据将分成 N/x
个组(批),每个组(批)的大小为 x
。
因此,您可能希望批量大小小于数据集的大小。没有唯一值,但您希望它按比例小于所有数据(比如一个或两个订单)。有些人更喜欢使用 2 的幂(32、128 等)作为批量大小。在某些情况下也可以完全不使用批处理,并一次训练所有数据(尽管不一定更好)。
其他两个值是 timesteps(时间维度的大小)或每个样本序列的 "frames",以及 data 维度(即每个时间步长的数据向量的大小)。
例如,假设您的输入序列看起来像 X = [[0.54, 0.3], [0.11, 0.2], [0.37, 0.81]]
。我们可以看到这个序列的 timestep 为 3
和 data_dim 为 2
.
所以,您得到的 ValueError
很可能是由于这个原因(该错误甚至暗示它需要 3 个暗淡)。另外,请确保您的数组是 Numpy 数组。
作为最后一条评论,鉴于您说您总共有 32 个样本(即您的整个数据集包含 32 个样本),我认为数据太少而无法使用批次;通常我看到的最小批量大小是 32,因此在尝试使用批量训练之前考虑获取更多数据。希望这有帮助。
我有以下特征向量,每个样本有一个特征,总共有 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))
根据this文章,第一个是批量大小,但另外两个呢?它们是每个样本的特征数量和样本数量吗? 在这种情况下,batch_size 的值应该是多少?
目前收到错误信息:
ValueError: Error when checking input: expected lstm_1_input to have 3 dimensions, but got array with shape (32, 1)
编辑:这是模型声明:
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
根据 this Keras Sequential Model guide on "stateful" LSTM(最底部),我们可以看出这三个元素的含义:
Expected input batch shape: (batch_size, timesteps, data_dim). Note that we have to provide the full batch_input_shape since the network is stateful. the sample of index i in batch k is the follow-up for the sample i in batch k-1.
您已经发现的第一个是在训练期间使用的批 大小。您应该选择多少部分取决于您的具体问题,但主要取决于数据集的大小。如果您指定 x
的批量大小并且您的数据集包含 N
个样本,则在训练期间,您的数据将分成 N/x
个组(批),每个组(批)的大小为 x
。
因此,您可能希望批量大小小于数据集的大小。没有唯一值,但您希望它按比例小于所有数据(比如一个或两个订单)。有些人更喜欢使用 2 的幂(32、128 等)作为批量大小。在某些情况下也可以完全不使用批处理,并一次训练所有数据(尽管不一定更好)。
其他两个值是 timesteps(时间维度的大小)或每个样本序列的 "frames",以及 data 维度(即每个时间步长的数据向量的大小)。
例如,假设您的输入序列看起来像 X = [[0.54, 0.3], [0.11, 0.2], [0.37, 0.81]]
。我们可以看到这个序列的 timestep 为 3
和 data_dim 为 2
.
所以,您得到的 ValueError
很可能是由于这个原因(该错误甚至暗示它需要 3 个暗淡)。另外,请确保您的数组是 Numpy 数组。
作为最后一条评论,鉴于您说您总共有 32 个样本(即您的整个数据集包含 32 个样本),我认为数据太少而无法使用批次;通常我看到的最小批量大小是 32,因此在尝试使用批量训练之前考虑获取更多数据。希望这有帮助。