机器学习
文章平均质量分 69
放牛儿
走,去放牛
展开
-
基于CIFAR10的完整模型测试套路
利用已经训练好的模型,给其提供输入,对输出进行判断。CIFAR10有狗的分类,于是我们找一张狗的图片:png格式的图片有四个通道,除了RGB外,还有一个透明度通道,所以调用:image = image.convert('RGB')打印图片相关信息:from PIL import Imageimage_path = './imgs/img.png'image = Image.open(image_path)image = im...原创 2022-02-21 21:43:15 · 434 阅读 · 0 评论 -
基于CIFAR10的完整模型训练套路
首先准备数据集:train_data = torchvision.datasets.CIFAR10('./dataset', train=True, transform=torchvision.transforms.ToTensor(), download=True)#训练数据集test_data = torchvision.datasets.CIFAR10('./dataset', train=False, transform=torchvision.transforms.ToTensor(),原创 2022-02-21 19:13:12 · 2260 阅读 · 1 评论 -
利用GPU训练模型
利用.cuda()函数网络模型中,有三种变量可以调用.cuda(),分别是网路模型、数据(输入、标注)、损失函数,调用完需要返回。 以之前的一个网络为例:import torchimport torchvisionfrom torch import nnfrom torch.utils.data import DataLoaderdataset = torchvision.datasets.CIFAR10("./dataset", train=False...原创 2022-02-19 21:12:09 · 3210 阅读 · 0 评论 -
网络模型的保存和读取
先新建一个网络模型:import torchvisionvgg16 = torchvision.models.vgg16(pretrained=False)pretrained=False意思是该网络模型是初始没有经过训练的。方式1:保存数据:import torch torch.save(vgg16, 'vgg16_method1.pth')这种方式既保存了网络结构也保存了网络中的参数加载数据:import torchmodel = torc原创 2022-02-17 21:39:32 · 1313 阅读 · 0 评论 -
pytorch——现有网络模型的使用和修改
以VGG网络为例,在Docs中,选择图像相关的torchvision,左侧的torchvision.models是一些现成的网络模型,右侧是网络模型的一个分类,第一个便是和分类有关的模型。vgg最常用的就是vgg16和vgg19:参数pretrained如果为True,则模型中的参数使用现有的已经在ImageNet数据集中训练完成的,若为False,则参数没有经过任何训练,process若为True,则会显示一个下载进度条。...原创 2022-02-15 17:57:20 · 1602 阅读 · 0 评论 -
pytorch——优化器使用
使用步骤:建立一个优化器,对参数的每一个梯度清零,调用损失函数的反向传播(backward)求出每一个参数的梯度,最后对每一个参数进行调优。以随机最速下降法 (SGD)为例:参数params用来指明网络中需要优化的参数,lr为学习速率。准备数据集:dataset = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTenso...原创 2022-02-12 19:23:04 · 2642 阅读 · 0 评论 -
pytorch——损失函数
Loss用来做两件事,一是计算实际输出和目标之间的差距,二是为我们反向传播更新数据提供一个依据。首先查看L1Loss函数官方文档:有两种方式,一个默认的mean,求的是平均值,另一个sum,求的是和:import torchfrom torch.nn import L1Lossinput = torch.tensor([1, 2, 3], dtype=torch.float32)target = torch.tensor([1, 2, 5], dtype=torch.float32原创 2022-02-11 15:46:39 · 1159 阅读 · 0 评论 -
神经网络——cifar10网络搭建、Sequential使用
CIFAR 10 模型结构:通过图片可以知道,输入为3通道的32*32大小数据,第一步卷积,通过5*5的一个卷积核,得到32通道的32*32的大小,接着通过2*2的最大池化层得到32通道的16*16...得到64通道的4*4数据,经过flatten展开为1024个一行的数据,通过线性层得到隐藏层的64个数据,再经过一个线性层得到输出。第一层的卷积层,可以知道参数in_channels为3,out_channels为32,kernel_size为5,而大小32*32没有变化,则由官方文档的公式:原创 2022-02-06 11:48:12 · 2490 阅读 · 0 评论 -
神经网络——线性层
线性层参数 in_features 就是输入x,out_features 是线性层的输出是上图的g。x到g的关系式为:,其中的是权重,是偏置(参数bias为True时,才存在)。阅读官方文档可知,weight和bias都是从分布中采样初始化,经过训练得最终结果。在vgg16模型中,将224*224*3的图片转变为了1*1*4096的大小,经过训练,得到最终的1*1*1000的结果。我们也采取相同的方式:import torchimport torchvision...原创 2022-02-04 17:35:12 · 9407 阅读 · 0 评论 -
神经网络——非线性激活
非线性介绍非线性变换的主要目的就是给网中加入一些非线性特征,非线性越多才能训练出符合各种特征的模型。常见的非线性激活:ReLU:* 表示输入的形状可以任意在进行网络初始化时,发现ReLU有一个参数inplace:input = -1ReLU(input, inplace=True)input = 0input = -1output = ReLU(input, inplace = False)input = -1output = 0#inp...原创 2022-02-02 20:41:19 · 1965 阅读 · 0 评论 -
神经网络——最大池化
最大池化的目的在于保留原特征的同时减少神经网络训练的参数,使得训练时间减少。相当于1080p的视频变为了720p最大池化介绍池化层最常用的是下采样,其中参数:kernel_size:设置取最大值的窗口,类似于卷积层的卷积核,如果传入参数是一个int型,则生成一个正方形,边长与参数相同;若是两个int型的元组,则生成长方形。stride:步径,与卷积层不同,默认值是kernel_size的大小。padding:和卷积层一样,用法类似于kernel_size。dila...原创 2022-02-01 23:46:57 · 11198 阅读 · 0 评论 -
神经网络卷积层Conv2d的使用
in_channels是输入的图片的channel数;out_channels是输出的通道数;kernel_size用来设置卷积核的大小,卷积核的初值是某个分布中的采样,随着训练的进行,值是不断变化的;stride是步径,卷积核移动的格数;padding是输入的外围拼接的大小。out_channels取决于卷积核的数量,卷积核也有in_channels参数,该参数取决于需要进行卷积操作的数据的channels。例如,6*6*3的图片样本,使用3*3*3的卷积核,输入...原创 2022-01-27 20:22:58 · 4170 阅读 · 0 评论 -
神经网络基本骨架、结构的原理及使用
目录神经骨架的使用基本神经结构的使用神经骨架的使用首先我们进官网进行相关信息的查询:container(相当于一个骨架)之中有六个模块,最常用的是module模块,因为对所有神经网络提供了一个最基本的类。根据module的介绍,我们知道自己创建的model也需要继承该类 。from torch import nnclass Model(nn.Module): def __init__(self): supe...原创 2022-01-26 22:50:14 · 1443 阅读 · 0 评论 -
pytorch——Dataloader的使用
Dataset相当于数据集,而Dataloader顾名思义是一个装载数据集的一个工具,从dataset中取数据。先进入官网进行学习:创建一个数据集和一个dataloader:import torchvisionfrom torch.utils.data import DataLoader#准备一个测试集test_data = torchvision.datasets.CIFAR10(root="./dataset", train=False, trans...原创 2022-01-25 19:49:07 · 1883 阅读 · 0 评论 -
pytorch——torchvision中的数据集的使用
首先我们打开pytorch的官方网页比如我们打开其中的torchvision,我们可以看到其中有很多的数据集:其中有很多是我们常用的、用来学习的数据集。接着的torchvision.models是一些常见的神经网络:我们以CIFAR为例:root是存在或下载保存的路径;train如果是True,则作为训练集,否则是测试集;transform可以对数据集进行一个变化;download会设置下载数据集。import torchvisiontrain_set = tor...原创 2022-01-24 19:21:23 · 941 阅读 · 0 评论 -
pytorch——常见的Transforms
transforms相当于一个工具箱,里面的类(class)totensor、resize等相当于工具。图片经过工具的处理,就会得到我们想要的结果。首先我们查看transforms的源代码中的totensor函数:class ToTensor: """Convert a ``PIL Image`` or ``numpy.ndarray`` to tensor. This transform does not support torchscript.def __call__(sel原创 2022-01-23 19:50:03 · 1020 阅读 · 0 评论 -
pytorch——Tensorboard使用
目录add_scalar()函数add_image()函数 Tensorboard是常用的一种可视化的工具,我们对其中的SummaryWriter类进行调用。我们可以查阅其相关说明: 我们通常使用初始化函数中的第一个参数:文件的名称,也可以不对其进行配置,采用默认。add_scalar()函数使用其中的add_scalar函数,首先查阅说明:tag相当于图像的标题; scalar_value是要保存的数值,相...原创 2022-01-21 22:23:20 · 1351 阅读 · 0 评论 -
pytorch——mnist手写数据识别
1、pytorch自带的数据集 pytorch中自带数据集由两个上层的API提供,分别是torchvision和torchtext。其中,torchvision提供了对照片数据处理相关的API和数据,数据所在位置:torchvision.datasets,比如torchvision.datasets.MNIST(手写数字照片数据);torchtext提供了对文本数据处理相关的API和数据,数据所在位置:torchtext.datasets,比如torchtext.datasets.IMDB...原创 2021-12-03 09:48:20 · 11652 阅读 · 10 评论 -
pytorch——数据加载
1、模型中使用数据加载器的目的 深度学习中,数据量通常是非常多、量非常大的,大量的数据,不可能一次性地在模型中进行向前的计算和反向传播,通常,我们会对整个数据进行随机的打乱数据,把数据处理成一个一个的batch,同时还会对数据进行预处理。2、数据集类2.1Dataset基类介绍 在torch中,提供了数据集的基类torch.utils.data.Dataset,继承这个基类,能够很快地实现对数据的加载。torch.utils.data.Data...原创 2021-11-29 17:22:13 · 1625 阅读 · 0 评论 -
pytorch——API实现线性回归
在pytorch中预设了一些更加灵活简单的对象,让我们来构造模型、定义损失、优化损失等1、nn.Module nn.Module是torch.nn提供的一个类,是pytorch中我们自定义网络的一个基类,在这个类中定义了很多的方法,使得我们在继承这个类的时候非常的简单。 当我们自定义网络的时候,有两个方法需要特别注意: 1、__init__需要调用super方法,继承父类的属性和方法。 ...原创 2021-11-27 17:31:20 · 1068 阅读 · 0 评论 -
pytorch——线性回归实现
我们使用一个自定义的数据,来使用torch实现一个简单的线性回归。假设我们的基础模型就是,其中,是参数,我们使用来构造数据,,所以最后通过模型应该能够得出的应该是分别接近3和0.8。1、准备数据 根据创建函数x = torch.rand([500,1])#创建一个500行1列的数据y_true = x * 3 + 0.82、通过模型构建y_predict 因为需要反向计算梯度,所以将requires_grad设置为Truew = to...原创 2021-11-25 23:52:49 · 372 阅读 · 0 评论 -
pytorch——梯度计算
1、梯度介绍梯度是一个向量,是学习(参数更新的方向)。收集数据,构建机器学习模型,得到判断模型好坏的方法:(回归损失)(分类损失)通过调整参数,尽可能降低随机选择一个起始点,通过调整,使得函数取得最小值。的更新方法:①计算的梯度(即导数):②更新:其中,,意味着将增大,,意味着将减小。当小到一定的程度或者循环达到一定次数后,或停止循环。...原创 2021-11-23 23:20:56 · 8516 阅读 · 2 评论 -
BP神经网络原理
BP神经网络百度百科解释为前馈和误差逆向传播为该神经网络的两个主要部分1、模型介绍这是一个生物上的神经元,①是胞体,用来处理传进来的刺激和产生传出的刺激;②是轴突,输出本神经元的刺激;③是树突,用来接收其他神经元的刺激,传给胞体。由此可以抽象出一个神经元模型:左边树突,中间胞体,右边轴突。是激活函数,对输入进行处理,得到输出,主要作用是完成数据的非线性变换,另一个重要的作用是执行数据的归一化,将输入数据映射到某个范围内,再往下传递,这样做的好处是可以限制数据的扩张,防...原创 2021-08-18 13:18:32 · 1350 阅读 · 0 评论