ValueError: Input 0 of layer sequential_2 is incompatible with the layer Tensorflow
tfidf_text.shape
(3113, 3834)
labels = df.label.values
x_train, x_valid, y_train, y_valid = train_test_split(tfidf_text, labels, test_size=0.1, stratify=labels)
n_classes = df.label.nunique()
batch_size = 4
epochs = 50
num_neurons = 100
n_model = Sequential()
n_model.add(LSTM(num_neurons, return_sequences=True, input_shape=(3113, 3834)))
n_model.add(Dropout(.2))
n_model.add(Flatten())
n_model.add(Dense(n_classes, activation="softmax"))
n_model.compile(optimizer='rmsprop', loss = CategoricalCrossentropy(), metrics=[Precision(), Recall()])
n_model.summary()
n_model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
validation_data=(x_valid, y_valid))
Как исправить ошибку:
ValueError Traceback (most recent call last)
<ipython-input-75-3d68aa27dfae> in <module>()
2 batch_size=batch_size,
3 epochs=epochs,
----> 4 validation_data=(x_valid, y_valid))
9 frames
/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs)
992 except Exception as e: # pylint:disable=broad-except
993 if hasattr(e, "ag_error_metadata"):
--> 994 raise e.ag_error_metadata.to_exception(e)
995 else:
996 raise
ValueError: in user code:
/usr/local/lib/python3.7/dist-packages/keras/engine/training.py:853 train_function *
return step_function(self, iterator)
/usr/local/lib/python3.7/dist-packages/keras/engine/training.py:842 step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:1286 run
return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:2849 call_for_each_replica
return self._call_for_each_replica(fn, args, kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:3632 _call_for_each_replica
return fn(*args, **kwargs)
/usr/local/lib/python3.7/dist-packages/keras/engine/training.py:835 run_step **
outputs = model.train_step(data)
/usr/local/lib/python3.7/dist-packages/keras/engine/training.py:787 train_step
y_pred = self(x, training=True)
/usr/local/lib/python3.7/dist-packages/keras/engine/base_layer.py:1020 __call__
input_spec.assert_input_compatibility(self.input_spec, inputs, self.name)
/usr/local/lib/python3.7/dist-packages/keras/engine/input_spec.py:218 assert_input_compatibility
str(tuple(shape)))
ValueError: Input 0 of layer sequential_6 is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: (None, 3834)
Ответы (1 шт):
Автор решения: Kentavr Dokembrijski
→ Ссылка
Ошибка заключается в том, что вы указали return_sequences = True, а это значит LSTM вернет трехмерный массив в Dense слой, тогда как для него не требуются трехмерные данные ... поэтому уберите return_sequences = True
Попробуй изменить код на следующий:
n_model = Sequential()
n_model.add(LSTM(num_neurons, input_shape=(x_train.shape[1], x_train.shape[2])))