Pytorch 框架
第一章 数据加载
Dataset:提供一种方式去获取数据及其标签,并告诉我们有多少数据
Dataloader:为后面的网络提供不同的数据形式
class MyData(Dataset): #创建一个MyData类,去继承Datasetdef __init__(self,root_dir,label_dir): #创建全局变量,比如数据的路径self.root_dir = root_dirself.label_dir = label_dir #self.设置全局变量self.path = os.path.join(self.root_dir,self.label_dir) #得到的是拼接的路径self.img_path = os.listdir(self.path) #获得path路径下的所有文件(名字),是一个数组def __getiem__(self,index): #获得图片img_name = self.img_path[index] #获得数组中的一个(文件名),不是路径img_item_path = os.path.join(self.root_dir,self.label_dir,img_name)#再拼接上文件名label = self.label_dirreturn img,labeldef __len__(self):return len(self.img_path) #返回一个长度#使用
root_dir = "database/train"
data_label_dir = "data"
data_dataset = MyDate(root_dir,data_label_dir)
img,label = data_dataset[0] #第一张数据
img.show() #放出来
第二章 tensorboard的使用
主要用于看loss的变化
writer = SummaryWriter("logs") #把文件存储在logs文件夹下#有三种主要的使用
writer.add_image() #用来把图片显示在ten里
writer.add_scalar() #显示函数
writer.close()#在终端输入命令,复制地址可打开。
#tensorboard --logdir=logs 其中logdir=事件文件所在文件夹名
#tensorboard --logdir=logs --port=6007 指定端口
其中add_image()读取数据的类型必须是 torch.Tensor, numpy.array, 或者是string/blobname类型,故 要进行数据类型转换。
opencv-python是最常用来打开numpy类型的包
import numpy as np
from PIL import Imageimage_path = '地址'
img_PIL = Image.open(image_path)
img_array = np.array(img_PIL) #先获得PIL数据类型
print(type(img_array))
第三章 transforms
用来对图像进行变换,也就是输入一个特定格式的图片,经过transforms的函数后输出我们想要的图片结果
totensor数据类型:
img_path = '路径'
img = Image.open(img_path)
print(img) #PIL类型的图片tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img) #将PIL转换为tensor数据类型
Resize改变尺寸:
t_resize = transforms.Resize((512,512))
img_size = t_resize(img)
第四章 数据集的加载
转换为tensor数据类型
import torchvisiondataset_transform = torchvision.transforms.Compose([torchvision.transforms.ToTensor()
])
五 神经网络的搭建
import torch.nn as nn
import torch.nn.functional as Fclass Model(nn.Module): #相当于nn.Module是一个网络框架,我们对其一部分进行更改def __init__(self):super().__init__()self.conv1 = nn.Conv2d(1, 20, 5)self.conv2 = nn.Conv2d(20, 20, 5)def forward(self, x): #神经网络经过forward得到一个输出(前向传播)x = F.relu(self.conv1(x)) # x经过一次卷积conv1,再经过一次非线性relureturn F.relu(self.conv2(x)) #得到的x再经过一次conv2再经过一次relu
卷积:用卷积核在输入图像上对应相乘再相加。
import torch
input = torch.tensor([[1,2,0,3,1], #[[表示是二维矩阵 #输入图像[0,1,2,3,1],[1,2,1,0,0],[5,2,3,1,1],[2,1,0,1,1]],dtype=torch.float32)#把lang型的1变成浮点型的1.0kernel = torch.tensor([[1,2,1], #卷积核[0,1,0],[2,1,0]])print(input.shape) # torch.Size([5,5])
input = torch.reshape(input,(1,1,5,5)) # 1-bachsize为1;1- 平面所以通道为1;(5,5)H,W
kernel = torch.reshape(kernel,(1,1,3,3))#卷积
import torch.nn.functional as Foutput = F.conv2d(input,kernel,stride = 1) #stride = 1 走一步 padding输入图片填充
print(output) #结果就是对应相乘相加得到的矩阵
conv2d的输入要求:input(minibatch,in_channels,H,W)四个参数,而图片的shape只输出(H,W)因此采用reshape函数
class Module(nn.Module)def __init__(self):super(Module,self).__init__() #初始化父类self.conv1 = Conv2d(in_channels=3,out_channels=6, #3-彩色,6-自己想要的层kernel_size=3,stride=1,padding=0) #3-卷积核3✖3def forward(self,x):x = self.conv1(x)return x #想得到输出x,所以返回xm = Module()
print(m)
六 最大池化
最大池化是指,对应相乘的最大值(不相加)。最大池化的目的是保留输入的特征,同时又把数据量进行减小。
class Module(nn.Module)def __init__(self):super(Module,self).__init__() #初始化父类self.maxpool1 = MaxPool2d(kernel_size = 3,ceil_mode = True) #最大池化#ceil_mode=True 卷积核移动的时候边边也算def forward(self,input):output = self.maxpool1(input)return x module = Module()
output = module(input) #把输入的数组传进去#如何把图应用在网络里
dataset = torchvision.datasets.CIFAR10('../data',train=False,download=True,transform=torchvision.transforms.ToTensor())
dataloader = DataLoader(dataset,batch_size = 64) #按每次64张输入图片for data in dataloader: imgs,targets = dataout = module(imgs)
七 非线性激活
非线性变换目的是为网络引入一些非线性特征,因为非线性越多,网络才能训练出符合各种曲线特征的模型。如果大家都是线性的话,那模型的泛化能力将不够好
nn.ReLU
class Module(nn.Module)def __init__(self):super(Module,self).__init__() #初始化父类self.relu1 = ReLU() #ReLU函数表示 小于0的为0,大于0的线性输出def forward(self,input):output = self.relu1(input)return output
ReLU对图像的作用不是很明显,Sigmoid函数明显一些。
八 正则化
可以加快神经网络的训练速度。用的少
Pytorch 框架相关推荐
- PyTorch框架:(4)如何去构建数据
接PyTorch框架:(3) 1.最基本的方法 (1)使用模块 模块1:TensorDataset.模块2:DataLoader 自己去构造数据集,然后一个batch一个batch的取数据,自己去写构 ...
- PyTorch框架:(3)使用PyTorch框架构构建神经网络分类任务
目录 0.背景 1.分类任务介绍: 2.网络架构 3.手写网络 3.1.读取数据集 3.2.查看数据集 3.3将x和y转换成tensor的格式 3.4.定义model 0.背景 其实分类和回归本质上没 ...
- PyTorch框架:(1)基本处理操作
目录 1.PyTorch框架介绍 2.安装Pytorch 2.1.CPU版本的安装命令: 2.2.GPU版本的安装命令: 2.2.1.安装CUDA 3.基本使用方法 4.Pytorch中的自动求导机制 ...
- Pytorch框架的深度学习优化算法集(优化中的挑战)
个人简介:CSDN百万访问量博主,普普通通男大学生,深度学习算法.医学图像处理专攻,偶尔也搞全栈开发,没事就写文章,you feel me? 博客地址:lixiang.blog.csdn.net Py ...
- Pytorch之CNN:基于Pytorch框架实现经典卷积神经网络的算法(LeNet、AlexNet、VGG、NIN、GoogleNet、ResNet)——从代码认知CNN经典架构
Pytorch之CNN:基于Pytorch框架实现经典卷积神经网络的算法(LeNet.AlexNet.VGG.NIN.GoogleNet.ResNet)--从代码认知CNN经典架构 目录 CNN经典算 ...
- 【视频课】永久免费!5小时快速掌握Pytorch框架入门及实战
前言 PyTorch是深度学习的主流框架之一,新手入门相对容易.为了帮助初学者解决PyTorch入门及实践的问题,有三AI推出<深度学习之PyTorch-入门及实战>课程,课程将算法.模型 ...
- 【CV实战】年轻人的第一个深度学习图像分割项目应该是什么样的(Pytorch框架)?...
我们上次给新手们介绍了第一个合适入门的深度学习CV项目,可阅读[CV实战]年轻人的第一个深度学习CV项目应该是什么样的?(支持13大深度学习开源框架),本次我们再给大家介绍一个新的任务,图像分割,包括 ...
- Pytorch框架中SGD&Adam优化器以及BP反向传播入门思想及实现
因为这章内容比较多,分开来叙述,前面先讲理论后面是讲代码.最重要的是代码部分,结合代码去理解思想. SGD优化器 思想: 根据梯度,控制调整权重的幅度 公式: 权重(新) = 权重(旧) - 学习率 ...
- PyTorch框架学习二十——模型微调(Finetune)
PyTorch框架学习二十--模型微调(Finetune) 一.Transfer Learning:迁移学习 二.Model Finetune:模型的迁移学习 三.看个例子:用ResNet18预训练模 ...
- PyTorch框架学习十九——模型加载与保存
PyTorch框架学习十九--模型加载与保存 一.序列化与反序列化 二.PyTorch中的序列化与反序列化 1.torch.save 2.torch.load 三.模型的保存 1.方法一:保存整个Mo ...
最新文章
- Android组件化初探
- 新一代Hologres实时数仓大揭秘
- 大学计算机上机实验指导与测试pdf,4大学计算机基础上机实验指导与习题--习题.pdf...
- 前端笔记-webpack加载前端资源(图片,css等)
- Python学习笔记(三)数据类型--Number类型
- JavaBeginnersTutorial 中文系列教程·翻译完成
- [转载]java中try 与catch的使用
- 如何处理Win10电脑黑屏后出现代码0xc0000225的错误?
- 学习笔记_Java_day12_Cookie
- Luogu1502 窗口的星星
- 简约个性个人简历自我介绍PPT模板
- 均值漂移(Meanshift)算法
- WP应用程序磁贴设置
- potentially fixable with the `--fix` option.
- 用灭点法提取的深度图
- Apache Hudi调研小记
- MCV模型流程图整理
- Qt学习之界面UI编程应用
- win7计算机亮度怎么调节,win7系统屏幕亮度怎么修改调整
- lol进服务器时文件损坏,LOL文件损坏怎么修复