簡體   English   中英

輸入形狀的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)

最初來自這里的代碼

我努力了:

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應該是您數據中的樣本數。 這不會包含在input_shape參數中。 您應該使用...

model.add(LSTM(4, input_shape=(3, 1)))

Keras會自動將批次大小設置為“ None這意味着該模型可以使用任何數量的樣本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM