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)。