pytorch |青训营笔记

156 阅读2分钟

pytorch

基础模型

 class ConvModule(nn.Module):
     def __init__(self):
         super().__init__()
         self.model=nn.Sequential(
             nn.Linear(20,40),
             nn.Sigmoid()
             nn.Linear(40,10),
             nn.Sigmoid()
         )
         self.loss_fun=nn.BCELoss()       
         self.optimiser = torch.optim.Adam(self.parameters())
         pass
     def forward(self,inputs):
         return  self.model(inputs)
     def train(self,inputs,targets):
         outputs= self.forward(inputs)
         loss=self.loss_fun(outputs,targets)
         self.optimiser.zero_grad()
         loss.backward()
         self.optimiser.step()        

Sequential里面写网络,并且自带forward,ModelList不带forward。

loss_fun在预测时用mse,分类用bce

optimiser即梯度下降法,sgd是最简单的方法,adam是动量法

可以用layernorm标准化

激活函数RELU一般比sigmoid更好

self.optimiser.zero_grad():梯度归零 loss.backward():计算传播梯度 self.optimiser.step():反向传播梯度

别的函数

embedding层:可以降维

conv2D:卷积,参数:in_channels=输入层,out_channels=输出层,kernel_size=卷积大小,stride = 步长

W或H=[(输入大小-卷积核大小+2*P)/步长] +1.

Google colab可以租服务器,还能连接google drive里的资源

MaxPool2d:池化。kernel_size=池化大小

池化公式

H_{out}=⌊\frac{H_{in}+2*padding[0]-dilation[0]*×(kernel_size⌊0⌋−1)−1}{stride[0]}+1⌋

W_{out}=⌊\frac{W_{in}+2*padding[1]-dilation[1]*×(kernel_size⌊1⌋−1)−1}{stride[1]}+1⌋

ceil_mode可以改变取整方式,true是向上,默认向下

**return_indices**为true可以返回位置信息

扩散模型来自物理学中的Langevin dynamics

model.eval()的作用是不启用 Batch Normalization 和 Dropout。

model.train()的作用是启用 Batch Normalization 和 Dropout。

  • 在train模式下,dropout网络层会按照设定的参数p设置保留激活单元的概率(保留概率=p); BN层会继续计算数据的mean和var等参数并更新。
  • 在eval模式下,dropout层会让所有的激活单元都通过,而BN层会停止计算和更新mean和var,直接使用在训练阶段已经学出的mean和var值。

这两个一定放在循环里面而不是外面

model.eval()和torch.no_grad()的区别

with torch.no_grad()则主要是用于停止autograd模块的工作,以起到加速和节省显存的作用。它的作用是将该with语句包裹起来的部分停止梯度的更新,从而节省了GPU算力和显存,但是并不会影响dropout和BN层的行为。

model.eval()不会影响各层的gradient计算行为,即gradient计算和存储与training模式一样,只是不进行反向传播(back probagation)。