当前位置: 首页 > 知识库问答 >
问题:

keras如何管理卷积层的权重?

黄景胜
2023-03-14

我正在使用MNIST数据集,我正在使用keras来训练卷积神经网络。关于权重矩阵,有些东西我不明白。

输入层有28x28=784个神经元。然后我使用:

Conv2D(32,kernel_size=(7,7),stride=(3,3),use_bias=False)
Conv2D(64,kernel_size=(5,5),stride=(2,2),use_bias=False)
Flatten()
Dense(200,use_bias=False)
Dense(150,use_bias=False)
Dense(10,use_bias=False,softmax)

在我训练模型后,把W=模型。get\u weights(),I打印W[I]。每个i的形状并获得:

(7,7,1,32)
(5,5,32,64)
(256,200)
(200,150)
(150,10)

据我所知,这意味着对于第一个隐藏层有32个8x8=64的图像(因为(28-7)/3 1=8)因此第一个隐藏层中有64x32=2048个神经元。

下一部分是让我困惑的部分。由于下一个卷积具有内核大小(5,5)和跨距(2,2),并使用64个过滤器,这是否意味着我们对第一个隐藏层中获得的每个8x8图像应用64个卷积?这将产生64x32=2048个2x2大小的图像,在第二个隐藏层中将有2048x4=8192个神经元。但下一层的权重矩阵是形状(256200)。它不应该是形状吗(8192200)?这里发生了什么?

共有1个答案

云京
2023-03-14

我认为这个解释会有帮助。计算输出特性的一般公式如下

N_out = ([N_input + 2*padding - kernal_size]/stride) + 1

对于第一个conv层

N_out = ([28 + 2(0) - 7])/3)+1
N_out = 8

你得到了32个滤镜的8x8图像

对于第二个转换层

N_out = ([8 + 2(0) - 5])/2)+1
N_out = 2.5

正如您所看到的,输出大小为2.5,因为您没有指定填充,所以tenorflow使用默认填充作为“VALID”。检查此链接以获取源。

现在,让我们看看如果在8x8图像上使用5X5内核和步长2的有效填充,会发生什么情况。这就是ascii艺术

1 2 3 4 5 6 7 8
|_______|          <--- 1 st window
    |_______|      <--- 2 nd window
        |________  <--- 3rd window will drop(since valid padding)

因此,在第二层(256)之后,您将得到带有64个通道的2x2图像。

例如

from keras import layers

m = Sequential()
m.add(Conv2D(32,kernel_size=(7,7),strides=(3,3),use_bias=False,input_shape=(28,28,1)))
m.add(Conv2D(64,kernel_size=(5,5),strides=(2,2),use_bias=False))
m.add(Flatten())
m.add(Dense(200,use_bias=False))
m.add(Dense(150,use_bias=False))
m.add(Dense(10,use_bias=False,activation='softmax'))

for layer in m.layers: 
    print(layer.output_shape)

输出

(None, 8, 8, 32)
(None, 2, 2, 64)
(None, 256)
(None, 200)
(None, 150)
(None, 10)
 类似资料:
  • 为了将密集层转换为卷积层,我很难找到权重的正确映射。 这是我正在制作的ConvNet的摘录: 在MaxPooling之后,输入是形状(512,7,7)。我想将密集层转换为卷积层,使其看起来像这样: 但是,我不知道我需要如何重塑权重才能将扁平化的权重正确映射到卷积层所需的(4096,512,7,7)结构?现在,密集层的权重是维度(25088,4096)。我需要以某种方式将这25088个元素映射到(5

  • 我对神经网络和keras有点陌生。我有一些大小为6*7的图像,过滤器的大小为15。我想有几个过滤器,并在每个上分别训练一个卷积层,然后组合它们。我在这里看了一个例子: 此型号使用一个过滤器。有谁能给我一些关于如何修改模型以处理并行卷积层的提示吗。 谢啦

  • 我在一维输入信号上实现了一个具有批量归一化的卷积神经网络。我的模型有一个相当好的精度约80%。以下是我的图层顺序:(Conv1D,Batch,ReLU,MaxPooling)重复6次,Conv1D,Batch,ReLU,Dense,Softmax。 我看过几篇文章说我不应该在卷积层上使用dropout,而是应该使用批处理规范化,所以我想通过用dropout层替换所有批处理规范化层来试验我的模型,看

  • 我想做一些类似于完全卷积网络的论文(https://people.eecs.berkeley.edu/~jonlong/long\u shelhamer\u fcn。pdf)使用Keras。我有一个网络,它最终将要素地图展平,并将其穿过几个密集的图层。我想将权重从这样的网络加载到一个网络中,在这个网络中,密集层被等效卷积所取代。 Keras附带的VGG16网络可以作为一个示例,其中最后一个MaxP

  • 卷积神经网络有一个批量过滤器, 持续不断的在图片上滚动收集图片里的信息,每一次收集的时候都只是收集一小块像素区域, 然后把收集来的信息进行整理, 这时候整理出来的信息有了一些实际上的呈现, 比如这时的神经网络能看到一些边缘的图片信息, 然后在以同样的步骤, 用类似的批量过滤器扫过产生的这些边缘信息, 神经网络从这些边缘信息里面总结出更高层的信息结构,比如说总结的边缘能够画出眼睛,鼻子等等. 再经过

  • Convolution1D层 keras.layers.convolutional.Convolution1D(nb_filter, filter_length, init='uniform', activation='linear', weights=None, border_mode='valid', subsample_length=1, W_regularizer=None, b_regu