ZFNet: Visualizing and Understanding Convolutional Networks

本文详细介绍了ZFNet的网络结构,并针对其输入输出尺寸的变化进行了具体说明。此外,还深入探讨了反卷积的过程及计算方法,旨在帮助读者理解如何通过补零操作实现特征图的逆向重建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

ZFnet的创新点主要是在信号的“恢复”上面,什么样的输入会导致类似的输出,通过这个我们可以了解神经元对输入的敏感程度,比如这个神经元对图片的某一个位置很敏感,就像人的鼻子对气味敏感,于是我们也可以借此来探究这个网络各层次的功能,也能帮助我们改进网络。

论文结构

在这里插入图片描述

  1. input: 3 × 224 × 224 3 \times 224 \times 224 3×224×224, filter size: 7, filter count: 96, stride: 2, padding: 1, 我觉得是要补一层零的,否则输出是109而不是110–>ReLU --> maxpool: size: 3 × 3 3 \times 3 3×3, stride: 2, 似乎这里也要补一层零, 否则 ⌊ 110 − 3 2 + 1 ⌋ = 54 \lfloor \frac{110-3}{2}+1 \rfloor=54 21103+1=54 --> contrast normalized;
  2. input: 96 × 55 × 55 96 \times 55 \times 55 96×55×55, filter size: 5, count: 256, stride: 2, padding: 0 --> ReLU --> maxpool: size: 3 × 3 3 \times 3 3×3, stride: 2, padding: 1–> contrast normlized;
  3. input: 256 × 13 × 13 256 \times 13 \times 13 256×13×13, filter size: 3, count: 384, stride: 1, padding: 1 --> ReLU
  4. input: 384 × 13 × 13 384 \times 13 \times 13 384×13×13, filter size: 3, count: 384, stride: 1, padding: 1 --> ReLU
  5. input: 384 × 13 × 13 384 \times 13 \times 13 384×13×13, filter size: 3, count: 256, stride: 1, padding: 1 --> ReLU --> maxpool: size: 3, stride: 2, padding: 0 --> contrast normlized?
  6. input: 6 ∗ 6 ∗ 256 6 * 6 * 256 66256 – > 4096 – > ReLU – > Dropout(0.5)
  7. input: 4096 – > 4096 --> ReLU – > Dropout(0.5)
  8. input: 4096 --> numclass …

反卷积

网上看了很多人关于反卷积的解释,但是还是云里雾里的.

先关于步长为1的,不补零的简单情况进行分析吧, 假设:

input: i × i i \times i i×i,
kernel_size: k × k k \times k k×k ,
stride: 1,
padding: 0

此时输出的大小 o o o应当满足:
i = k + o − 1 ⇒ o = i − k + 1 i = k + o - 1 \Rightarrow o = i-k+1 i=k+o1o=ik+1

现在,反卷积核大小依旧为 k ′ = k k'=k k=k, 那么我们需要补零 c ′ c' c为多少才能使得反回去的特征大小为 i i i.
即:
2 c ′ + o = k + i − 1 ⇒ c ′ = k − 1 2c' + o = k + i-1 \Rightarrow c'= k-1 2c+o=k+i1c=k1
即我们要补零 c ′ = k − 1 c'=k-1 c=k1.

如果stride 不为1呢?设为 s s s, 那么:
i = k + s ( o − 1 ) ⇒ o = i − k s + 1 i = k + s(o-1) \Rightarrow o = \frac{i-k}{s}+1 i=k+s(o1)o=sik+1

按照别的博客的说话,需要在特征之间插入零那么:
2 c ′ + ( s − 1 ) ( o − 1 ) + o = k + s ′ ( i − 1 ) 2c'+(s-1)(o-1) +o= k+s'(i-1) 2c+(s1)(o1)+o=k+s(i1)

如果我们希望 s ′ = 1 s'=1 s=1(至于为什么希望我不清楚):
c ′ = k − 1 c' = k-1 c=k1

如果还有补零 p p p:
i + 2 p = k + s ( o − 1 ) i+2p = k+s(o-1) i+2p=k+s(o1)
但是回去的时候我们是不希望那个啥补零的,所以:
2 c ′ + ( s − 1 ) ( o − 1 ) + o = k + s ′ ( i − 1 ) 2c'+(s-1)(o-1) +o= k+s'(i-1) 2c+(s1)(o1)+o=k+s(i1)
不变,
如果 s ′ = 1 s'=1 s=1, 结果为:
c ′ = k − p − 1 c' = k-p-1 c=kp1

最大的问题是什么,是why! 为什么要这样反卷积啊?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值