Keras/Tensorflow Conv1D 预期输入形状

6
我想对我的 29 个特征输入数据(即 29x1 形状)进行一维卷积。我告诉 Keras input_shape=(29,1),但是我得到了一个错误,它期望输入 "具有三个维度,但得到形状为 (4000, 29) 的数组"。Keras 为什么期望三个维度?
Keras 文档给出了一个奇怪的例子来使用 input_shape:

(None, 128) 表示每步具有 128 个特征的可变长度序列。

我不确定他们所说的可变长度序列是什么意思,但由于我有 29 个特征,我也尝试过 (None,29)(1,29) ,但是遇到了类似的错误。
我是否误解了一维卷积的含义?
以下是我期望使用核大小为 3 的 Conv1D 对 7x1 输入进行的视觉描述。
[x][x][x][ ][ ][ ][ ]
[ ][x][x][x][ ][ ][ ]
[ ][ ][x][x][x][ ][ ]
[ ][ ][ ][x][x][x][ ]
[ ][ ][ ][ ][x][x][x]
1个回答

8

Keras为什么要求三维张量?

这三个维度是(batch_size,feature_size,channels)。

定义一个一维卷积层。

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)

因此,“batch_size”参数在“input_shape”中被省略(按照惯例?),其中“(29,1)”的定义实际上意味着“(batch_size_omitted,29,1)”。而且Keras拒绝吃掉1d np数组,因为CNN通常用于具有3个维度(“通道”R、G、B)的图像。即使我们只有一个通道,我们也必须将我们的1d数组包装成大小为29x1的矩阵。 - Atte Juvonen
是的,在文档中提到不要包括批处理轴(https://keras.io/layers/convolutional/)。即使对于只有一个通道的灰度图像,也必须指定通道维度。https://github.com/keras-team/keras/blob/master/examples/mnist_cnn.py - Manoj Mohan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接