python - 数据集输入到 1D Conv 层的形状困难
问题描述
我的网络的第一层是一个 Conv1D,如下所示:
Conv1D(128, 9, activation='relu', input_shape=(100, 28))
我的输入数据由具有输入形状 (100, 28) 的元素组成。即我的数据集由 n 个这些元素组成,每个元素都有一个标签。标签是长度为 15 的一次性数组。
我的数据集上 .element_spec 的输出给出:
(TensorSpec(shape=(100, 28), dtype=tf.float32, name=None),
TensorSpec(shape=(15,), dtype=tf.int32, name=None))
这看起来一致,但在模型上运行 .fit() 会出现此错误:
Error when checking input: expected conv1d_18_input to have 3 dimensions, but got array with shape (100, 28)
我在这里做错了什么?顺便说一句,这是 TensorFlow 2.0。
编辑:如果我单步执行 tf 代码,它似乎在期待 (None, 100, 28),但这对我来说似乎是错误的。呈现给层的每个元素都是 (100, 28)。“无”肯定只是表示它被多次调用。此外,您不能将 (None, 100, 28) 指定为图层的 input_shape,否则它会抱怨它只需要二维,而不是三个!
非常感谢,
朱利安
解决方案
我在这里的误解是数据集。我的数据集本身具有 (100,28) 的各个元素。我需要做的是将 .batch(32) 应用于数据集。这会产生 (None,100,28),这是所需要的。此批处理数据集上 .element_spec 的输出为:
<class 'tuple'>: (TensorSpec(shape=(None, 100, 3), dtype=tf.float32, name=None), TensorSpec(shape=(None, 5), dtype=tf.int32, name=None))
这就是 1D Convnet 需要输入的内容。
推荐阅读
- mysql - 使用 Python 在 MySQL 中插入大文本文件
- flutter - 从乘法程序的结果数中删除指数“e”
- json - JSON 在使用 React Native 的 Fetch POST 请求中格式错误
- node.js - TypeORM 生成空迁移
- machine-learning - 逻辑回归和机器学习它们是如何相关的
- spring-cloud-gateway - 无法在 Spring Cloud Gateway 中启用 RequestRateLimiter 过滤器
- android - 在android中的文本旁边打印位图
- javascript - 在 PHP 中构建 Angular 项目时如何修复 CORS 策略?
- javascript - 动态 JQuery 对象选择器
- c# - 从 Excel 文件中读取并插入 Access