python - 值错误: Input 0 of layer dense_1 is incompatible with the layer

标签 python tensorflow machine-learning deep-learning multiclass-classification

我第一次使用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_trainy_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>

关于python - 值错误: Input 0 of layer dense_1 is incompatible with the layer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63307619/

相关文章:

python - Keras - 从目录结构中获取标签作为字符串

machine-learning - Keras imageGenerator 异常 : output of generator should be a tuple (x, y,sample_weight) 或 (x, y)。发现:无

python - 根据某些条件从模型中过滤数据

python - 在 TensorFlow 中保存自定义估算器

python - np.partition() 如何解释参数 kth?

tensorflow - 导入 Tensorflow 库报错

python - 使用 TensorFlow 的 TFRecordReader

python - 可在 Python 中使用的最快 SVM 实现

python - 局部直方图均衡化

python - Tensorflow Iris 数据集永远不会收敛