首页 > 解决方案 > Tensorflow 值错误:输入与层不兼容

问题描述

我目前正在尝试使用 tensorflow 训练我的第一个模型。为此,我标记了数据:

tlabelstrain = ops.convert_to_tensor(label_train_data, dtype=dtypes.int32)
tdatatrain = ops.convert_to_tensor(data_train_data)

labeled_train_data = tf.data.Dataset.from_tensor_slices((tdatatrain, tlabelstrain))

训练数据来自 499 个文件,包含 300*13 个特征。这 499 个文件中的每一个在 [1,2,3,4,5,6,7] 内都有一个标签。

如果我这样做,print(labeled_train_data)我会得到这个:

<TensorSliceDataset shapes: ((300, 13), ()), types: (tf.float64,tf.int32)>

然后我尝试创建一个模型并对其进行训练:

model = tf.keras.Sequential()

model.add(layers.LSTM(128, input_shape=(300, 13), activation='relu', return_sequences=True))

model.add(layers.Dropout(0.2))
model.add(layers.LSTM(128, activation='relu'))
model.add(layers.Dropout(0.2))
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dropout(0.2))

model.add(layers.Dense(7, activation='softmax'))

model.compile(loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
              optimizer=tf.keras.optimizers.Adam(1e-4),
              metrics=['accuracy'])

model.fit(labeled_train_data, epochs=3)

如果我运行它,我会收到一个值错误:

ValueError: 层序贯_12 的输入 0 与层不兼容:预期 ndim=3,发现 ndim=2。收到的完整形状:[300, 13]

我想我把输入的形状搞砸了,但我不知道我在哪里做的

谢谢你的帮助!

标签: pythontensorflow

解决方案


我认为您将 batch_size 留在那里。当您使用以下方式指定它时它是否有效:

model.add(layers.LSTM(128, input_shape=(None, 300, 13), activation='relu', return_sequences=True))

推荐阅读