• 一、常用的神经网络层

    • 1。图像相关层

      • 1)卷积层
      • 2)池化层
      • 3)Linear:全连接层;
      • 4)BatchNorm: 批规范化层,分为1D,2D,3D.除了标准的BatchNorm之外,还有在风格迁移中常用到的InstanceNorm.
      • 5)Dropout:dropout层,用来防止过拟合,同样分为1D,2D,3D.
  • 二、激活函数
  • 三、多层网络
    • Sequential的三种写法
    • ModuleList

一、常用的神经网络层

1。图像相关层

图像相关层主要包括卷积层(Conv)、池化层(Pool)、等。这些层在实际应用中可以分为一维(1D)、二维(2D)和三维(3D),池化又分为平均池化(SvgPool)、
最大值池化(MaxPool)、自适应池化(AdaptiveAvgPool)等。卷积层除了常用的前向卷积外,还有逆卷积(TransposeConv).

1)卷积层

import torch as t
from torch import nn
from torch.autograd import Variable as Vfrom PIL import Image
from torchvision.transforms import ToTensor, ToPILImage
to_tensor=ToTensor()
to_pil=ToPILImage()
lena=Image.open('C:/Users/Duan/Pictures/lena.jpg')
print(type(lena))
print(lena.size)input=to_tensor(lena).unsqueeze(0)kernel=t.ones(3,3)/-9
kernel[1][1]=1
conv=nn.Conv2d(1,1,(3,3),1,bias=False)
conv.weight.data=kernel.view(1,1,3,3)out=conv(V(input))
to_pil(out.data.squeeze(0))


lena图
程序输出:

处理后的lena图

2)池化层

池化可以看做一种特殊的卷积层,用来下采样。但池化没有可学习的参数,其weight是固定的。

import torch as t
from torch import nn
from torch.autograd import Variable as Vfrom PIL import Image
from torchvision.transforms import ToTensor, ToPILImageto_tensor=ToTensor()
to_pil=ToPILImage()lena=Image.open('C:/Users/Duan/Pictures/1.jpg')
input=to_tensor(lena).unsqueeze(0)pool=nn.AvgPool2d(2,2)
list(pool.parameters())out=pool(V(input))
to_pil(out.data.squeeze(0))


池化处理后的lena图
除了卷积层和池化层,深度学习中还经常用到以下几个层:

3)Linear:全连接层;

用法:
全连接层:

#输入batchsize=2,维度3
import torch as t
from torch import nn
from torch.autograd import Variable as Vinput=V(t.randn(2,3))
linear=nn.Linear(3,4)
h=linear(input)
h

运行结果:

tensor([[-1.0120, -0.4962,  0.0714, -0.9935],[-0.0530,  0.0573,  0.1812, -0.7866]])

4)BatchNorm: 批规范化层,分为1D,2D,3D.除了标准的BatchNorm之外,还有在风格迁移中常用到的InstanceNorm.

#4channel .初始化标准差为4,均值为0
bn=nn.BatchNorm1d(4)
bn.weight.data=t.ones(4)*4
bn.bias.data=t.zeros(4)bn_out=bn(h)
bn_out.mean(0),bn_out.var(0,unbiased=False)

运行结果:

(tensor(1.00000e-05 *[-1.7226, -0.1788, -0.0596,  0.0000]),tensor([  2.6517,  15.8695,  15.9834,  15.9828]))

5)Dropout:dropout层,用来防止过拟合,同样分为1D,2D,3D.

#每个元素以0.5的概率舍弃
dropout=nn.Dropout(0.5)
o=dropout(bn_out)
o  #有一半左右的数变为0

结果:

tensor([[ 0.0000,  0.0000,  0.0000, -7.9957],[-0.0000, -7.9673, -0.0000,  0.0000]])

二、激活函数

Pytorch实现了常用的激活函数。。这些激活函数可以作为独立的layer使用。这里将介绍最常用的 激活函数ReLU,其数学表达式为为:

ReLU(x)=max(0,x)ReLU(x)=max(0,x)ReLU(x)=max(0,x)

relu=nn.ReLU(inplace=True)
input=V(t.randn(2,3))
print("input")
print(input)
output=relu(input)
print("output")
print(output)

结果:

input
tensor([[-0.5211,  0.7563, -1.8086],[ 0.0911, -1.1649, -0.5653]])
output
tensor([[ 0.0000,  0.7563,  0.0000],[ 0.0911,  0.0000,  0.0000]])

