关键字及方法汇总表
------------------------------------分割线------------------------------------
卷积层:提取图像特征
池化层:对提取的卷积层信息进行数据处理,减小图像尺寸数据量,加快训练速度
线性层:对平铺数据进行提取
------------------------------------分割线------------------------------------
一般训练模型模板
1.准备数据集 Datasets
2.数据集数据导入 DataLoader
3.创建网络模型,并实例化模型
4.创建损失函数 Loss_fn = nn.CrossEntropyLoss( ) 交叉商损失函数
5.创建优化器函数 Optimizer = torch.optim.SGD( ) 随机梯度下降优化器
6.设置训练中的一些参数(训练次数、训练轮次等)
7.进入训练状态
8.开始训练循环
(1)取数据
(2)输入数据经过网络模型变换
(3)误差计算
(4)优化模型
(5)测试数据
(6)模型保存
9.训练完成
~~~~~~~~~~~~~~~~~~~~~~~~~
相关模板代码如下:
import torch
import torchvision
from torch.utils.tensorboard import SummaryWriter
from module import *
from torch.utils.data import DataLoader
train_dataset = torchvision.datasets.CIFAR10(r"D:\lr\program\lrpro_learning\dataset20220526", train=True,
transform=torchvision.transforms.ToTensor())
test_dataset = torchvision.datasets.CIFAR10(r"D:\lr\program\lrpro_learning\dataset20220526", train=False,
transform=torchvision.transforms.ToTensor())
train_dataloader = DataLoader(train_dataset, batch_size=64)
test_dataloader = DataLoader(test_dataset, batch_size=64)
train_dataset_len = len(train_dataset)
test_dataset_len = len(test_dataset)
print("训练数据集长度为:{}".format(train_dataset_len))
print("测试训练集长度为:{}".format(test_dataset_len))
writer = SummaryWriter("logs_train")
#创建神经网络模型
New_nn = nn_Train()
#创建损失函数(交叉商)
loss_fn = nn.CrossEntropyLoss()
#优化器(随机梯度下降)
learning_rate = 1e-2
optimizer = torch.optim.SGD(New_nn.parameters(), lr=learning_rate)
#设置训练网络的一些参数
#训练轮次
epoch = 10
#记录训练次数
total_train_step = 0
#记录测试次数
total_test_step = 0
for i in range(epoch):
print("=========第{}轮训练开始=========".format(i+1))
#训练开始
New_nn.train()
for data in train_dataloader:
imgs, targets = data
output = New_nn(imgs)
loss = loss_fn(output, targets)
optimizer.zero_grad()
loss.backward()
optimizer.step()
total_train_step += 1
if total_train_step % 100 == 0:
print("训练次数:{} ,Loss:{}".format(total_train_step, loss.item()))
writer.add_scalar("train_notes", loss.item(), total_train_step)
#测试步骤开始
total_loss_test = 0
New_nn.eval()
#整体正确率
total_acc = 0
with torch.no_grad():
for data in test_dataloader:
imgs, targets = data
output = New_nn(imgs)
loss = loss_fn(output, targets)
total_loss_test = total_loss_test + loss.item()
# 0为纵向计算最大值,1为横向计算最大值
accuracy = (output.argmax(1) == targets).sum()
total_acc = total_acc + accuracy
print("整体测试集体上的Loss:{}".format(total_loss_test))
print("整体测试集上的正确率:{}".format(total_acc/test_dataset_len))
writer.add_scalar("test_notes", total_loss_test, total_test_step)
writer.add_scalar("test_acc", total_acc/test_dataset_len, total_test_step)
total_test_step += 1
torch.save(New_nn, "new_nn_{}.pth".format(i))
print("***模型已保存***")
writer.close()
以上为个人学习笔记,如有不对的地方请指正。谢谢orz