Keras / Tensorflow Conv1D预期输入形状

时间:2019-05-02 18:55:41

标签: tensorflow keras neural-network conv-neural-network convolution

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

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

  

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

我不确定它们对可变长度序列的含义,但是由于我具有29个功能,因此我也尝试了(None,29)(1,29)并得到了类似的错误。

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

给定7x1输入,这是我期望Conv1D在内核大小为3的情况下的视觉描述。

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

1 个答案:

答案 0 :(得分:2)

为什么Keras期望3维?

  
    
      

这三个维度分别是(batch_size,feature_size,通道)。

    
  

定义一维转换层

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)