【问题标题】:Keras: convolutional layer for 1D inputKeras:一维输入的卷积层
【发布时间】:2018-04-09 18:25:55
【问题描述】:

我无法为一维输入向量构建 CNN。

输入值示例:

df_x.iloc[300]
Out[33]:
0     0.571429
1     1.000000
2     0.971429
3     0.800000
4     1.000000
5     0.142857
6     0.657143
7     0.857143
8     0.971429
9     0.000000
10    0.000000
11    0.000000
12    0.000000
13    0.000000
14    0.000000
15    0.000000
Name: 300, dtype: float64

输出值示例:

df_y.iloc[300]
Out[34]:
0     0.571429
1     0.914286
2     1.000000
3     0.971429
4     0.800000
5     1.000000
6     0.914286
7     0.942857
8     0.800000
9     0.657143
10    0.857143
11    0.971429
12    0.000000
13    0.000000
14    0.000000
15    0.000000
16    0.000000
17    0.000000
18    0.000000
19    0.000000
20    0.000000
21    0.000000
22    0.000000

我有 15k 个训练示例。

df_x.shape
Out[28]:
(15772, 16)

df_y.shape
Out[29]:
(15772, 23)

我现在的模特:

model = Sequential()
model.add(Conv2D(5, df_x.shape[1], input_shape=(5, 1)))
model.add(Dense(46, activation='relu'))
model.add(Dense(56, activation='relu'))
model.add(Dense(66, activation='relu'))
model.add(Dense(56, activation='relu'))
model.add(Dense(46, activation='relu'))
model.add(Dense(df_y.shape[1], activation='relu'))

# compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

# Fit the model
model.fit(df_x, df_y, epochs=5, batch_size=10)

我想构建模型,其中第一层的卷积大小为(5,1)、5 个过滤器和输入形状df_x.shape[1], 1

我有一个错误:

ValueError: Input 0 is incompatible with layer conv2d_10: expected ndim=4, found ndim=3

您能解释一下如何为一维输入值构建 CNN 吗?

【问题讨论】:

    标签: python machine-learning deep-learning keras conv-neural-network


    【解决方案1】:

    为此,您应该使用 Conv1D 而不是 Conv2D

    Conv2D 被命名为二维,因为它旨在处理图像。但是,Conv2D 的输入实际上是 4 维 - (batch, width, height, channels)channels 可以是3 RGB 或1 灰度图像。这就是 keras 抱怨的原因:

    ValueError:输入 0 与层 conv2d_10 不兼容:预期 ndim=4,找到ndim=3

    Conv1D 接受 3 维 输入,而这正是您所拥有的(前提是您将 df_x 扩展为 (15772, 16, 1))。此外,input_shape 参数必须与每行的大小匹配。试试这个:

    model.add(Conv1D(5, 5, input_shape=(df_x.shape[1], 1)))
    

    【讨论】:

    • 好的,它解决了 CNN 层的问题。我当前的 df_x 和 df_y 形状:(15772, 16, 1) 和 (15772, 23, 1)。我有新错误:ValueError:检查目标时出错:预期dense_44 的形状为(12, 23),但得到的数组的形状为(23, 1)。为什么最后一层有 shape(12, 23)?
    • 这个错误与Dense层有关,很可能是最后一个。模型中的形状是什么? model.summary() 显示什么?
    • 12 在 conv 过滤器之后:16 -> 12,因为过滤器大小是 5。你想要它是什么?
    • 我想在输出上有一个向量。所以大小应该是 (1, 23)。有没有其他选项可以使用 size filter 15 来减小这个尺寸?
    • 是的,通常MaxPooling1D用于此
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 2020-11-15
    • 2017-05-21
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多