0
点赞
收藏
分享

微信扫一扫

Pytorch图像分类完整流程

基本上把我这几天发的博客捋一遍,pytorch流程就学会啦


文章目录

  • ​​Compete Code​​
  • ​​Result​​

Compete Code

import torch
import torchvision
from torch import nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

from model import Model

# 加载数据
train_data_set = torchvision.datasets.CIFAR10(root='./dataset/',
train=True,
transform=torchvision.transforms.ToTensor(),
download=True)
test_data_set = torchvision.datasets.CIFAR10(root='./dataset/',
train=True,
transform=torchvision.transforms.ToTensor(),
download=True)
# 利用 DataLoader 加载数据
train_dataloader = DataLoader(dataset=train_data_set, batch_size=64)
test_dataloader = DataLoader(dataset=test_data_set, batch_size=64)

# 模型
cifa10_model = Model()

# 损失函数
loss_fn = nn.CrossEntropyLoss()

# 学习率
# learning_rate = 0.01
learning_rate = 1e-2

# 优化器
optimizer = torch.optim.SGD(cifa10_model.parameters(), lr=learning_rate)
writer = SummaryWriter('./all_train_fluent/')

# 定义训练相关参数
epochs = 20
total_train_steps = 0 # 训练总次数
total_test_steps = 0 # 测试总次数

for epoch in range(epochs):
print(f'-----第{epoch + 1}轮训练-----')
epoch_total_train_losses = 0.0 # 每一轮训练总损失

cifa10_model.train() # 只对dropout等特定层有用
# 开始训练
for data in train_dataloader:
imgs, targets = data
output = cifa10_model(imgs)
loss = loss_fn(output, targets) # tensor(2.3019, grad_fn=<NllLossBackward>)
# 优化器优化
# ****1 梯度清零****
optimizer.zero_grad()
# ****2 计算梯度****
loss.backward()
# ****3 梯度更新****
optimizer.step()

total_train_steps += 1
epoch_total_train_losses += loss.item()

if total_train_steps % 100 == 0:
print(f'第{total_train_steps}次训练 损失为:{loss.item()}')
writer.add_scalar('train_loss', loss.item(), total_train_steps)

print(f'-----第{epoch + 1}轮训练 训练集总损失{epoch_total_train_losses}-----')

cifa10_model.eval() # 只对dropout等特定层有用
# 开始测试
epoch_total_test_losses = 0.0 # 每一轮测试总损失
epoch_total_test_accuracy = 0.0 # 每一轮正确总数
# 不考虑梯度情况下计算测试集上的损失
with torch.no_grad():
for data in test_dataloader:
imgs, targets = data
output = cifa10_model(imgs)
loss = loss_fn(output, targets)
epoch_total_test_losses += loss.item()

# 计算正确率
right_num_tensor = (torch.argmax(input=output, dim=1) == targets).sum()
epoch_total_test_accuracy += right_num_tensor.item() # 横向比较

print(f'-----第{epoch + 1}轮训练 测试集上的损失为{epoch_total_test_losses}-----')
print(f'-----第{epoch + 1}轮训练 测试集上的正确率为{epoch_total_test_accuracy / len(test_data_set)}-----')

total_test_steps += 1
writer.add_scalar('test_loss', epoch_total_test_losses,
total_test_steps)
writer.add_scalar('test_accuract', epoch_total_test_accuracy / len(test_data_set),
total_test_steps)
# 保存模型
torch.save(cifa10_model.state_dict(), f'cifa10_model-epoch{epoch}-test_loss{epoch_total_test_losses}')

model.py

import torch
from torch import nn


# 构建神经网络
class Model(nn.Module):
def __init__(self):
super(Model, self).__init__()
self.model = nn.Sequential(
nn.Conv2d(in_channels=3, out_channels=32, kernel_size=5, stride=1, padding=2),
nn.MaxPool2d(kernel_size=2),
nn.Conv2d(in_channels=32, out_channels=32, kernel_size=5, stride=1, padding=2),
nn.MaxPool2d(kernel_size=2),
nn.Conv2d(in_channels=32, out_channels=64, kernel_size=5, stride=1, padding=2),
nn.MaxPool2d(kernel_size=2),
nn.Flatten(),
nn.Linear(64 * 4 * 4, 64),
nn.Linear(64, 10),
)

