「Deep Learning」理解Pytorch中的「torch.nn」
来源:互联网 发布:mac快捷键的图形符号 编辑:程序博客网 时间:2024/06/14 05:36
Sina Weibo:小锋子Shawn
Tencent E-mail:403568338@qq.com
http://blog.csdn.net/dgyuanshaofeng/article/details/78768107
Module,所有神经网络模块的基础类。
Sequential,序贯容器,类似Keras里面的序贯模型,另外这些是比较传统的卷积网络了。
Conv2d,卷积层。
ConvTranspose2d,转置卷积层。
ReflectionPad2d,属于Padding Layers,镜像填充。Padding的方式可以是统一方式,也就是指定一个数值,也可以是不规则方式,也就是给出一个4元组。Shape的计算公式可以查看文档。如下:Ho = Hi + paddingTop + paddingBottom, Wo = Wi + paddingLeft + paddingRight。
#is intm = nn.ReflectionPad2d(3)# ReflectionPad2d(3, 3, 3, 3)input = autograd.Variable(torch.randn(16, 3, 320, 480)) # size 16 3 320 480output = m(input) # size 16 3 326 486#is 4-tuplem = nn.ReflectionPad2d((3, 3, 6, 6)) # Left, Right, Top, Bottomoutput = m(input) # size 16 3 332 486
ReplicationPad2d,同上,复制填充。
ReplicationPad3d,类似上面。
ZeroPad2d,同上,常数为零。
ConstantPad2d,同上,常数自己指定。
Non-linear Activations,非线性激活函数
LeakyReLU,泄漏ReLU。
Tanh,双曲正切函数。输出值范围在[-1, 1]。
BatchNorm2d,根据公式进行空间批归一化(Spatial BatchNorm),也即(input-mean[input]) / (sqrt(var[input]+eps))*gamma+beta。这里的input一般为4d张量的每一通道,也就是每一通道有自己的mean、var、gamma和beta。
InstanceNorm2d,根据公式进行归一化,也即(input-mean[input]) / (sqrt(var[input])+ eps)*gamma+beta,这个公式跟BatchNorm2d有点差别,开方计算仅对方差进行。不明白batchnorm和instancenorm的差别,需要看看论文。
Linear,我怀疑是全连接层。由例子可见,m=nn.Linear(20,30)为创建一个30*20的矩阵weight,另外bias为30。输入x为(128, 20),输出y(128, 30)。
Loss functions,损失函数
L1Loss,计算输入x和目标y的差异(差)的平均绝对值,也就是两个矩阵点对点作差并取绝对值,求和然后除以元素的总数。如果参数size_average=False,那么不进行“除以元素的总数”。两个矩阵可推广到4维张量等,这是元素的总数就是算上多batchsize多channel了。另外,在0.3.0版本中,可以设置reduce=False来避免多batchsize计算,也就是可以计算每一批量中的L1Loss,不进行average。
MSELoss,也就是L2Loss。
BSELoss,二项交叉熵。
init,负责权重和偏置的初始化。
xavier_normal,为Glorot initialisation,在论文[1]中提出。权重的值从N(0, std)中采样获取,其中std=gain*sqrt(2/(fan_in+fan_out)),gain为放缩因子(默认为1),fan_in和fan_out分别为权重张量中的输入神经元个数和输出神经元个数。
xavier_uniform,同上。权重的值从U(-a, a)中采样获取,其中a=gain*sqrt(2/(fan_in+fan_out))*sqrt(3),gain为放缩因子(默认为1),fan_in和fan_out同上。可以使用normal和uniform的方法验证,也就是利用xavier_uniform和uniform分别初始化一个矩阵,其中uniform的参数由自己手动计算,经过初始化后的两个矩阵作差再求期望,如果足够小,那么就理解了,但是fan_in和fan_out要求和,所以我们并不清楚,哪个是输入和输出。
kaiming_uniform,为He initilisation,在论文[2]中被提出。权重的值从U(-bound, bound)中采样获取,其中bound=sqrt(2/((1+a^2)*fan_in))*sqrt(3),a为这种之后被使用的rectifier的负斜率,针对ReLU默认为0,mode可选“fan_in”或“fan_out”。选择fan_in,将在正向传播中保持权重的方差大小,而fan_out,将在反向传播中保持大小。
kaiming_normal,同上。权重的值从N(0, std)中采样获取,其中std=sqrt(2/((1+a^2)*fan_in)),其他同上。
orthogonal,API中并没有详细介绍,在论文中[3]中被提出。从名字上,权重的值被(半)正交矩阵填充。
DataParallel layers (multi-GPU, distributed),数据并行层,支持分布式多GPU
参考文献
[1] Understanding the difficulty of training deep feedforward neural networks, Glorot X., Bengio Y.
[2] Delving deep into rectifier: Surpassing human-level performance on ImageNet classification. He K. et la..
阅读全文
0 0
- 「Deep Learning」理解Pytorch中的「torch.nn」
- 「Deep Learning」理解Pytorch中的「torch.utils.data」
- 「Deep Learning」理解Pytorch中的「torch.cuda」
- 「Deep Learning」理解Pytorch中的「torchvision.transforms」
- 「Deep Learning」Ubuntu 14.04+Anaconda2+Caffe+OpenCV2+TensorFlow+TensorLayer+Keras+Pytorch
- Deep Learning with Torch
- 「Deep Learning」Adam
- PyTorch(1) torch.nn与torch.nn.functional之间的区别和联系
- PyTorch学习总结(五)——torch.nn
- 「Deep Learning」Batch Normalization - Accelerating Deep Network Training
- 「Deep Learning」Optimizers/Solvers
- 「Deep Learning」Activation function
- 「Deep Learning」V-Net
- 「Deep Learning」Notes on SoftMax
- 「Deep Learning」Caffe: convert_imageset.cpp
- 「Deep Learning」Spatial Transformer Networks
- 「Deep Learning」Instance Normalization
- torch.nn
- PAT乙级1063. 计算谱半径(20)
- Triangle
- 网络编程
- markdown公式
- Android图片加载框架最全解析,实现带进度的Glide图片加载功能
- 「Deep Learning」理解Pytorch中的「torch.nn」
- linux nohup命令实现退出终端后程序继续后台运行
- 单片机实验-利用定时器产生方波
- JS原型+原型链
- 排序实例(冒泡+归并)
- 微信access_token、jsapi_ticket中控服务器
- 反射1
- 对操作控制器的整体把握
- 希捷硬盘解决目录或文件无法读取问题(20171210)特此记录