Pytorch图像分类完整流程(pytorch 图片数据集)

网友投稿 343 2022-08-26


Pytorch图像分类完整流程(pytorch 图片数据集)

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

文章目录

​​Compete Code​​​​Result​​

Compete Code

import torchimport torchvisionfrom torch import nnfrom torch.utils.data import DataLoaderfrom torch.utils.tensorboard import SummaryWriterfrom 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.01learning_rate = 1e-2# 优化器optimizer = torch.optim.SGD(cifa10_model.parameters(), lr=learning_rate)writer = SummaryWriter('./all_train_fluent/')# 定义训练相关参数epochs = 20total_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=) # 优化器优化 # ****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 torchfrom 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 outputif __name__ == '__main__': tensor = torch.ones(size=(64, 3, 32, 32)) model = Model() print(model(tensor).shape)

Result

Files already downloaded and verifiedFiles 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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Quarkus集成Dubbo服务Rpc远程通讯框架整合
下一篇:手把手教你用Pytorch训练图像分类网络(pytorch实现CNN)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~