def forward(self, x):
output = self.model(x)
return output


if __name__ == '__main__':
tensor = torch.ones(size=(64, 3, 32, 32))
model = Model()
print(model(tensor).shape)

Result

Files already downloaded and verified
Files already downloaded and verified
-----第1轮训练-----
第100次训练 损失为:2.293806791305542
第200次训练 损失为:2.2893521785736084
第300次训练 损失为:2.265193223953247
第400次训练 损失为:2.211841106414795
第500次训练 损失为:2.1635775566101074
第600次训练 损失为:2.0714898109436035
第700次训练 损失为:2.0165271759033203
-----第1轮训练 训练集总损失1711.793240904808-----
-----第1轮训练 测试集上的损失为1583.1032716035843-----
-----第1轮训练 测试集上的正确率为0.26926-----
-----第2轮训练-----
第800次训练 损失为:1.8773349523544312
第900次训练 损失为:1.864574909210205
第1000次训练 损失为:1.9819109439849854
第1100次训练 损失为:1.989168405532837
第1200次训练 损失为:1.7307989597320557
第1300次训练 损失为:1.6992069482803345
第1400次训练 损失为:1.7692142724990845
第1500次训练 损失为:1.8207638263702393
-----第2轮训练 训练集总损失1458.6388937234879-----
-----第2轮训练 测试集上的损失为1456.9298800230026-----
-----第2轮训练 测试集上的正确率为0.33968-----
-----第3轮训练-----
第1600次训练 损失为:1.776888132095337
第1700次训练 损失为:1.651006817817688
第1800次训练 损失为:1.940883994102478
第1900次训练 损失为:1.7360551357269287
第2000次训练 损失为:1.9356476068496704
第2100次训练 损失为:1.5104930400848389
第2200次训练 损失为:1.4673408269882202
第2300次训练 损失为:1.796546220779419
-----第3轮训练 训练集总损失1306.099149107933-----
-----第3轮训练 测试集上的损失为1319.2370291948318-----
-----第3轮训练 测试集上的正确率为0.3934-----
-----第4轮训练-----
第2400次训练 损失为:1.7261663675308228
第2500次训练 损失为:1.3715038299560547
第2600次训练 损失为:1.6266180276870728
第2700次训练 损失为:1.679107666015625
第2800次训练 损失为:1.5159000158309937
第2900次训练 损失为:1.6237469911575317
第3000次训练 损失为:1.3621346950531006
第3100次训练 损失为:1.5560920238494873
-----第4轮训练 训练集总损失1219.3320162296295-----
-----第4轮训练 测试集上的损失为1289.4199929237366-----
-----第4轮训练 测试集上的正确率为0.40528-----
-----第5轮训练-----
第3200次训练 损失为:1.3922778367996216
第3300次训练 损失为:1.463734745979309
第3400次训练 损失为:1.506372094154358
第3500次训练 损失为:1.585404872894287
第3600次训练 损失为:1.5749247074127197
第3700次训练 损失为:1.3812669515609741
第3800次训练 损失为:1.2707430124282837
第3900次训练 损失为:1.4467672109603882
-----第5轮训练 训练集总损失1156.7751677036285-----
-----第5轮训练 测试集上的损失为1238.6291618347168-----
-----第5轮训练 测试集上的正确率为0.42974-----
-----第6轮训练-----
第4000次训练 损失为:1.4740391969680786
第4100次训练 损失为:1.4617834091186523
第4200次训练 损失为:1.5490071773529053
第4300次训练 损失为:1.2341362237930298
第4400次训练 损失为:1.1559871435165405
第4500次训练 损失为:1.37001371383667
第4600次训练 损失为:1.4540929794311523
-----第6轮训练 训练集总损失1100.390597820282-----
-----第6轮训练 测试集上的损失为1182.6622939109802-----
-----第6轮训练 测试集上的正确率为0.4567-----
-----第7轮训练-----
第4700次训练 损失为:1.3476098775863647
第4800次训练 损失为:1.5423822402954102
第4900次训练 损失为:1.3755940198898315
第5000次训练 损失为:1.444245457649231
第5100次训练 损失为:1.054321050643921
第5200次训练 损失为:1.3185800313949585
第5300次训练 损失为:1.2189435958862305
第5400次训练 损失为:1.364488959312439
-----第7轮训练 训练集总损失1047.4429366588593-----
-----第7轮训练 测试集上的损失为1108.6963967084885-----
-----第7轮训练 测试集上的正确率为0.4925-----
-----第8轮训练-----
第5500次训练 损失为:1.2531609535217285
第5600次训练 损失为:1.2249729633331299
第5700次训练 损失为:1.252604603767395
第5800次训练 损失为:1.218124270439148
第5900次训练 损失为:1.4062526226043701
第6000次训练 损失为:1.561216950416565
第6100次训练 损失为:1.0752496719360352
第6200次训练 损失为:1.097292184829712
-----第8轮训练 训练集总损失997.5578808784485-----
-----第8轮训练 测试集上的损失为1040.2469613552094-----
-----第8轮训练 测试集上的正确率为0.52594-----
-----第9轮训练-----
第6300次训练 损失为:1.4185950756072998
第6400次训练 损失为:1.1202648878097534
第6500次训练 损失为:1.5792778730392456
第6600次训练 损失为:1.1080197095870972
第6700次训练 损失为:1.0496834516525269
第6800次训练 损失为:1.1481980085372925
第6900次训练 损失为:1.0964150428771973
第7000次训练 损失为:0.9226998686790466
-----第9轮训练 训练集总损失951.9941251277924-----
-----第9轮训练 测试集上的损失为978.6872267127037-----
-----第9轮训练 测试集上的正确率为0.5563-----
-----第10轮训练-----
第7100次训练 损失为:1.2806403636932373
第7200次训练 损失为:0.9855473637580872
第7300次训练 损失为:1.157183289527893
第7400次训练 损失为:0.885341465473175
第7500次训练 损失为:1.2770613431930542
第7600次训练 损失为:1.2442830801010132
第7700次训练 损失为:0.8647165298461914
第7800次训练 损失为:1.3441276550292969
-----第10轮训练 训练集总损失911.6689230799675-----
-----第10轮训练 测试集上的损失为926.850180387497-----
-----第10轮训练 测试集上的正确率为0.57934-----
-----第11轮训练-----
第7900次训练 损失为:1.4146065711975098
第8000次训练 损失为:1.1472012996673584
第8100次训练 损失为:0.9881906509399414
第8200次训练 损失为:1.2364550828933716
第8300次训练 损失为:1.2475051879882812
第8400次训练 损失为:1.1046066284179688
第8500次训练 损失为:1.162443995475769
第8600次训练 损失为:0.891025722026825
-----第11轮训练 训练集总损失875.6882235407829-----
-----第11轮训练 测试集上的损失为887.9075626730919-----
-----第11轮训练 测试集上的正确率为0.59784-----
-----第12轮训练-----
第8700次训练 损失为:1.2918980121612549
第8800次训练 损失为:1.4061460494995117
第8900次训练 损失为:1.0169668197631836
第9000次训练 损失为:1.115330696105957
第9100次训练 损失为:1.0660775899887085
第9200次训练 损失为:1.0307934284210205
第9300次训练 损失为:1.112260341644287
-----第12轮训练 训练集总损失842.7690169215202-----
-----第12轮训练 测试集上的损失为859.2378343343735-----
-----第12轮训练 测试集上的正确率为0.61004-----
-----第13轮训练-----
第9400次训练 损失为:0.9215994477272034
第9500次训练 损失为:1.381401777267456
第9600次训练 损失为:1.1752979755401611
第9700次训练 损失为:1.133426308631897
第9800次训练 损失为:0.9802504777908325
第9900次训练 损失为:0.9550476670265198
第10000次训练 损失为:0.9492567181587219
第10100次训练 损失为:0.9235442280769348
-----第13轮训练 训练集总损失812.2795096635818-----
-----第13轮训练 测试集上的损失为832.973968744278-----
-----第13轮训练 测试集上的正确率为0.62228-----
-----第14轮训练-----
第10200次训练 损失为:0.8562471866607666
第10300次训练 损失为:0.9872375726699829
第10400次训练 损失为:1.1987645626068115
第10500次训练 损失为:0.8320596814155579
第10600次训练 损失为:0.9386935830116272
第10700次训练 损失为:0.7968553304672241
第10800次训练 损失为:0.8510242104530334
第10900次训练 损失为:0.9766213297843933
-----第14轮训练 训练集总损失784.2473700046539-----
-----第14轮训练 测试集上的损失为816.7330207228661-----
-----第14轮训练 测试集上的正确率为0.62864-----
-----第15轮训练-----
第11000次训练 损失为:1.1596486568450928
第11100次训练 损失为:0.8807822465896606
第11200次训练 损失为:0.994661271572113
第11300次训练 损失为:1.196374535560608
第11400次训练 损失为:0.7351726293563843
第11500次训练 损失为:1.0692908763885498
第11600次训练 损失为:0.991000235080719
第11700次训练 损失为:0.8959956765174866
-----第15轮训练 训练集总损失758.4495695829391-----
-----第15轮训练 测试集上的损失为795.8079441189766-----
-----第15轮训练 测试集上的正确率为0.6389-----
-----第16轮训练-----
第11800次训练 损失为:0.9486426115036011
第11900次训练 损失为:0.9934350848197937
第12000次训练 损失为:0.859673023223877
第12100次训练 损失为:0.9924881458282471
第12200次训练 损失为:0.9634942412376404
第12300次训练 损失为:0.9393779039382935
第12400次训练 损失为:0.9631010890007019
第12500次训练 损失为:0.7999547123908997
-----第16轮训练 训练集总损失734.5745494961739-----
-----第16轮训练 测试集上的损失为770.9855333566666-----
-----第16轮训练 测试集上的正确率为0.65118-----
-----第17轮训练-----
第12600次训练 损失为:0.7610754370689392
第12700次训练 损失为:0.8501456379890442
第12800次训练 损失为:0.8283103704452515
第12900次训练 损失为:1.1732714176177979
第13000次训练 损失为:0.9859812259674072
第13100次训练 损失为:0.6077409386634827
第13200次训练 损失为:0.8465023040771484
-----第17轮训练 训练集总损失712.4917141795158-----
-----第17轮训练 测试集上的损失为745.1791254878044-----
-----第17轮训练 测试集上的正确率为0.66352-----
-----第18轮训练-----
第13300次训练 损失为:0.991117000579834
第13400次训练 损失为:0.7881637811660767
第13500次训练 损失为:0.8452173471450806
第13600次训练 损失为:1.3878034353256226
第13700次训练 损失为:0.7699251174926758
第13800次训练 损失为:1.033514380455017
第13900次训练 损失为:0.6955090165138245
第14000次训练 损失为:0.7823675870895386
-----第18轮训练 训练集总损失691.7742323875427-----
-----第18轮训练 测试集上的损失为723.2200767993927-----
-----第18轮训练 测试集上的正确率为0.67374-----
-----第19轮训练-----
第14100次训练 损失为:1.0277504920959473
第14200次训练 损失为:0.7475612759590149
第14300次训练 损失为:0.9697816371917725
第14400次训练 损失为:0.9973055720329285
第14500次训练 损失为:0.9284068942070007
第14600次训练 损失为:1.0815584659576416
第14700次训练 损失为:0.8382014036178589
第14800次训练 损失为:1.2294385433197021
-----第19轮训练 训练集总损失672.2116313278675-----
-----第19轮训练 测试集上的损失为693.5742621719837-----
-----第19轮训练 测试集上的正确率为0.68918-----
-----第20轮训练-----
第14900次训练 损失为:0.6266537308692932
第15000次训练 损失为:0.8554707765579224
第15100次训练 损失为:0.7695586681365967
第15200次训练 损失为:1.038840651512146
第15300次训练 损失为:0.6493663191795349
第15400次训练 损失为:0.8746112585067749
第15500次训练 损失为:0.8513368368148804
第15600次训练 损失为:0.9140070676803589
-----第20轮训练 训练集总损失653.541079044342-----
-----第20轮训练 测试集上的损失为666.7385309636593-----
-----第20轮训练 测试集上的正确率为0.7024-----

Process finished with exit code 0

Pytorch图像分类完整流程_2d
Pytorch图像分类完整流程_ide_02
Pytorch图像分类完整流程_分类_03


举报

相关推荐

0 条评论