CNN中pooling层的反向传播

  CNN中的pooling层一般有max pooling和average pooling两种。虽然pooling层没有参数,但为了使用链式法则逐层向前进行梯度的传播,也是需要对pooling层进行求导计算的。

  假设P_prev经过pooling层之后得到P,pooling的步长为stride_h和stride_w, pooling的窗口大小为f_h * f_w。需要通过dP求解dP_prev。假设h,w,c分别表示dP上某个点的高、宽和通道数,对dP_prev进行求解。

  对于max_pooling,只有窗口内的最大值对后层影响,也会影响最终的loss。故反向传播时,也只获取窗口内最大值的梯度,而窗口其它位置的梯度为0。可以用伪码表示如下:

dP_prev[h*stride_h: h*stride_h + f_h, w*stride_w: w*stride_w+f_w, c] = dP[h,w,c] * (P_prev[h*stride_h: h*stride_h + f_h, w*stride_w: w*stride_w+f_w, c] == max(P_prev[h*stride_h: h*stride_h + f_h, w*stride_w: w*stride_w+f_w, c]))

  对于averag pooling,窗口内的所有值对于后层和loss的影响一样,故反向传播时,一个窗口内的所有位置的梯度等于将dP[h,w,c]平分到各个位置上。可以用伪码表示如下:

dP_prev[h*stride_h: h*stride_h + f_h, w*stride_w: w*stride_w+f_w, c] = dP[h,w,c] * 1/(f_h*f_w) * np.ones(f_h,f_w)
### 解决 `curl` 出现 `symbol lookup error` 当遇到 `curl: symbol lookup error: curl: undefined symbol: curl_easy_nextheader` 的情况时,这通常意味着库文件版本不匹配或存在冲突。为了有效解决问题,可以采取以下措施: #### 卸载现有 `curl` 安装 移除当前系统的 `curl` 版本有助于防止新旧版本之间的冲突。对于基于 Debian 或 Ubuntu 的系统,可以通过命令行执行如下操作来彻底清除现有的 `curl` 软件包及其配置文件[^2]。 ```bash sudo apt-get purge curl ``` #### 获取最新版源码并编译安装 从官方仓库克隆最新的 `curl` 源代码,并按照推荐的方式进行构建和安装。这样能够确保获得最稳定的版本以及必要的补丁支持。 ```bash git clone https://github.com/curl/curl.git cd curl ./buildconf ./configure \ --disable-static \ --enable-threaded-resolver \ --with-ca-path=/etc/ssl/certs make sudo make install ``` #### 更新动态链接器缓存 完成上述步骤之后,还需要更新系统的共享库路径以便加载新的 `libcurl.so` 文件。此过程可通过运行 ldconfig 实现。 ```bash sudo ldconfig ``` #### 验证安装成果 最后一步是验证刚刚的操作是否成功解决了问题。通过调用 `curl -V` 来查看已安装的 `curl` 版本信息和其他细节,确认不再有未定义符号报错提示出现。 ```bash curl -V ``` 如果一切正常,则说明已经成功修复了该错误;反之则可能需要进一步排查其他潜在因素的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值