ValueError: Input 0 of layer dense_1 is incompatible with the layer
ValueError: Input 0 of layer dense_1 is incompatible with the layer
我第一次使用 tensorflow,将具有 18 个特征的数据分类为 4 个 类。
X_train的维度是:(14125,18).
这是我的代码:
dataset = tf.data.Dataset.from_tensor_slices((np.array(X_train.values, dtype=float),
np.array(y_train.pet_category.values, dtype=float)))
train_data = dataset.shuffle(len(X_train)).batch(32)
vdataset = tf.data.Dataset.from_tensor_slices((np.array(X_val.values, dtype=float)))
val_data = vdataset.batch(32)
tfmodel = tf.keras.Sequential([
tf.keras.layers.Dense(15, activation=tf.nn.relu, input_shape=(18,1)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(10, activation=tf.nn.relu),
tf.keras.layers.Dense(4, activation=tf.nn.softmax)
])
tfmodel.compile(optimizer='adam',
loss=tf.keras.losses.CategoricalCrossentropy(),
metrics=['accuracy'])
调用 tfmodel.fit(dataset, epochs=15, validation_data=val_data)
时,出现以下错误:
ValueError: Input 0 of layer dense_1 is incompatible with the layer: expected axis -1 of input shape to have value 270 but received input with shape [18, 15]
我尝试寻找类似的问题,但找不到任何有帮助的问题。对解决这个问题很有帮助
编辑:问题出在版本上。当我使用较低版本的 TensorFlow (v 2.1.0) 时它消失了。
您正在使用 dataset
int fit
而不是 train_data
。我假设您正在使用一个名为 X_train
和 y_train
的 DataFrame,我用 numpy 模仿了它,现在它可以工作了。见下文。
import tensorflow as tf
import numpy as np
X_train = np.random.random((14125,18))
y_train = np.random.random((14125,1))
dataset = tf.data.Dataset.from_tensor_slices((X_train, y_train))
train_data = dataset.shuffle(len(X_train)).batch(32)
train_data = train_data.prefetch(
buffer_size=tf.data.experimental.AUTOTUNE)
tfmodel = tf.keras.Sequential([
tf.keras.layers.Dense(15, activation=tf.nn.relu, input_shape=(18,)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(10, activation=tf.nn.relu),
tf.keras.layers.Dense(4, activation=tf.nn.softmax)
])
tfmodel.compile(optimizer='adam',
loss=tf.keras.losses.CategoricalCrossentropy(),
metrics=['accuracy'])
tfmodel.fit(train_data, epochs=5)
注意:我没有使用 val_data
Train for 442 steps
Epoch 1/5
442/442 [==============================] - 1s 2ms/step - loss: 7.8375 - accuracy: 1.4159e-04
Epoch 2/5
442/442 [==============================] - 1s 2ms/step - loss: 28.5034 - accuracy: 0.0000e+00
Epoch 3/5
442/442 [==============================] - 1s 1ms/step - loss: 17.8604 - accuracy: 0.0000e+00
Epoch 4/5
442/442 [==============================] - 1s 1ms/step - loss: 3.4244 - accuracy: 2.1239e-04
Epoch 5/5
442/442 [==============================] - 1s 2ms/step - loss: 3.2791 - accuracy: 0.0160
<tensorflow.python.keras.callbacks.History at 0x7f0d8c72d630>
问题似乎出在我使用的 tensorflow 版本 (2.3.0)
我尝试了每晚构建,但它给出了同样的错误。
我降级到 v2.1.0 并且有效
我第一次使用 tensorflow,将具有 18 个特征的数据分类为 4 个 类。
X_train的维度是:(14125,18).
这是我的代码:
dataset = tf.data.Dataset.from_tensor_slices((np.array(X_train.values, dtype=float),
np.array(y_train.pet_category.values, dtype=float)))
train_data = dataset.shuffle(len(X_train)).batch(32)
vdataset = tf.data.Dataset.from_tensor_slices((np.array(X_val.values, dtype=float)))
val_data = vdataset.batch(32)
tfmodel = tf.keras.Sequential([
tf.keras.layers.Dense(15, activation=tf.nn.relu, input_shape=(18,1)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(10, activation=tf.nn.relu),
tf.keras.layers.Dense(4, activation=tf.nn.softmax)
])
tfmodel.compile(optimizer='adam',
loss=tf.keras.losses.CategoricalCrossentropy(),
metrics=['accuracy'])
调用 tfmodel.fit(dataset, epochs=15, validation_data=val_data)
时,出现以下错误:
ValueError: Input 0 of layer dense_1 is incompatible with the layer: expected axis -1 of input shape to have value 270 but received input with shape [18, 15]
我尝试寻找类似的问题,但找不到任何有帮助的问题。对解决这个问题很有帮助
编辑:问题出在版本上。当我使用较低版本的 TensorFlow (v 2.1.0) 时它消失了。
您正在使用 dataset
int fit
而不是 train_data
。我假设您正在使用一个名为 X_train
和 y_train
的 DataFrame,我用 numpy 模仿了它,现在它可以工作了。见下文。
import tensorflow as tf
import numpy as np
X_train = np.random.random((14125,18))
y_train = np.random.random((14125,1))
dataset = tf.data.Dataset.from_tensor_slices((X_train, y_train))
train_data = dataset.shuffle(len(X_train)).batch(32)
train_data = train_data.prefetch(
buffer_size=tf.data.experimental.AUTOTUNE)
tfmodel = tf.keras.Sequential([
tf.keras.layers.Dense(15, activation=tf.nn.relu, input_shape=(18,)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(10, activation=tf.nn.relu),
tf.keras.layers.Dense(4, activation=tf.nn.softmax)
])
tfmodel.compile(optimizer='adam',
loss=tf.keras.losses.CategoricalCrossentropy(),
metrics=['accuracy'])
tfmodel.fit(train_data, epochs=5)
注意:我没有使用 val_data
Train for 442 steps
Epoch 1/5
442/442 [==============================] - 1s 2ms/step - loss: 7.8375 - accuracy: 1.4159e-04
Epoch 2/5
442/442 [==============================] - 1s 2ms/step - loss: 28.5034 - accuracy: 0.0000e+00
Epoch 3/5
442/442 [==============================] - 1s 1ms/step - loss: 17.8604 - accuracy: 0.0000e+00
Epoch 4/5
442/442 [==============================] - 1s 1ms/step - loss: 3.4244 - accuracy: 2.1239e-04
Epoch 5/5
442/442 [==============================] - 1s 2ms/step - loss: 3.2791 - accuracy: 0.0160
<tensorflow.python.keras.callbacks.History at 0x7f0d8c72d630>
问题似乎出在我使用的 tensorflow 版本 (2.3.0) 我尝试了每晚构建,但它给出了同样的错误。 我降级到 v2.1.0 并且有效