ReLU函数有个inplace参数,如果设为True,他会把输出直接覆盖到原输入中,这样可以节省内存/显存。
之所以可以直接覆盖是因为在计算ReLU的反向传播时,只需根据输出就能够推算出反向传播的梯度。但是只有少数的autograd操作支持inplace操作(如variable.sigmoid_()),除非你明确地知道自己在做什么,否则一般不要使用inplace操作。

三、多层网络

在以上例子中,都是讲每一层的输出直接作为下一层的输入,这种网络成为前馈传播网络(Feedforward Neural Network).对于此网络,如果每次都写复杂的forward函数会有些麻烦,在此就有两种简化方式:ModuleList和Sequential.
其中Sequential是一个特殊的Module,他包含几个子Module,前向传播时会将输入一层一层地传递下去。
ModuleList也是一个特殊的Module,可以包含几个子Module,可以像list一样使用它,但不能直接把输入传给ModuleList.

Sequential的三种写法

#Sequential的三种写法
#*******************
net1=nn.Sequential()
net1.add_module('conv',nn.Conv2d(3,3,3))
net1.add_module('batchnorm',nn.BatchNorm2d(3))
net1.add_module('activation_layer',nn.ReLU())#*******************
net2=nn.Sequential(nn.Conv2d(3,3,3),nn.BatchNorm2d(3),nn.ReLU()
)#*******************
from collections import OrderedDict
net3=nn.Sequential(OrderedDict([('conv1',nn.Conv2d(3,3,3)),('bn1',nn.BatchNorm2d(3)),('relu1',nn.ReLU())
]))print('net1',net1)
print('net2',net2)
print('net3',net3)

结果:

