Pytorch不得不看的基础

一、数据

epoch:所有数据送入网络一次前向计算和反向传播的过程,多个epoch才能拟合收敛
batch:epoch分为几个小的batch同时送入网络
iteration:完成一次epoch需要的batch个数
batchsize:每个batch中送入的数量

1 数据格式

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

2 访问元素

在这里插入图片描述

在这里插入图片描述
1 :3 是第一行到第二行

二、初始化数据

rand和randn的区别
rand是均匀分布
randn是正态分布
Variable详解

三、卷积

https://blog.csdn.net/liujh845633242/article/details/102668515

1 Conv1d

torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode=‘zeros’, device=None, dtype=None)

  • in_channels(int) – 输入信号的通道。在文本分类中,即为词向量的维度
  • out_channels(int) – 卷积产生的通道。有多少个out_channels,就需要多少个1维卷积
  • kernel_size(int or tuple) - 卷积核的尺寸,卷积核的大小为(k,),第二个维度是in_channels来决定的,所以实际上卷积大小为kernel_size*in_channels
  • stride(int or tuple, optional) - 卷积步长
  • padding (int or tuple, default=0)- 输入的每一条边补充0的层数
  • dilation(int or tuple, default=1) - 卷积核元素之间的间距
  • groups(int, optional) - 从输入通道到输出通道的阻塞连接数
  • bias(bool, optional) - 如果bias=True,添加偏置
    在这里插入图片描述
    计算
conv1 = nn.Conv1d(in_channels=256,out_channels=100,kernel_size=2)
input = torch.randn(32,35,256)
# batch_size x text_len x embedding_size -> batch_size x embedding_size x text_len
input = input.permute(0,2,1)#将维度换位(转置)
out = conv1(input)
print(out.size())

32为batchsize,35256符合正态分布的向量,35为句子的最大长度,256为embedding大小
在输入一维卷积时,由于一维卷积是在最后维度上扫的,所以将32
35256变换为3225635,out的大小为:batchsizeoutchannls*(len-kernelsize+1)=32100(353-2+1)=3210034

2 Conv2d

3 filter和kernel

四、归一化

BatchNorm、LayerNorm、InstanceNorm、GroupNorm
BatchNorm:在batch方向做归一化,算NHW的均值,小batchsize的效果不好;缺点是对batchsize的大小比较敏感,由于每次计算均值和方差是在一个batch上,所以如果batchsize太小,则计算的均值、方差不足以代表整个数据分布。

LayerNorm:channel方向做归一化,算CHW的均值,主要对RNN作用明显;

InstanceNorm:一个channel内做归一化,算H*W的均值,用在风格化迁移;因为在图像风格化中,生成结果主要依赖于某个图像实例,所以对整个batch归一化不适合图像风格化中,因而对HW做归一化。可以加速模型收敛,并且保持每个图像实例之间的独立。

GroupNorm:将channel方向分group,然后每个group内做归一化,算(C//G)HW的均值;这样与batchsize无关,不受其约束。

SwitchableNorm是将BN、LN、IN结合,赋予权重,让网络自己去学习归一化层应该使用什么方法。

五、激活

各种激活函数及优缺点

其中nn.ReLU作为一个层结构,必须添加到nn.Module容器中才能使用,而F.ReLU则作为一个函数调用,看上去作为一个函数调用更方便更简洁

nn.functional.relu返回值为Tensor

六、开始训练之前

1 cuda的使用

单GPU也可以用.cuda()将输入、输出和网络送入设备

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
data, target = data.to(device), target.to(device)
net.to(device)

2 seed

模型训练时通常会用rand初始化模型权重,为方便复现论文,多次跑的结果一致,设置种子可以让每次生成的随机数相同

# 给CPU设置种子
torch.manual_seed(number)
# 给GPU设置种子
torch.cuda.manual_seed(number)
# 如果使用多个GPU,应该使用torch.cuda.manual_seed_all()为所有的GPU设置种子。
torch.cuda.manual_seed_all(number)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值