【问题标题】:ValueError: Input 0 of layer dense_1 is incompatible with the layerValueError: 层dense_1的输入0与层不兼容
【发布时间】:2020-11-28 03:14:25
【问题描述】:

我是第一次使用 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) 时,它就消失了。

【问题讨论】:

  • 如果你的数据的形状是(14125,18),那么你的输入形状应该是(18,),我假设14125是数据点的数量。
  • 试了一下,错误改成Input 0 of layer sequential is... input shape to have value 18 but received input with shape [18, 1]
  • 你可以试试train_data.element_spec 看看你的数据集的形状吗?
  • (TensorSpec(shape=(None, 18), dtype=tf.float64, name=None), TensorSpec(shape=(None,), dtype=tf.float64, name=None))
  • 嗯,你可以试试input_shape=(18),因为你的数据集形状也是一样的吗?

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


【解决方案1】:

您使用的是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>

【讨论】:

  • 哦,哇,我确实犯了那个错误。以后会出问题的。但似乎它仍然不起作用。我试图运行你的代码,它给出了同样的错误
  • 你用的是什么版本的tensorflow?
  • 我正在使用tensorflow-gpu==2.2.0
【解决方案2】:

看来问题出在我使用的 tensorflow 版本(2.3.0) 我尝试了夜间构建,它给出了同样的错误。 我降级到 v2.1.0 并且可以正常工作

【讨论】:

    猜你喜欢
    • 2021-07-04
    • 2021-05-31
    • 2021-09-13
    • 1970-01-01
    • 2022-07-22
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多