【发布时间】:2019-12-23 08:55:05
【问题描述】:
我想在 Keras 中使用卷积层训练 CNN,例如
x_1 = Conv2D(16, (kernel_size, kernel_size))(x_in)
x_in 这里包含 3 个输入特征层,因此这里必须训练 3*16 = 48 个 kernel_size*kernel_size 的内核。假设我希望这 48 个内核中的 5 个完全为 0(所以它的所有元素),我怎样才能有效地训练呢?
提前致谢。
我的总配置是这样的:
x_in = Input(shape=(None, None, 3))
x_1 = Conv2D(16, (kernel_size, kernel_size))(x_in)
x_1 = ReLU()(x_1)
x_2 = Conv2D(16, (kernel_size, kernel_size))(x_1)
x_2 = ReLU()(x_2)
x_3 = Conv2D(16, (kernel_size, kernel_size))(x_2)
return Model(inputs=x_in, outputs=x_3)
【问题讨论】:
-
x_in
的形状是什么? -
3 个通道,通道的维度未知,因为我使用的数据集包含不同分辨率的图像
-
如果我没记错的话,必须训练 (3x3) 的 16 个内核而不是 48 个,对吗? 16 个内核将在 3 个通道上共享,进行 48 次卷积操作?
-
不,必须训练 48 个内核。每个输入通道-输出通道组合一个。
-
在默认卷积操作的情况下,16 个过滤器(不是 48 个)将在通道之间共享(3x3x16(权重)+ 16(偏差)= 448 个可训练参数)。那么您是否正在尝试自定义此操作?
标签: python tensorflow keras conv-neural-network