免费个人网站建设大全,外贸做中英文网站,重庆专业做网站,旅游网站开发盈利模式1.参考视频#xff1a;
2.1 pytorch官方demo(Lenet)_哔哩哔哩_bilibili 2.总结#xff1a;
#xff08;1#xff09;LeNet网络就是 我最开始用来预测mnist数据集的那个网络#xff0c;简单的2个conv2个maxpool3个linear层
#xff08;2#xff09;up主整理的train.py…1.参考视频
2.1 pytorch官方demo(Lenet)_哔哩哔哩_bilibili 2.总结
1LeNet网络就是 我最开始用来预测mnist数据集的那个网络简单的2个conv2个maxpool3个linear层
2up主整理的train.py等内容里面的细节分析值得学习
3对于预测代码的撰写可以参考代码的predict.py文件 3.几个文件的源代码我都贴一下都不多——但很精
1首先是 model.py:
import torch.nn as nn
import torch.nn.functional as Fclass LeNet(nn.Module):def __init__(self):super(LeNet, self).__init__()self.conv1 nn.Conv2d(3, 16, 5)self.pool1 nn.MaxPool2d(2, 2)self.conv2 nn.Conv2d(16, 32, 5)self.pool2 nn.MaxPool2d(2, 2)self.fc1 nn.Linear(32*5*5, 120)self.fc2 nn.Linear(120, 84)self.fc3 nn.Linear(84, 10)def forward(self, x):x F.relu(self.conv1(x)) # input(3, 32, 32) output(16, 28, 28)x self.pool1(x) # output(16, 14, 14)x F.relu(self.conv2(x)) # output(32, 10, 10)x self.pool2(x) # output(32, 5, 5)x x.view(-1, 32*5*5) # output(32*5*5)x F.relu(self.fc1(x)) # output(120)x F.relu(self.fc2(x)) # output(84)x self.fc3(x) # output(10)return x
模型 2个conv 2个max_pool 3个linear
(2) train.py训练模型的文件
import torch
import torchvision
import torch.nn as nn
from model import LeNet
import torch.optim as optim
import torchvision.transforms as transformsdef main():# 定义transform的数据增强transform transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])# 处理cifar10的 train和val的数据集的问题# 50000张训练图片# 第一次使用时要将download设置为True才会自动去下载数据集train_set torchvision.datasets.CIFAR10(root./data, trainTrue,downloadFalse, transformtransform)train_loader torch.utils.data.DataLoader(train_set, batch_size36,shuffleTrue, num_workers0)# 10000张验证图片# 第一次使用时要将download设置为True才会自动去下载数据集val_set torchvision.datasets.CIFAR10(root./data, trainFalse,downloadFalse, transformtransform)val_loader torch.utils.data.DataLoader(val_set, batch_size5000,shuffleFalse, num_workers0)val_data_iter iter(val_loader)val_image, val_label next(val_data_iter)# classes (plane, car, bird, cat,# deer, dog, frog, horse, ship, truck)# 训练前的准备 实例化model网络net , 定义 loss函数 CrossEntropyLoss() 和 Adam优化器net LeNet()loss_function nn.CrossEntropyLoss()optimizer optim.Adam(net.parameters(), lr0.001)# 开始训练zero_grad() outputs loss backward optim stepfor epoch in range(5): # loop over the dataset multiple timesrunning_loss 0.0for step, data in enumerate(train_loader, start0):# get the inputs; data is a list of [inputs, labels]inputs, labels data# zero the parameter gradientsoptimizer.zero_grad()# forward backward optimizeoutputs net(inputs)loss loss_function(outputs, labels)loss.backward()optimizer.step()# print statisticsrunning_loss loss.item()if step % 500 499: # print every 500 mini-batcheswith torch.no_grad():outputs net(val_image) # [batch, 10]predict_y torch.max(outputs, dim1)[1]accuracy torch.eq(predict_y, val_label).sum().item() / val_label.size(0)print([%d, %5d] train_loss: %.3f test_accuracy: %.3f %(epoch 1, step 1, running_loss / 500, accuracy))running_loss 0.0print(Finished Training)# 最后把 model的 参数save 为一个.pth文件save_path ./Lenet.pthtorch.save(net.state_dict(), save_path)if __name__ __main__:main()分析数据集划分 实例化网络_优化器_loss函数 分epoch开始寻 save_pth权重
3predict.py
import torch
import torchvision.transforms as transforms
from PIL import Imagefrom model import LeNetdef main():# 将需要检测图像 裁剪为32*32transform transforms.Compose([transforms.Resize((32, 32)),transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])classes (plane, car, bird, cat,deer, dog, frog, horse, ship, truck)#实例化网络 才入权重net LeNet()net.load_state_dict(torch.load(Lenet.pth))# 打开图像转换格式im Image.open(1.jpg)im transform(im) # [C, H, W]im torch.unsqueeze(im, dim0) # [N, C, H, W]# 输入到网络中 得到预测的结果with torch.no_grad():outputs net(im)predict torch.max(outputs, dim1)[1].numpy()print(classes[int(predict)])if __name__ __main__:main()predict 处理图像 实例化权重 得到预测结果