项目源码网盘链接:https://pan.baidu.com/s/176-HRsaVQkiwTXK6KJg5Bw
提取码:0dng
项目码云链接: https://gitee.com/xian-polytechnic-university/python
返向传递:将输出值与正确答案进行比较,将误差传递回输出层回去(叫梯度,pytorch自动完成),从而计算每个权值的最优值,去进行更改。
Pytorch核心:Autograd包(完成自动梯度计算及返向传递)
训练一个模型的时候需要返向传递,用的时候不需要
TensorFlow:
定义运算符、定义运算、定义梯度、开启对话框、注入数据、进行运算。
Pytorch:
初始化、进行运算(变调式便运算)
基于 pytorch 搭建神经网络分类模型识别花的种类,输入一张花的照片,输出显示最有可能的前八种花的名称和该种花的照片。
操作过程如下:
(1)读取数据集数据
(2)构建神经网络的数据集
1)数据增强:torchvision中transforms模块自带功能,将数据集中照片进行旋转、翻折、放大…得到更多的数据
2)数据预处理:torchvision中transforms也帮我们实现好了,直接调用即可
3)处理好的数据集保存在DataLoader模块中,可直接读取batch数据
(1)迁移pytorch官网中models提供的resnet模型,torchvision中有很多经典网络架构,调用起来十分方便,并且可以用人家训练好的权重参数来继续训练,也就是所谓的迁移学习
(2)选择GPU计算、选择训练哪些层、优化器设置、损失函数设置…
(3)训练全连接层,前几层都是做特征提取的,本质任务目标是一致的,前面的先不动,先训练最后一层全连接层
(4)再训练所有层
(1)加载训练好的模型,模型保存的时候可以带有选择性,例如在验证集中如果当前效果好则保存
(2)设置检测图像的数据
(3)设置展示界面并进行预测
(在该程序中定义相关函数,以便在其他程序中进行调用)
图像增强(数据集预处理处理) 处理照片数据函数 检测照片预处理函数 展示一张照片函数import numpy as np import torch import matplotlib.pyplot as plt from PIL import Image from torchvision import transforms, models filename='checkpoint.pth' device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") """""""""""""""图像增强(数据集预处理处理)open""""""""""""""" #图像增强:将数据集中照片进行旋转、翻折、放大...得到更多的数据 #ImageFolder假设所有的文件按文件夹保存好,每个文件夹下面存贮同一类别的图片,文件夹的名字为分类的名字 data_transforms = { #data_transforms中指定了所有图像预处理操作,只需要修改训练集和验证集的名字后复制粘贴 'train': transforms.Compose([transforms.RandomRotation(45),#随机旋转,-45到45度之间随机选 transforms.CenterCrop(224),#从中心开始裁剪 transforms.RandomHorizontalFlip(p=0.5),#随机水平翻转 选择一个概率概率 transforms.RandomVerticalFlip(p=0.5),#随机垂直翻转 transforms.ColorJitter(brightness=0.2, contrast=0.1, saturation=0.1, hue=0.1),#参数1为亮度,参数2为对比度,参数3为饱和度,参数4为色相 transforms.RandomGrayscale(p=0.025),#概率转换成灰度率,3通道就是R=G=B transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])#均值,标准差 ]), 'valid': transforms.Compose([transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]), } """""""""""""""图像增强(数据集预处理处理)end""""""""""""""" """""""""""""""处理照片数据函数open""""""""""""""" #注意tensor的数据需要转换成numpy的格式,而且还需要还原回标准化的结果 def im_convert(tensor): image = tensor.to("cpu").clone().detach() image = image.numpy().squeeze() # 还原回h,w,c image = image.transpose(1, 2, 0) # 被标准化过了,还原非标准化样子 image = image * np.array((0.229, 0.224, 0.225)) + np.array((0.485, 0.456, 0.406)) image = image.clip(0, 1) return image """""""""""""""处理照片数据函数end""""""""""""""" """""""""""""""检测照片预处理函数open""""""""""""""" def process_image(image_path): # 读取测试数据 img = Image.open(image_path) # Resize,thumbnail方法只能进行缩小,所以进行了判断 if img.size[0] > img.size[1]: img.thumbnail((10000, 256)) else: img.thumbnail((256, 10000)) # Crop操作,再裁剪 left_margin = (img.width - 224) / 2 bottom_margin = (img.height - 224) / 2 right_margin = left_margin + 224 top_margin = bottom_margin + 224 img = img.crop((left_margin, bottom_margin, right_margin, top_margin)) # 相同的预处理方法 img = np.array(img) / 255 mean = np.array([0.485, 0.456, 0.406]) # provided mean std = np.array([0.229, 0.224, 0.225]) # provided std img = (img - mean) / std # 注意颜色通道应该放在第一个位置 img = img.transpose((2, 0, 1)) return img """""""""""""""检测照片预处理函数end""""""""""""""" """""""""""""""展示一张照片函数open""""""""""""""" def imshow(image, ax=None, title=None): """展示数据""" if ax is None: fig, ax = plt.subplots() # 颜色通道还原 image = np.array
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788相关知识
基于pytorch搭建ResNet神经网络用于花类识别
基于pytorch搭建VGGNet神经网络用于花类识别
基于pytorch搭建AlexNet神经网络用于花类识别
pytorch 花朵的分类识别
Deep Learning:基于pytorch搭建神经网络的花朵种类识别项目(内涵完整文件和代码)—超详细完整实战教程
基于深度学习和迁移学习的识花实践
【免费】基于pytorch的深度学习花朵种类识别项目完整教程(内涵完整文件和代码)
神经网络与深度学习
pytorch深度学习框架——实现病虫害图像分类
深度学习基于python+TensorFlow+Django的花朵识别系统
网址: 基于pytorch搭建神经网络的花朵种类识别(深度学习) https://m.huajiangbk.com/newsview737354.html
上一篇: 高分项目:基于yolov5的海棠 |
下一篇: 小学语文一年级第一学期期末复习试 |