1.准备数据集
train_data = torchvision. datasets. CIFAR10 ( "../data" , train= True, transform= torchvision. transforms. ToTensor ( ) , download= True)
test_data = torchvision. datasets. CIFAR10 ( "../data" , train= False, transform= torchvision. transforms. ToTensor ( ) , download= True)
2.使用DataLoader加载数据
#利用DataLoader 来加载数据集
train_dataloader = DataLoader ( train_data_size, batch_size= 64 )
test_dataloader = DataLoader ( test_data_size, batch_size= 64 )
3.创建模型(根据需要调整)
class My_Module ( nn. Module) : def __init__ ( self) : super ( My_Module, self) . __init__ ( ) XXXdef forward ( self, x) : return x
4.加载模型
#创建网络模型
My_Module = My_Module ( ) #损失函数
loss_fn = nn. CrossEntropyLoss ( ) #优化器
learning_rate = 0.0001
optimizer = torch. optim. SGD ( My_Module. patameters ( ) , lr= learning_rate) #设置训练网络的参数
total_train_step = 0 #记录训练的次数
total_test_step = 0 #记录测试的次数
epoch = 100 #训练的轮数#添加tensorboard
writer = SummaryWriter ( "../logs_train" )
5.训练
for i in range ( epoch) : print ( "-----------第 {} 训练开始-----------" . format ( i+ 1 ) ) #训练步骤开始My_Module. train ( ) for data in train_dataloader: imgs, labels = dataoutputs = My_Module ( imgs) loss = loss_fn ( outputs, labels) #优化器优化模型optimizer. zero_grad ( ) loss. backward ( ) optimizer. step ( ) total_train_step = total_train_step + 1 if total_train_step % 100 == 0 : print ( "训练次数:{},loss:{}" . format ( total_train_step, loss. item ( ) ) ) writer. add_scalar ( "train_loss" , loss. item ( ) , total_train_step) #测试步骤开始My_Module. eval ( ) total_test_loss = 0 total_arruracy = 0 with torch. no_grad ( ) : for data in test_dataloader: test_imgs, test_labels = dataoutputs = My_Module ( test_imgs) loss = loss_fn ( outputs, test_labels) total_test_loss = total_test_loss + loss. item ( ) accuracy = ( outputs. argmax ( 1 ) == test_labels) . sum ( ) total_arruracy = total_arruracy + accuracyprint ( "整体测试集上的loss:{}" . format ( total_test_loss) ) print ( "整体测试集上的正确率:{}" . format ( total_arruracy/ test_data_size) ) writer. add_scalar ( "test_loss" , total_test_loss, total_test_step) writer. add_scalar ( "test_accuracy" , total_arruracy/ test_data_size, total_test_step) torch. save ( My_Module, "My_Module_{}.pth" . format ( i) ) print ( "模型已保存" ) writer. close ( )
6.查看loss图
1. 在项目终端输入:tensorboard -- logdir= logs
2. 在浏览器中打开就可以看到loss图像了
说明:tensorboard -- logdir= logs中的“logs”指的是SummaryWriter ( "logs" ) 中的“logs”。这两个保持一致就可以了。
完整代码
# - * - coding: utf- 8 - * -
"" "
Created on Fri Apr 12 20 : 54 : 46 2024 @author: ZW
"" "import torchvision
from torch. utils. tensorboard import SummaryWriter
from torch import nn
from torch. utils. data import DataLoader
import torchtrain_data = torchvision. datasets. CIFAR10 ( "../data" , train= True, transform= torchvision. transforms. ToTensor ( ) , download= True)
test_data = torchvision. datasets. CIFAR10 ( "../data" , train= False, transform= torchvision. transforms. ToTensor ( ) , download= True) # length 长度
train_data_size = len ( train_data)
test_data_size = len ( test_data)
print ( "训练数据集的长度为:{}" . format ( train_data_size) )
print ( "测试数据集的长度为:{}" . format ( test_data_size) ) #利用DataLoader 来加载数据集
train_dataloader = DataLoader ( train_data_size, batch_size= 64 )
test_dataloader = DataLoader ( test_data_size, batch_size= 64 ) class My_Module ( nn. Module) : def __init__ ( self) : super ( My_Module, self) . __init__ ( ) def forward ( self, x) : return x#创建网络模型
My_Module = My_Module ( ) #损失函数
loss_fn = nn. CrossEntropyLoss ( ) #优化器
learning_rate = 0.0001
optimizer = torch. optim. SGD ( My_Module. patameters ( ) , lr= learning_rate) #设置训练网络的参数
total_train_step = 0 #记录训练的次数
total_test_step = 0 #记录测试的次数
epoch = 100 #训练的轮数#添加tensorboard
writer = SummaryWriter ( "../logs_train" ) for i in range ( epoch) : print ( "-----------第 {} 训练开始-----------" . format ( i+ 1 ) ) #训练步骤开始My_Module. train ( ) for data in train_dataloader: imgs, labels = dataoutputs = My_Module ( imgs) loss = loss_fn ( outputs, labels) #优化器优化模型optimizer. zero_grad ( ) loss. backward ( ) optimizer. step ( ) total_train_step = total_train_step + 1 if total_train_step % 100 == 0 : print ( "训练次数:{},loss:{}" . format ( total_train_step, loss. item ( ) ) ) writer. add_scalar ( "train_loss" , loss. item ( ) , total_train_step) #测试步骤开始My_Module. eval ( ) total_test_loss = 0 total_arruracy = 0 with torch. no_grad ( ) : for data in test_dataloader: test_imgs, test_labels = dataoutputs = My_Module ( test_imgs) loss = loss_fn ( outputs, test_labels) total_test_loss = total_test_loss + loss. item ( ) accuracy = ( outputs. argmax ( 1 ) == test_labels) . sum ( ) total_arruracy = total_arruracy + accuracyprint ( "整体测试集上的loss:{}" . format ( total_test_loss) ) print ( "整体测试集上的正确率:{}" . format ( total_arruracy/ test_data_size) ) writer. add_scalar ( "test_loss" , total_test_loss, total_test_step) writer. add_scalar ( "test_accuracy" , total_arruracy/ test_data_size, total_test_step) torch. save ( My_Module, "My_Module_{}.pth" . format ( i) ) print ( "模型已保存" ) writer. close ( )