卷积神经网络[CNN]笔记(五)—— 参数共享机制

  这是卷积神经网络笔记第五篇,完整的笔记目录可以点击这里查看。
  
  在卷积神经网络中,卷积层采用参数共享机制控制参数个数。举个例子,假设输入图像大小为55×55×96,卷积核大小为11×11×3。那么,对于神经网络的全连接算法,相当于有55×55×96=290400个神经元的输入,每个神经元有11×11×3=363个权值和1个偏差。加起来,仅第一层上的参数就达到290400×364=105705600。显然,这个数字非常庞大。
  事实证明,我们可以通过做出一个合理的假设来显著减少参数的数量:如果一个特征在某个空间位置(x,y)上的计算是有用的,那么在另一个位置(x2,y2)上的计算也是有用的。换言之,将单个二维图像在深度上进行切片(例如,大小为[55×55×96]的图像有96个深度切片,每个大小为[55x55]),我们约束每个深度切片中的神经元使用相同的权重和偏差。使用此参数共享方案,上述例子中的第一个Conv层现在只有96个唯一的权重集(每个深度切片一个),总共96×11×11×3=34848个唯一权重,或34944个参数(+96个偏差)。或者,每个深度切片中的所有55×55个神经元现在将使用相同的参数。实际上,在反向传播过程中,层中的每个神经元都会计算其权重的梯度,但是这些梯度将在每个深度切片上相加,并且只更新每个切片的一组权重。
  需要注意的是,如果一个深度切片中的所有神经元都使用相同的权重向量,那么Conv层在每个深度切片中的前向传递可以计算为神经元权重与输入的卷积(因此得名:卷积层)。这就是为什么通常将权重集称为与输入卷积的过滤器(或卷积核)的原因。
  为了使上面的讨论更具体,让我们用代码和具体的例子来表达相同的想法。假设输入的图像是一个numpy数组X。那么:

  • 位置(x,y)处的深度列(或fibre)可以表示为X[x,y,:]。
  • 深度切片,或者说深度为d层的数据可以表示为X[:,:,d]。

  假设输入数据X大小为 (11,11,4)。进一步假设我们不使用零填充(P=0),过滤器大小为F=5,步长为S=2。因此,输出体积的空间大小(11-5)/2+1=4,即宽度和高度为4的输出。然后,输出中的激活映射(称为V)将如下所示(本例中仅计算了一些元素):

  • V[0,0,0] = np.sum(X[:5,:5,:] * W0) + b0
  • V[1,0,0] = np.sum(X[2:7,:5,:] * W0) + b0
  • V[2,0,0] = np.sum(X[4:9,:5,:] * W0) + b0
  • V[3,0,0] = np.sum(X[6:11,:5,:] * W0) + b0

  记住,在numpy中,上面的操作*表示数组之间的单个元素之间的相乘。还要注意,权重向量W0是该神经元的权重向量,b0是偏差。这里,W0的大小为(5,5,4),因为滤波器大小是5并且输入数据的深度是4。注意,在每一点上,我们都在计算点积,就像在普通神经网络中的计算一样。此外,我们看到我们使用相同的权重和偏差(由于参数共享),其中沿宽度的尺寸以2的步长增加。要在输出中构建第二个激活映射(在第二个深度切片上),有:

  • V[0,0,1] = np.sum(X[:5,:5,:] * W1) + b1
  • V[1,0,1] = np.sum(X[2:7,:5,:] * W1) + b1
  • V[2,0,1] = np.sum(X[4:9,:5,:] * W1) + b1
  • V[3,0,1] = np.sum(X[6:11,:5,:] * W1) + b1
  • V[0,1,1] = np.sum(X[:5,2:7,:] * W1) + b1 (example of going along y)
  • V[2,3,1] = np.sum(X[4:9,6:11,:] * W1) + b1 (or along both)

  在这里,我们看到我们正在对第二个深度维度进行计算,并且现在使用了一组不同的参数(W1,b1)。在上面的示例中,为了简洁起见,我们省略了Conv层为填充输出数组V的其他部分而执行的一些其他操作。此外,请记住,这些激活映射通常通过诸如ReLU之类的激活函数对每个值进行过滤,但这里没有显示。



*本博客翻译总结自CS231n课程作业网站,该网站需要翻墙才能访问。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用,这篇笔记是关于卷积神经网络CNN)的深度学习理论详解和项目实战的学习笔记。这篇笔记主要介绍了CNN在计算机视觉和图像识别中的应用。 根据引用,在CNN中,Co代表输出通道数(也称为卷积核数量),Ci代表输入通道数,Kh代表卷积核的高度,Kw代表卷积核的宽度。这些参数可以用来定义CNN的结构。 根据引用,你提到想要使用R语言实现一维CNN,并输入一些变量进行二分类。你可以按照想要的数据进行二分类,然后使用R语言编写代码来实现CNN,并添加损失函数的曲线。 希望这些信息对你有帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [深度学习卷积神经网络CNN)全笔记,附代码](https://blog.csdn.net/weixin_58176527/article/details/125530000)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [深度学习——CNN卷积神经网络个人理解笔记汇总](https://blog.csdn.net/m0_59998867/article/details/123696930)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [语言实现一维CNN吗,想输入些变量实现二分类 就是有一些变量,想输入到cnn里算一下进行二分类,这个是想做...](https://download.csdn.net/download/Mrrunsen/88267034)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值