输入形状的 Keras LSTM 输入形状错误
Keras LSTM input shape error for input shape
我在将时间序列与 Keras 结合使用时遇到此错误:
ValueError: Error when checking input: expected lstm_1_input to have 3 dimensions, but got array with shape (31, 3)
这是我的功能:
def CreateModel(shape):
"""Creates Keras Model.
Args:
shape: (set) Dataset shape. Example: (31,3).
Returns:
A Keras Model.
Raises:
ValueError: Invalid shape
"""
if not shape:
raise ValueError('Invalid shape')
logging.info('Creating model')
model = Sequential()
model.add(LSTM(4, input_shape=(31, 3)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
return model
主要代码:
print(training_features.shape)
model = CreateModel(training_features.shape)
model.fit(
training_features,
training_label,
epochs=FLAGS.epochs,
batch_size=FLAGS.batch_size,
verbose=FLAGS.keras_verbose_level)
完全错误:
Traceback (most recent call last):
File "<embedded module '_launcher'>", line 149, in run_filename_as_main
File "<embedded module '_launcher'>", line 33, in _run_code_in_main
File "model.py", line 300, in <module>
app.run(main)
File "absl/app.py", line 433, in run
_run_main(main, argv)
File "absl/app.py", line 380, in _run_main
sys.exit(main(argv))
File "model.py", line 274, in main
verbose=FLAGS.keras_verbose_level)
File "keras/models.py", line 960, in fit
validation_steps=validation_steps)
File "keras/engine/training.py", line 1581, in fit
batch_size=batch_size)
File "keras/engine/training.py", line 1414, in _standardize_user_data
exception_prefix='input')
File "keras/engine/training.py", line 141, in _standardize_input_data
str(array.shape))
ValueError: Error when checking input: expected lstm_1_input to have 3 dimensions, but got array with shape (31, 3)
代码最初来自here
我试过:
training_features = numpy.reshape(
training_features,
(training_features.shape[0], 1, training_features.shape[1]))
但我得到:
ValueError: Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=4
如果您的原始数据是 (31,3),那么我认为您要查找的是 training_features.shape = (31,3,1)。您可以通过以下行获得它...
training_features = training_features.reshape(-1, 3, 1)
这将简单地向现有数据添加一个新轴(-1 只是告诉 numpy 使用原始数据中的值计算出这个维度)。
您还需要修复模型的输入形状。 31 应该是数据中的样本数。这不会包含在 Keras input_shape
参数中。你应该使用...
model.add(LSTM(4, input_shape=(3, 1)))
Keras 会自动将批量大小设置为 None
,这意味着任意数量的样本都可以与模型一起使用。
我在将时间序列与 Keras 结合使用时遇到此错误:
ValueError: Error when checking input: expected lstm_1_input to have 3 dimensions, but got array with shape (31, 3)
这是我的功能:
def CreateModel(shape):
"""Creates Keras Model.
Args:
shape: (set) Dataset shape. Example: (31,3).
Returns:
A Keras Model.
Raises:
ValueError: Invalid shape
"""
if not shape:
raise ValueError('Invalid shape')
logging.info('Creating model')
model = Sequential()
model.add(LSTM(4, input_shape=(31, 3)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
return model
主要代码:
print(training_features.shape)
model = CreateModel(training_features.shape)
model.fit(
training_features,
training_label,
epochs=FLAGS.epochs,
batch_size=FLAGS.batch_size,
verbose=FLAGS.keras_verbose_level)
完全错误:
Traceback (most recent call last):
File "<embedded module '_launcher'>", line 149, in run_filename_as_main
File "<embedded module '_launcher'>", line 33, in _run_code_in_main
File "model.py", line 300, in <module>
app.run(main)
File "absl/app.py", line 433, in run
_run_main(main, argv)
File "absl/app.py", line 380, in _run_main
sys.exit(main(argv))
File "model.py", line 274, in main
verbose=FLAGS.keras_verbose_level)
File "keras/models.py", line 960, in fit
validation_steps=validation_steps)
File "keras/engine/training.py", line 1581, in fit
batch_size=batch_size)
File "keras/engine/training.py", line 1414, in _standardize_user_data
exception_prefix='input')
File "keras/engine/training.py", line 141, in _standardize_input_data
str(array.shape))
ValueError: Error when checking input: expected lstm_1_input to have 3 dimensions, but got array with shape (31, 3)
代码最初来自here
我试过:
training_features = numpy.reshape(
training_features,
(training_features.shape[0], 1, training_features.shape[1]))
但我得到:
ValueError: Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=4
如果您的原始数据是 (31,3),那么我认为您要查找的是 training_features.shape = (31,3,1)。您可以通过以下行获得它...
training_features = training_features.reshape(-1, 3, 1)
这将简单地向现有数据添加一个新轴(-1 只是告诉 numpy 使用原始数据中的值计算出这个维度)。
您还需要修复模型的输入形状。 31 应该是数据中的样本数。这不会包含在 Keras input_shape
参数中。你应该使用...
model.add(LSTM(4, input_shape=(3, 1)))
Keras 会自动将批量大小设置为 None
,这意味着任意数量的样本都可以与模型一起使用。