net1 Sequential((conv): Conv2d(3, 3, kernel_size=(3, 3), stride=(1, 1))(batchnorm): BatchNorm2d(3, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation_layer): ReLU()
)
net2 Sequential((0): Conv2d(3, 3, kernel_size=(3, 3), stride=(1, 1))(1): BatchNorm2d(3, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(2): ReLU()
)
net3 Sequential((conv1): Conv2d(3, 3, kernel_size=(3, 3), stride=(1, 1))(bn1): BatchNorm2d(3, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(relu1): ReLU()
)

可以根据名字或序号取出子Module

net1.conv,net2[0],net3.conv1

结果:

(Conv2d(3, 3, kernel_size=(3, 3), stride=(1, 1)),Conv2d(3, 3, kernel_size=(3, 3), stride=(1, 1)),Conv2d(3, 3, kernel_size=(3, 3), stride=(1, 1)))

用法:

input=V(t.randn(1,3,4,4))
output=net1(input)
output=net2(input)
output=net3(input)
output=net3.relu1(net1.batchnorm(net1.conv(input)))
input=V(t.randn(1,3,4,4))
print(input.size())
output=net3.relu1(net1.batchnorm(net1.conv(input)))
print(output.size())

结果:

torch.Size([1, 3, 4, 4])
torch.Size([1, 3, 2, 2])

ModuleList

modulelist=nn.ModuleList([nn.Linear(3,4),nn.ReLU(),nn.Linear(4,2)])
input=V(t.randn(1,3))
for model in modulelist:input=model(input)

除ModuleLis之外还有ParameterList,它是一个可以包含很多个parameter的类list对象。
在实际应用中,使用方式与ModuleList类似。
在构造函数__init__ 中用到list, tuple, dict等对象时,一定要考虑是否应该用ModuleLis或ParameterList。

Pytorch——常用的神经网络层、激活函数相关推荐

  1. python 人脸识别:从入门到精通 (5.4)常用的神经网络层

    第5章 深度学习与Keras工程实践 5.4 常用的神经网络层 5.4.1 全连接层 keras.layers.Dense(units,activation=None,use_bias=True,ke ...

  2. pytorh 激活函数,循环神经网络层,损失函数和优化器

    激活函数 PyTorch实现了常见的激活函数,其具体的接口信息可参见官方文档,这些激活函数可作为独立的layer使用.这里将介绍最常用的激活函数ReLU,其数学表达式为: R e L U ( x ) ...

  3. 使用Pytorch快速搭建神经网络模型(附详细注释和讲解)

    文章目录 0 前言 1 数据读入 2 模型搭建 3 模型训练 4 模型测试 5 模型保存 6 参考博客 0 前言 代码参考了知乎上"10分钟快速入门PyTorch"系列,并且附上了 ...

  4. PyTorch框架学习十一——网络层权值初始化

    PyTorch框架学习十一--网络层权值初始化 一.均匀分布初始化 二.正态分布初始化 三.常数初始化 四.Xavier 均匀分布初始化 五.Xavier正态分布初始化 六.kaiming均匀分布初始 ...

  5. PyTorch框架:(2)使用PyTorch框架构建神经网络模型---气温预测

    目录 第一步:数据导入 第二步:将时间转换成标准格式(比如datatime格式) 第三步: 展示数据:(画了4个子图) 第四步:做独热编码 第五步:指定输入与输出 第六步:对数据做一个标准化 第七步: ...

  6. 收藏!PyTorch常用代码段合集

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:Jack Stark,来源:极市平台 来源丨https://zhu ...

  7. PyTorch常用代码段合集

    ↑ 点击蓝字 关注视学算法 作者丨Jack Stark@知乎 来源丨https://zhuanlan.zhihu.com/p/104019160 极市导读 本文是PyTorch常用代码段合集,涵盖基本 ...

  8. 【深度学习】PyTorch常用代码段合集

    来源 | 极市平台,机器学习算法与自然语言处理 本文是PyTorch常用代码段合集,涵盖基本配置.张量处理.模型定义与操作.数据处理.模型训练与测试等5个方面,还给出了多个值得注意的Tips,内容非常 ...

  9. pytorch list转tensor_PyTorch 52.PyTorch常用代码段合集

    本文参考于: Jack Stark:[深度学习框架]PyTorch常用代码段​zhuanlan.zhihu.com 1. 基本配置 导入包和版本查询: import torch import torc ...

  10. 收藏 | PyTorch常用代码段合集

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨Jack Stark@知乎 来源丨https://zh ...

最新文章

  1. April Fools Contest 2017 题解源码(A,数学 B,数学 C,数学 D,字符串 E,数字逻辑 F,排序,卡时间,G,数学)...
  2. 反射和配置文件的实际应用
  3. 搜狐新闻推荐算法原理 | “呈现给你的,都是你所关心的”
  4. Spring : 静态代理模式和JDK、CGLIB动态代理
  5. centos7 install virt-sysprep
  6. docker helowin 迁移_禅道在docker上部署与迁移
  7. 数据集永久下架,微软不是第一个,MIT 也不是最后一个
  8. php创建表的返回值,php 判断table 是否存在 根据返回值继续下一步的操作
  9. Openstack的用户登录流程
  10. 公钥与私钥 数字签名是什么?
  11. 如何进行影像建库及做ArcGIS Server Cache
  12. python时间序列如何拟合曲线_以“datetime”格式拟合时间序列的曲线?
  13. 2个阶乘什么意思_两个阶乘号是什么意思,-双阶乘-数学-滕诓芳同学
  14. linux yum资源下载,yumdownloader命令 – 从yum存储库下载rpm包
  15. MATLAB绘图—三维网格绘图(mesh)
  16. python字体加粗代码_如何在python docx中加粗行单元格的文本?
  17. .net 批量更新_痛点:Anaconda3 python第三方库批量安装
  18. Anaconda安装Unpacking payload step frozen
  19. 反反爬虫 大众点评-图片文字破解 2020年6月6日更新
  20. 在计算机内部除顶点,西交17年3月课程考试《CADCAM》作业考核试题答案 1.通常我们将数据的物理结构称为数据 ......

热门文章

  1. python赋值运算符_解释一下python中的赋值运算符
  2. linux 3.2.0 卸载,linux python3编译以及 卸载,python默认为python3 ,pip默认为pip3,亲测版...
  3. ni max不能连续采集图像_1.6视觉检测项目过程分解——程序的连续运行
  4. sql不写parametertype_Mapper接口中方法的输入参数类型要和Mapper.xml中定义的每个sql的parameterType的类型相同...
  5. ae导出json_AE脚本导出json格式的Web动画工具 Bodymovin v5.7.0 + 使用教程【资源分享1171】...
  6. 打印pdf文件 vfp_将Excel转换成PDF的工具有哪些?
  7. Javascript特效:旋转木马轮播图
  8. SQL:postgresql中实现查询某字段总数量和该字段不同值各自的数量
  9. android倒计时的正确释放,Android 计时器和handler的正确使用方式
  10. 论文阅读-多任务(2021)-YOLOP:用于自动驾驶目标检测与语义分割的实时多任务模型