卷积神经网络Conv1d输入形状

Fra*_*avo 12 input machine-learning neural-network conv-neural-network keras

我正在尝试创建一个CNN来对数据进行分类.我的数据是X [N_data,N_features]我想创建一个能够对其进行分类的神经网络.我的问题是关于keras后端的Conv1D的输入形状.

我想重复一个过滤器..让我说10个功能,然后为接下来的十个功能保持相同的权重.对于每个数据,我的卷积层将创建N_features/10个新神经元.我怎么能这样做?我应该在input_shape中添加什么?

def cnn_model():
model = Sequential()                                               
model.add(Conv1D(filters=1, kernel_size=10 ,strides=10,     
                  input_shape=(1, 1,N_features),kernel_initializer= 'uniform',      
                  activation= 'relu')) 
model.flatten()
model.add(Dense(N_features/10, init= 'uniform' , activation= 'relu' ))
Run Code Online (Sandbox Code Playgroud)

有什么建议?谢谢!

Mar*_*jko 9

尝试:

def cnn_model():
    model = Sequential()                                               
    model.add(Conv1D(filters=1, kernel_size=10 ,strides=10,     
              input_shape=(N_features, 1),kernel_initializer= 'uniform',      
              activation= 'relu')) 
model.flatten()
model.add(Dense(N_features/10, init= 'uniform' , activation= 'relu' ))
....
Run Code Online (Sandbox Code Playgroud)

并重塑你x的形状(nb_of_examples, nb_of_features, 1).

编辑:

Conv1D设计用于序列分析 - 无论我们在哪个序列部分都有相同的卷积滤波器.第二个维度是所谓的特征维度,您可以在每个时间步长处拥有多个要素的向量.人们可能会想到关于序列尺寸相同的空间的尺寸和特征尺寸相同通道尺寸颜色维度Conv2D.正如@putonspectacles在他的评论中提到的那样 - 您可以设置序列维度,None以使您的网络输入长度不变.

  • 所以,如果你可以投票或接受我的回答,我会珍惜:) (2认同)

ors*_*ady 8

@ Marcin的答案可能有用,但可能会给出以下文档的建议:

当使用此层作为模型中的第一层时,提供input_shape参数(整数或无元组,例如(10,128)用于128维向量的10个向量的序列,或者(无,128)用于可变长度128维向量的序列.

将会:

model = Sequential()
model.add(Conv1D(filters=1, kernel_size=10 ,strides=10,     
                  input_shape=(None, N_features),kernel_initializer= 'uniform',      
                  activation= 'relu')) 
Run Code Online (Sandbox Code Playgroud)

请注意,由于输入数据(N_Data,N_features),我们将示例数设置为未指定(None).strides在这种情况下,参数控制时间步长的大小.


rns*_*nso 6

要输入形状(nrows, ncols)Conv1d的常用特征表数据,Keras需要以下 2 个步骤:

xtrain.reshape(nrows, ncols, 1)
# For conv1d statement: 
input_shape = (ncols, 1)
Run Code Online (Sandbox Code Playgroud)

例如,取iris数据集的前 4 个特征:

要查看通常的格式及其形状:

iris_array = np.array(irisdf.iloc[:,:4].values)
print(iris_array[:5])
print(iris_array.shape)
Run Code Online (Sandbox Code Playgroud)

输出显示通常的格式及其形状:

[[5.1 3.5 1.4 0.2]
 [4.9 3.  1.4 0.2]
 [4.7 3.2 1.3 0.2]
 [4.6 3.1 1.5 0.2]
 [5.  3.6 1.4 0.2]]

(150, 4)
Run Code Online (Sandbox Code Playgroud)

以下代码更改格式:

nrows, ncols = iris_array.shape
iris_array = iris_array.reshape(nrows, ncols, 1)
print(iris_array[:5])
print(iris_array.shape)
Run Code Online (Sandbox Code Playgroud)

上述代码数据格式及其形状的输出:

[[[5.1]
  [3.5]
  [1.4]
  [0.2]]

 [[4.9]
  [3. ]
  [1.4]
  [0.2]]

 [[4.7]
  [3.2]
  [1.3]
  [0.2]]

 [[4.6]
  [3.1]
  [1.5]
  [0.2]]

 [[5. ]
  [3.6]
  [1.4]
  [0.2]]]

(150, 4, 1)
Run Code Online (Sandbox Code Playgroud)

这适用于Conv1dof Keras。因为input_shape (4,1)需要。