Keras/Tensorflow Conv1D 预期输入形状

2024-03-07

我想对 29 个特征输入数据(如 29x1 形状)应用一维卷积。我告诉凯拉斯input_shape=(29,1)但我收到一个错误,它期望输入“具有 3 个维度,但得到形状为 (4000, 29) 的数组”。为什么 Keras 期望 3 维?

Keras 文档给出了如何使用 input_shape 的奇怪示例:

(无,128)用于每步具有 128 个特征的可变长度序列。

我不确定可变长度序列是什么意思,但由于我有 29 个功能,所以我也尝试过(None,29) and (1,29)并遇到类似的错误。

我是否误解了一维卷积的作用?

下面是我期望 Conv1D 在内核大小为 3 的情况下(给定 7x1 输入)执行的操作的直观描述。

[x][x][x][ ][ ][ ][ ]
[ ][x][x][x][ ][ ][ ]
[ ][ ][x][x][x][ ][ ]
[ ][ ][ ][x][x][x][ ]
[ ][ ][ ][ ][x][x][x]

为什么 Keras 期望 3 维?

三个维度是(batch_size、feature_size、channels)。

定义 1D Conv 层

Conv1D(32, (3), activation='relu' , input_shape=( 29, 1 ))

将 (4000, 29, 1) 个样本送入该层。

简单的例子:

from keras import models, layers
import numpy as np

x = np.ones((10, 29, 1))
y = np.zeros((10,))
model = models.Sequential()
model.add(layers.Conv1D(32, (3), activation='relu' , input_shape=( 29,1)))
model.add(layers.Flatten())
model.add(layers.Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer= "adam", metrics=['accuracy'])
print(model.summary())
model.fit(x,y)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Keras/Tensorflow Conv1D 预期输入形状 的相关文章

随机推荐