【发布时间】: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