【问题标题】:Filter size and output layer in 3D Convolutional neural network3D卷积神经网络中的滤波器大小和输出层
【发布时间】:2023-03-16 18:58:02
【问题描述】:

我正在实现一个 3D 卷积神经网络,我有两个问题。

问题 1

每个输入都是一个大小为 (201,10,4) 的 3D 矩阵。我希望我的过滤器在它们完全连接的意义上跨越第二维和第三维。第三维度是特征维度。所以我不想查看第二和第三维度的本地社区。所以我的过滤器大小将是例如 (3,10,4) 的大小。所以过滤器大小等于第二维和第三维,但我们在第一维有权重共享。以下是我的卷积代码:

## input layer
input_layer = Input((201, 10, 4))

## convolutional layers
conv_layer1 = Conv3D(filters=8, kernel_size=(3, 10, 4), activation='relu')(input_layer)
conv_layer2 = Conv3D(filters=16, kernel_size=(3, 10, 4), activation='relu')(conv_layer1)

所以我应该在这里使用 stride 以便它只在第一个维度上进行权重共享。并且在剩下的第二维和第三维中保持完全连接?

问题二

对于每个矩阵,我都有一个形状为 (6,) 的输出,并且在每个索引处,我都有每个特征的频率。所以我希望我的模型能够预测每个特征的频率。我想我需要在这里使用 MSE。但是我的输出层应该是什么样子。应该是这样的:


model.add(Dense(1, activation='linear'))
opt = SGD(lr=0.01, momentum=0.9)
model.compile(loss='mean_squared_error', optimizer=opt)

或者这个:


model.add(Dense(6, activation='linear'))
opt = SGD(lr=0.01, momentum=0.9)
model.compile(loss='mean_squared_error', optimizer=opt)

我们将不胜感激。

【问题讨论】:

    标签: python-3.x keras deep-learning


    【解决方案1】:

    据我所知,Conv3D 需要 5 维输入,(None,D1,D2,D3,D4)。

    您的过滤器只会在 D1、D2、D3 中移动,而不会在 D4 中移动,因为 D4 将是所有过滤器的总和。假设 D1、D2、D3 相同,您的同一个过滤器总是与 D4 中的所有元素相乘。

    答案 1: 不需要 Con3D 中的步幅,因为您的第 2 和第 3 维度与过滤器大小相同,但不要忘记 padding='same',否则您的第 2 和第 3 维度将减少 (filter-1)。

    这意味着只有第 1 个 Con3D 层具有 (201,10,4) 维度,第 2 个 Conv3D 层将具有 (199, 1, 1),这对于第 2 个 Conv3D 层来说不是最优的。

    答案 2:最后一层的神经元应该等于输出的数量,你的输出是 (6,),所​​以密集层应该是 Dense(6)

    注意无需添加线性激活

    【讨论】:

    • 感谢您的详细解答。最后一个问题 MSE 作为损失很好,因为我想预测频率?
    • MSE 适合回归,如果您的结果介于 0 和 inf 之间,那么它是好的,而且 MSE 对异常值敏感,这意味着大数字将优先于小数字。如果您有这种情况,请尝试 MAPE(平均百分比误差),这将根据百分比计算误差,对异常值不敏感。
    猜你喜欢
    • 2017-09-08
    • 1970-01-01
    • 2019-08-30
    • 2019-04-17
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 2017-07-30
    • 2016-12-02
    相关资源
    最近更新 更多