深入浅出pytorch -批归一化?如何卷积?如何转置卷积?

60 篇文章 3 订阅
26 篇文章 0 订阅

基础图像变换操作

1 空间域

  1. Gamma Correction 伽马校正
    v ′ = α v γ v' = \alpha v^{\gamma} v=αvγ第一:图像像素值(v)代表着亮度(Brightness)
    第二: γ > 1 \gamma>1 γ>1的时候,高亮度区域的变化大即细节增加,低亮度细节减少。

  2. sober算子
    边缘检测
    具体可以搜索百度百科

2 频域
傅里叶变化
高频为细节,为轮廓。
低通滤波可以过滤细节。

图像特征提取

  1. SIFT:scale-invariant feature Transform
    1. 首先计算 金字塔表示(Pyramid Representation)
      高斯滤波 + 下采样
    2. 找到图像金字塔中的特征点:
      拉普拉斯滤波器
      通过之前的高斯滤波和拉普拉斯整合可以成为, LoG高斯拉普拉斯滤波器。
      LoG 计算代价高,用DoG近似。

卷积层

  1. 卷积
  2. 转置卷积,反卷积
    【如果想了解怎么卷积?怎么反卷积?如何形成卷积矩阵和数据列向量的乘积???请看Im2Col GEMM
    我就搬运图,过程如下:

在这里插入图片描述
图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

转置卷积

在这里插入图片描述
二维卷积下,默认的pytorch输入张量为 N,C,H,W

dilation 扩张卷积,增加感受野
transposed 控制是否进行转置卷积,也就是反卷积
摘自:https://www.zhihu.com/question/54149221


归一化层(Normalization Layer)

归一化都采取以下公式:
y = γ x − E ( x ) V a r ( x ) + ϵ + β \bold y = \gamma \frac{\bold x - E(\bold x)}{\sqrt{\bold{Var(x)+\epsilon}}} + \beta y=γVar(x)+ϵ xE(x)+β


批次归一化:Batch Normalization Layer

对于全连接层:
进入神经元前的输入,进行批归一化。
因此你针对的是每个神经元!,每个神经元的输入进行多数据平均。
图中 Z Z Z表示的就是输入到第一个神经元的输出, x 1 x^1 x1就是批次里第一个数据。
在这里插入图片描述

N , C , H , W = = > C × 1 N,C,H,W==>C \times 1 N,C,H,W==>C×1
在这里插入图片描述

  • BatchNorm1d | BatchNorm2d | BatchNorm3d |
class troch.nn.BactchNorm2d(num_features, eps=1e-5, momentum=0.1, affine =True, track_running_states = True)
  1. nums_features: 输入通道数目C

  2. eps: 防止分母为0

  3. momentum 控制指数移动平均计算 E ( x ) 和 V a r ( x ) E(\bold x) 和 Var(\bold x) E(x)Var(x), 如果不用,则track_running_stats=False,就用如下更新:
    x ^ n e w = ( 1 − α ) x t − 1 + α x t ^ \hat x_{new} = (1-\alpha)x_{t-1} + \alpha \hat{x_t} x^new=(1α)xt1+αxt^
    E ( x c ) = 1 N × H × W ∑ N , H , W x c E(\bold{x_c} )= \frac{1}{N \times H \times W}\sum_{N,H,W}\bold{x_c} E(xc)=N×H×W1N,H,Wxc
    V a r ( x ) = 1 N × H × W ∑ N , H , W ( x c − E ( x c ) ) 2 Var(x) = \frac{1}{N \times H \times W}\sum_{N,H,W}\bold{(\bold{x_c} - E(x_c))^2} Var(x)=N×H×W1N,H,W(xcE(xc))2

    x ^ \hat{x_{}} x^ 是基于当前 E ( x ) E(\bold x) E(x) V a r ( x ) Var(\bold x) Var(x)计算所得,相对于批次维度的!!

  4. affine: 是否应用 γ \gamma γ β \beta β形成仿射变换

  5. 缓存值:track_running_stats

    1. running_mean 缓存均值张量
    2. running_var 缓存方差张量
    3. num_batches_tracked 当前迷你批次的数目
  6. 迷你批次不能太小,不然均值和方差波动大,减少稳定性

  7. 批归一化层一般在激活函数,因此卷积中的bias可以设置为false,因为会在减平均中被消去


