Python ValueError:图层1的输入0与该图层不兼容

Python ValueError:图层1的输入0与该图层不兼容,python,tensorflow,machine-learning,deep-learning,multiclass-classification,Python,Tensorflow,Machine Learning,Deep Learning,Multiclass Classification,我第一次使用tensorflow,有趣的是,它将具有18个特征的数据分为4类 X_列车的尺寸为:(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 = d

我第一次使用tensorflow,有趣的是,它将具有18个特征的数据分为4类

X_列车的尺寸为:(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\u data=val\u 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(v2.1.0)时,它消失了。

您使用的是
数据集
int
fit
,而不是
train\u data
。我假设您正在使用一个名为
X\u-train
y\u-train
的数据帧,我在numpy中也做了同样的模拟,现在它可以工作了。见下文

将tensorflow导入为tf
将numpy作为np导入
X_序列=np.随机.随机((14125,18))
y_列=np.随机.随机((14125,1))
dataset=tf.data.dataset.from_张量_切片((X_序列,y_序列))
序列数据=数据集。无序排列(len(X_序列))。批处理(32)
列车数据=列车数据。预取(
缓冲区大小=tf.data.experimental.AUTOTUNE)
tfmodel=tf.keras.Sequential([
密度(15,激活=tf.nn.relu,输入形状=(18,),
tf.keras.layers.flatte(),
tf.keras.layers.Dense(10,活化=tf.nn.relu),
tf.keras.layers.Dense(4,活化=tf.nn.softmax)
])
编译(optimizer='adam',
损失=tf.keras.loss.CategoricalCrossentropy(),
指标=[‘准确度’])
tfmodel.fit(列车数据,历次=5)
注意:我没有使用
val\u数据

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>
训练442步
纪元1/5
442/442[====================================]-1s 2ms/步长-损耗:7.8375-精度:1.4159e-04
纪元2/5
442/442[=================================]-1s 2ms/步-损耗:28.5034-精度:0.0000e+00
纪元3/5
442/442[==============================]-1s 1ms/步长-损耗:17.8604-精度:0.0000e+00
纪元4/5
442/442[==============================]-1s 1ms/步长-损耗:3.4244-精度:2.1239e-04
纪元5/5
442/442[==============================]-1s 2ms/步长-损耗:3.2791-精度:0.0160

问题似乎出在我使用的tensorflow版本(2.3.0)上 我尝试了夜间构建,它给出了相同的错误。
我降级到v2.1.0,效果很好

如果数据的形状是
(14125,18)
,我假设14125是数据点的数量,那么输入的形状应该是
(18),
。试用后,错误变为
输入0的层顺序是。。。输入shape的值为18,但接收到的输入是shape[18,1]
你可以试试
训练数据元素规范
并查看数据集的形状吗?
(TensorSpec(shape=(None,18),dtype=tf.float64,name=None),TensorSpec(shape=(None,),dtype=tf.float64,name=None))
嗯你可以试试
输入shape=(18)
因为你的数据集形状也是一样的?哦,哇,我确实犯了那个错误。以后会成为一个问题。但它似乎仍然不起作用。我试图运行你的代码,但它给出了相同的错误你使用的是什么版本的tensorflow?我使用的是
tensorflow gpu==2.2.0