模型训练步骤:
准备数据集(train_dataset、test_dataset)
import torchvision
data = torchvision. datasets. 数据集( "数据集存放目录" , train= True / False ,
transform= torchvision. transforms. ToTensor( ) , download= True )
创建dataloader(train_dataloader、test_dataloader)
from torch. utils. data import DataLoader
train/ test_dataloader = DataLoader( train_dataset, batch_size= 64 )
gpu or cpu
device = torch. device( "cuda:1" if torch. cuda. is_available( ) else "cpu" )
搭建神经网络
class ExamModuel ( nn. Module) :
def __init__ ( self) :
super ( ExamModuel, self) . __init__( )
self. model = nn. Sequential(
. . .
)
def forward ( self, x) :
x = self. model( x)
return x
创建网络模型 —> cuda
ex_model = ExamModuel( )
ex_model. to( device)
损失函数 —> cuda
loss_fn = nn. CrossEntropyLoss( )
loss_fn. to( device)
优化器
learning_rate = 1e-2
optimizer = torch. optim. SGD( ex_model. parameters( ) , lr= learning_rate)
一些参数
total_train_step = 0
total_test_step = 0
epoch = 10
writer = SummaryWriter( "logs" )
开始训练
迭代epoch次
ex_model. train( )
for imgs, labels in dataloader:
imgs = imgs. to( device)
labels = labels. to( device)
outputs = ex_model( imgs)
loss = loss_fn( outputs, labels)
optimizer. zero_grad( )
loss. backward( )
optimizer. step( )
print ( "训练次数:{},Loss:{}" . format ( total_train_step, loss. item( ) ) )
writer. add_scalar( "train_loss" , loss. item( ) , total_train_step)
开始测试
ex_model. eval ( )
with torch. no_grad( ) :
for imgs, labels in test_dataloader:
img = img. to( device)
target = target. to( device)
output = ex_model( img)
accuracy = ( target == output. argmax( 1 ) ) . sum ( )
test_accuracy += accuracy
loss = loss_fn( output, target)
total_test_loss += loss. item( )
保存模型
torch. save( ex_model, "模型存放目录/ex_model_{}.pth" . format ( i) )
检验模型的效果(输入数据,得出输出结果)