python - 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]
我想我把输入的形状搞砸了,但我不知道我在哪里做的
谢谢你的帮助!
解决方案
我认为您将 batch_size 留在那里。当您使用以下方式指定它时它是否有效:
model.add(layers.LSTM(128, input_shape=(None, 300, 13), activation='relu', return_sequences=True))
推荐阅读
- c# - HttpContext.SignInAsync() 不对用户进行身份验证
- java - 如何从您的 java 代码中删除 Lombok api
- jquery - 使用 jQuery 加载 Wordpress 页面以制作网站 1 页
- android - 从适用于 Android 的 Google 登录迁移到 Firebase 身份验证
- hex - 十六进制到纬度弧度的转换
- javascript - 摩卡跳过测试
- c# - C# 将文本附加到某一行
- r - 如何替换列表中所有元素的特定值
- python - 在 Visual Studio 代码的同一项目文件夹中使用 python 包
- php - Symfony - 如何为 symfony 服务选择正确的接口(类型提示)?