组归一化:group normalization

组归一化,减少了对批次大小的统计依赖
如果num_of_goups=1那就是层归一化layer norm.
BN和GN

class torch.nn.GroupNorm(num_groups, num_channels, eps=1e-05, affine= True)
  1. 输入张量通道数 分成 num_groups组, C g = C / n u m C_g = C/num Cg=C/num
  2. 每组分别归一化
  3. 注意由于代码没有指数移动平均,因此就没有缓存张量
    E ( x c g ) = 1 C g × H × W ∑ C g , H , W x c g E(\bold{x_{c_g}} )= \frac{1}{C_g\times H \times W}\sum_{C_g,H,W}\bold{x_{c_g}} E(xcg)=Cg×H×W1Cg,H,Wxcg
    V a r ( x c g ) = 1 C g × H × W ∑ C g , H , W ( x c − E ( x c g ) ) 2 Var(x_{c_g}) = \frac{1}{C_g \times H \times W}\sum_{C_g,H,W}\bold{(\bold{x_c} - E(x_{c_g}))^2} Var(xcg)=Cg×H×W1Cg,H,W(xcE(xcg))2

实例归一化: instance normalization

N , C , H , W = = > N , C , 1 N,C,H,W==>N,C,1 N,C,H,W==>N,C,1
简易记忆:实例实例,就是具体某个例子,聚焦在图片,甚至关注到某个图片某个通道。
在这里插入图片描述

由于之前批次归一化都是参考了其他图片的信息,也就是一个批次中很多图片进行去均值除标准拆,而对于风格迁移或者对抗网络来说,不需要参考同一批次中的图像,所以可以用实例归一化。

class torch.nn.InstanceNorm2d(num_features, eps=1e-05, momentum = 0.1. affine =False, track_running_state = False)

E ( x ) = 1 H × W ∑ H , W x E(\bold{x} )= \frac{1}{ H \times W}\sum_{H,W}\bold{x} E(x)=H×W1H,Wx
V a r ( x ) = 1 H × W ∑ H , W ( x c − E ( x ) ) 2 Var(x) = \frac{1}{ H \times W}\sum_{H,W}\bold{(\bold{x_c} - E(x))^2} Var(x)=H×W1H,W(xcE(x))2


层归一化: layer normalization

N , C , H , W = = > N × 1 N,C,H,W ==>N\times1 N,C,H,W==>N×1
在这里插入图片描述

适用于 循环神经网络RNN
求==除了迷你批次维度(N)==以外的所有维度的平均值和方差

class torch.nn.LayerNorm(normalized_shape, eps=1e-05, elementwise_affine=False)

x t = ( 1 − α ) x t − 1 + α x t ^ x_{t} = (1-\alpha)x_{t-1} + \alpha \hat{x_t} xt=(1α)xt1+αxt^
E ( x ) = 1 C × H × W ∑ C , H , W x E(\bold{x} )= \frac{1}{C \times H \times W}\sum_{C,H,W}\bold{x} E(x)=C×H×W1C,H,Wx
V a r ( x ) = 1 C × H × W ∑ C , H , W ( x − E ( x ) ) 2 Var(x) = \frac{1}{C \times H \times W}\sum_{C,H,W}\bold{(\bold{x} - E(x))^2} Var(x)=C×H×W1C,H,W(xE(x))2

局部响应归一化: Local Response Normalization

引用 深入浅出Pytorch-从模型到源码

附录

在这里插入图片描述
B a t c h = > C × 1 Batch=>C\times1 Batch=>C×1
L a y e r − > N × 1 Layer->N\times1 Layer>N×1
I n s t a c n e − > C × N Instacne-> C\times N Instacne>C×N

未完待续。。。。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万物琴弦光锥之外

给个0.1,恭喜老板发财

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值