python - 为什么 Conv1D 输出维度问题?
问题描述
我有一个由 2000 个样本组成的大约 2000 个光谱的阵列。(2000X2000 阵列)。
我遇到了一个简单网络的问题:
def create_model_LCNN(vec_size):
model = models.Sequential()
model.add(Conv1D(filters=64, kernel_size =10, input_shape=(vec_size, 1)))
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
return model
history = model.fit(X_train,
y_train,
epochs=30,
batch_size=64,
validation_data=(X_val, y_val),
callbacks=[early_stopping_monitor])
我得到以下错误的回应:
ValueError:层顺序的输入 0 与层不兼容::预期 min_ndim=3,发现 ndim=2。收到的完整形状:(64, 2924)
我见过多个类似的问题,基本上说改变输入的暗淡。
为什么它需要一个 3-dim 数组?如何考虑参数时间步长?它是否寻求一个序列(我经常看到的另一个术语)?什么顺序?
解决方案
从Conv1D的文档中:
该层创建了一个卷积核,该核与层输入在单个空间(或时间)维度上进行卷积,以产生输出张量。
这意味着如果您的元素只是标量(不是向量,这是一般情况,也涵盖了标量的情况 - 长度 1),您应该扩展输入数组的最后一个维度:
X_train = np.expand_dims(X_train, 2)
这会产生一个 shape 数组,该数组对图层操作(cca 2000, 2924, 1)
有效。Conv1D
您的元素(您拥有cca 2000
的)将被视为向量(排名 1 的张量),并使用64
经过训练的 shape 内核独立进行卷积(10, 1)
。
推荐阅读
- scala - Scala:收集列表参数传递的哈希图中定义的值
- r - R - 时间序列减少与多列的情节
- javascript - 如何在leaflet.js中的点击事件上添加标记
- nginx - NGINX 的别名?
- reactjs - 发布数据 使用 'content-type': 'application/x-www-form-urlencoded' 和 'key': 'key' 发布数据
- python - 使用python检测鼠标是等待还是忙碌
- c++ - 调用 Win32 API 函数时未定义的引用
- python - sklearn.pipeline 中的 LeaveOneOutEncoder
- apache-spark - Spark 中使用和缓存的内存
- c# - TextMeshPro 无法在 Visual Studio 中解析为类