
神经网络
文章平均质量分 65
放牛儿
走,去放牛
展开
-
基于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 · 464 阅读 · 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 · 2324 阅读 · 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 · 3286 阅读 · 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 · 1353 阅读 · 0 评论 -
pytorch——现有网络模型的使用和修改
以VGG网络为例,在Docs中,选择图像相关的torchvision,左侧的torchvision.models是一些现成的网络模型,右侧是网络模型的一个分类,第一个便是和分类有关的模型。vgg最常用的就是vgg16和vgg19:参数pretrained如果为True,则模型中的参数使用现有的已经在ImageNet数据集中训练完成的,若为False,则参数没有经过任何训练,process若为True,则会显示一个下载进度条。...原创 2022-02-15 17:57:20 · 1651 阅读 · 0 评论 -
pytorch——优化器使用
使用步骤:建立一个优化器,对参数的每一个梯度清零,调用损失函数的反向传播(backward)求出每一个参数的梯度,最后对每一个参数进行调优。以随机最速下降法 (SGD)为例:参数params用来指明网络中需要优化的参数,lr为学习速率。准备数据集:dataset = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTenso...原创 2022-02-12 19:23:04 · 2731 阅读 · 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 · 1230 阅读 · 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 · 2556 阅读 · 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 · 9541 阅读 · 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 · 2016 阅读 · 0 评论 -
神经网络——最大池化
最大池化的目的在于保留原特征的同时减少神经网络训练的参数,使得训练时间减少。相当于1080p的视频变为了720p最大池化介绍池化层最常用的是下采样,其中参数:kernel_size:设置取最大值的窗口,类似于卷积层的卷积核,如果传入参数是一个int型,则生成一个正方形,边长与参数相同;若是两个int型的元组,则生成长方形。stride:步径,与卷积层不同,默认值是kernel_size的大小。padding:和卷积层一样,用法类似于kernel_size。dila...原创 2022-02-01 23:46:57 · 11609 阅读 · 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 · 4284 阅读 · 0 评论 -
神经网络基本骨架、结构的原理及使用
目录神经骨架的使用基本神经结构的使用神经骨架的使用首先我们进官网进行相关信息的查询:container(相当于一个骨架)之中有六个模块,最常用的是module模块,因为对所有神经网络提供了一个最基本的类。根据module的介绍,我们知道自己创建的model也需要继承该类 。from torch import nnclass Model(nn.Module): def __init__(self): supe...原创 2022-01-26 22:50:14 · 1492 阅读 · 0 评论 -
BP神经网络原理
BP神经网络百度百科解释为前馈和误差逆向传播为该神经网络的两个主要部分1、模型介绍这是一个生物上的神经元,①是胞体,用来处理传进来的刺激和产生传出的刺激;②是轴突,输出本神经元的刺激;③是树突,用来接收其他神经元的刺激,传给胞体。由此可以抽象出一个神经元模型:左边树突,中间胞体,右边轴突。是激活函数,对输入进行处理,得到输出,主要作用是完成数据的非线性变换,另一个重要的作用是执行数据的归一化,将输入数据映射到某个范围内,再往下传递,这样做的好处是可以限制数据的扩张,防...原创 2021-08-18 13:18:32 · 1422 阅读 · 0 评论