python - ValueError:检查输入时出错:预期 lstm_1_input 的形状为 (973, 215),但得到的数组的形状为 (61, 215)
问题描述
ValueErrors
在尝试通过更改许多参数来解决以下问题时,我收到了多个不同的问题。
这是一个time series problem
,我有来自 60 家商店、215 件商品、1034 天的数据。我已经将 973 天用于训练,61 天用于测试。:
train_x = train_x.reshape((60, 973, 215))
test_x = test_x.reshape((60, 61, 215))
train_y = train_y.reshape((60, 973, 215))
test_y = test_y.reshape((60, 61, 215))
我的模型:
model = Sequential()
model.add(LSTM(100, input_shape=(train_x.shape[1], train_x.shape[2]),
return_sequences='true'))
model.add(Dense(215))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=
['accuracy'])
history = model.fit(train_x, train_y, epochs=10,
validation_data=(test_x, test_y), verbose=2, shuffle=False)
ValueError:检查输入时出错:预期 lstm_1_input 的形状为 (973, 215),但得到的数组的形状为 (61, 215)
解决方案
您已根据时间步长而不是样本拆分数据。您需要首先确定您的样本是什么。为了回答,我将假设这些是沿着第一个轴(假设数据已被构建为有监督的时间序列问题)。
LSTM 中的input_size
LSTM 期望的形状如此处所述(timesteps, data_dim)
,并且这些尺寸对于每批必须保持相同。在您的示例中,来自训练和测试的样本具有不同的维度。批量大小可以不同(除非使用参数指定)。batch_size
您的数据应沿第一个轴在训练和测试之间进行拆分。这是 Keras 教程中的一个类似示例:
from keras.models import Sequential
from keras.layers import LSTM, Dense
import numpy as np
data_dim = 16
timesteps = 8
num_classes = 10
# expected input data shape: (batch_size, timesteps, data_dim)
model = Sequential()
model.add(LSTM(32, return_sequences=True,
input_shape=(timesteps, data_dim))) # returns a sequence of vectors of dimension 32
model.add(LSTM(32, return_sequences=True)) # returns a sequence of vectors of dimension 32
model.add(LSTM(32)) # return a single vector of dimension 32
model.add(Dense(10, activation='softmax'))
model.compile(loss='categorical_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
# Generate dummy training data
x_train = np.random.random((1000, timesteps, data_dim))
y_train = np.random.random((1000, num_classes))
# Generate dummy validation data
x_val = np.random.random((100, timesteps, data_dim))
y_val = np.random.random((100, num_classes))
model.fit(x_train, y_train,
batch_size=64, epochs=5,
validation_data=(x_val, y_val))
您会注意到timesteps
训练和测试数据和x_train.shape[1] == x_val.shape[1]
. 它是沿第一个轴不同的样本数x_train.shape[0]
is1000
和x_val.shape[0]
is 100
。
推荐阅读
- python - 使用 Image.fromarray() 时元组索引超出 PIL 范围
- node.js - 将音乐添加到对话流
- javascript - 如何在点击时访问任何按钮的 ID?
- r - 将新数据附加到 R 中的现有 csv 文件
- javascript - 从 arrValue.start_date 未定义
- python - 基于条件语句将条件列 C 设置为 Col A 或 Col B 的最快方法
- php - PHP $_POST 没有看到附加到 FormData 的数据
- java - 非静态方法的 Java Consumer MethodReference
- regex - 在 REGEX 中搜索多行的问题
- reactjs - 在 saga 和 redux 中发送相同的事件到达顺序