![](/img/trans.png)
[英]InvalidArgumentError with model.fit in Tensorflow
[英]Keras InvalidArgumentError With Model.Fit()
我正在嘗試在順序 Keras 模型上調用model.fit()
,但收到此錯誤:
---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
<ipython-input-30-3fc420144082> in <module>
15 return model
16
---> 17 trained_model = build_model()
<ipython-input-30-3fc420144082> in build_model()
10 # fit model
11 es = tf.keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=1)
---> 12 model.fit(train_data[0], train_data[1], epochs=100,verbose=1)
13 # validation_data = (val_data[0], val_data[1])
14 print(model.summary())
~/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, max_queue_size, workers, use_multiprocessing, **kwargs)
878 initial_epoch=initial_epoch,
879 steps_per_epoch=steps_per_epoch,
--> 880 validation_steps=validation_steps)
881
882 def evaluate(self,
~/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/training_arrays.py in model_iteration(model, inputs, targets, sample_weights, batch_size, epochs, verbose, callbacks, val_inputs, val_targets, val_sample_weights, shuffle, initial_epoch, steps_per_epoch, validation_steps, mode, validation_in_fit, **kwargs)
327
328 # Get outputs.
--> 329 batch_outs = f(ins_batch)
330 if not isinstance(batch_outs, list):
331 batch_outs = [batch_outs]
~/.local/lib/python3.6/site-packages/tensorflow/python/keras/backend.py in __call__(self, inputs)
3074
3075 fetched = self._callable_fn(*array_vals,
-> 3076 run_metadata=self.run_metadata)
3077 self._call_fetch_callbacks(fetched[-len(self._fetches):])
3078 return nest.pack_sequence_as(self._outputs_structure,
~/.local/lib/python3.6/site-packages/tensorflow/python/client/session.py in __call__(self, *args, **kwargs)
1437 ret = tf_session.TF_SessionRunCallable(
1438 self._session._session, self._handle, args, status,
-> 1439 run_metadata_ptr)
1440 if run_metadata:
1441 proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)
~/.local/lib/python3.6/site-packages/tensorflow/python/framework/errors_impl.py in __exit__(self, type_arg, value_arg, traceback_arg)
526 None, None,
527 compat.as_text(c_api.TF_Message(self.status.status)),
--> 528 c_api.TF_GetCode(self.status.status))
529 # Delete the underlying status object from memory otherwise it stays alive
530 # as there is a reference to status from this from the traceback due to
InvalidArgumentError: data[0].shape = [3] does not start with indices[0].shape = [2]
[[{{node training_40/Adam/gradients/loss_21/dense_21_loss/MeanSquaredError/Mean_grad/DynamicStitch}}]]
我創建了一組訓練點,每個 1 x 3,由 train_data[0] 調用和一組訓練標簽,每個 1x1 由 train_data[1] 調用。 這是我用來構建模型的代碼:
def build_model():
'''
Function to build a LSTM RNN model that takes in quantitiy, converted week; outputs predicted price
'''
# define model
model = tf.keras.Sequential()
model.add(tf.keras.layers.LSTM(128, activation='relu', input_shape=(num_steps,num_features*input_size)))
model.add(tf.keras.layers.Dense(input_size))
model.compile(optimizer='adam', loss='mse')
# fit model
es = tf.keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=1)
model.fit(train_data[0], train_data[1], epochs=100,verbose=1)
# validation_data = (val_data[0], val_data[1])
print(model.summary())
return model
trained_model = build_model()
我不確定為什么,但是當我調用model.fit(train_data, epochs = 100)
並且不將其分解為點和標簽時,一切正常。 任何見解將不勝感激!
根據 tensorflow 的 tf.keras.models.Model 文檔,這是有道理的:
https://www.tensorflow.org/api_docs/python/tf/keras/models/Model#fit
fit(x=None, y=None, batch_size=None, epochs=1, ...)
它精確:
y:目標數據。 與輸入數據 x 一樣,它可以是 Numpy 數組或 TensorFlow 張量。 它應該與 x 一致(你不能有 Numpy 輸入和張量目標,或者相反)。 如果 x 是數據集、數據集迭代器、生成器或 keras.utils.Sequence 實例,則不應指定 y(因為將從 x 獲取目標)。
您的 lstm 是一個順序模型,我猜您將train_data
准備為train_data
類型?
還請注意您的 tensorflow 版本,上面的文檔鏈接適用於 r1.13
編輯:
嘗試以這種方式准備數據集:
features_type = tf.float32
target_type = tf.int32
train_dataset = tf.data.Dataset.from_tensor_slices(
tf.cast(train_data[0].values, features_type),
tf.cast(train_data[1].values, target_type)
)
model.fit(train_dataset, epochs=100, verbose=1)
確保您將 features_type(所有功能轉換為 float32)和 target_type(用於分類的 int32)適應您當前要解決的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.