为什么要设置随机种子数据规范化数据扩充模型定义定义训练循环
为什么要设置随机种子模型搭建过程中,参数都需要进行初始化,如果每次初始化的结果不同,训练模型的结果就不一样
因此为了保证每次输出结果一致,就需要设置随机数种子,保证代码的可复现性
random.random() #这个方法生产每次产生的随机数都是不同的 random.seed(x) #只要设定了随机数种子x,那么得到的随机数序列就是相同的
随机数种子的值可以是任意数字
数据规范化规范化后平均值为0,标准差为1
内置函数 .mean() 、 .std()函数可以分别用来计算平均值和标准差
数据扩充导入torchvision.transforms模块,用于人工创建更多数据集的方式操纵可用的训练数据。
.RandomRotation(x):在(-x,+x)度之间随机旋转图像.RandomCrop(a,b):在图像周围以b为大小填充,人为扩大,然后再按照a×a的大小裁剪.ToTensor():将图像从PIL图像转换为PyTorch张量.Normalize(mean=[mean], std=[std]):规范化,减去平均值mean,然后除以给定的标准差std 模型定义
class 模型名称(nn.Model): def __init__ (self,input_dim,output_dim): super().__init__() self.input_fc = nn.连接方式(input_dim,输出维度) self.hidden_fc1 = nn.连接方式(输入维度,输出维度) #多个隐藏层 self.output_fc = nn.连接方式(输入维度,output_dim) def foward(self,x) h_1 = F.激活函数(self.input_fc(x)) h_2 = F.激活函数(self.hidden_fc1(h_2)) #... h_n = F.激活函数(self.hidden_fcn(h_n-1)) y_pred = self.output_fc(h_n)定义训练循环
#定义优化器 optimizer = optim.优化器名(model.parameters()) #定义损失函数,如:criterion = nn.CrossEntropyLoss() LossFunction = nn.损失函数名() def train(model,iterator,optimizer,LossFuction): epoch_loss = 0 #损失总和 epoch_acc = 0 #精确度总和 model.train() for (x,y) in iterator: optimizer,zero_grad()#自动清除梯度 y_pred = model(x) loss = LossFunction(y_pred,y) #计算loss acc = calculate_accuarcy(y_pred,y) #计算准确度 loss.backward() #梯度下降 optimizer.step() epoch_loss += loss.item() epoch_acc += acc.item() return epoch_loss/len(iterator), epoch_acc/len(iterator)



