我正在尝试创建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' ))
有什么建议吗? 谢谢!
答案 0 :(得分:8)
尝试:
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' ))
....
重新塑造x
以塑造(nb_of_examples, nb_of_features, 1)
。
修改强>
Conv1D
是为序列分析而设计的 - 无论我们在哪个序列部分都有相同的卷积滤波器。第二个维度是所谓的 features 维度,您可以在每个时间步长处拥有多个要素的向量。可以认为序列维度与空间维度和要素维度相同,与渠道维度或Conv2D中的>颜色维度。正如@putonspectacles在他的评论中提到的那样 - 您可以将序列维度设置为None
,以使您的网络输入长度不变。
答案 1 :(得分:7)
@ Marcin的回答可能会有效,但可能会在此处提供文档建议:
将此图层用作模型中的第一个图层时,请提供 input_shape参数(整数元组或无,例如(10,128)for 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'))
请注意,由于输入数据(N_Data,N_features),我们将示例数设置为未指定(None)。在这种情况下,strides
参数控制时间步长的大小。
答案 2 :(得分:1)
要将形状为(nrows, ncols)
到Conv1d
的{{1}}的常用特征表数据输入,需要执行以下两个步骤:
Keras
例如,采用xtrain.reshape(nrows, ncols, 1)
# For conv1d statement:
input_shape = (ncols, 1)
数据集的前4个特征:
要查看常用格式及其形状:
iris
输出显示通常的格式及其形状:
iris_array = np.array(irisdf.iloc[:,:4].values)
print(iris_array[:5])
print(iris_array.shape)
以下代码更改了格式:
[[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)
上述代码数据格式及其形状的输出:
nrows, ncols = iris_array.shape
iris_array = iris_array.reshape(nrows, ncols, 1)
print(iris_array[:5])
print(iris_array.shape)
这对[[[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)
中的Conv1d
很有效。对于Keras
,input_shape
是必需的。