【深度学习04】 快速构建一个神经网络

简介: 在数据集(dataloader)中读取每一份data,每一个data都包含imgs(图片,tensor格式),targets(标签)

⭐本文内容:卷积,池化,非线性激活,线性组合,以及快速搭建一个简单的神经网络


基本骨架


import torch
import torch.nn as nn
class RecoModel(nn.Module):
  def __init__(self):
    super(RecoModel,self).__init__()  #将子模块指定为默认属性
  def forward(self,input):  #定义一个向前传播的函数
    output = input+1
    return output


1️⃣forward()定义了每次执行的 计算步骤。 在所有的Module中都需要重写这个函数


2️⃣RecoModel()(input)的 input 必须是tensor格式


Model = RecoModel()
x = torch.tensor(1.0)
output = Model(x)  #相当于RecoModel()()
print(output)


卷积层


torch.nn.Conv2d()函数


  • 示例:self.conv1 = Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)
  • 作用:对图像进行2D卷积
  • 参数:

。🌈in_channels:输入的颜色通道数,彩色为3

。🚀out_channels:卷积产生的输出通道数

。kernel_size:卷积核的大小

。stride:卷积核移动的步长

。paddingz:是否填充,边缘处小于卷积核则用0填充


卷积的概念conv_arithmetic/README.md at master · vdumoulin/conv_arithmetic (github.com)

out_channels=2时,2个卷积核在图像上滑动,最后得到2个通道


定义模型


class Model(nn.Module):
  def __init__(self):
    super(Model,self).__init__()
    self.conv1 = Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)
  def forward(self,x):
    x = self.conv1(x)
    return x


定义一层卷积层(2D卷积),输出通道数为6


加载数据集


dataset = torchvision.datasets.CIFAR10("/content/gdrive/MyDrive/Learn-       pytorch/dataset",train=False,transform=torchvision.transforms.ToTensor())
dataloader = DataLoader(dataset,batch_size=64)


torchvision.datasets.CIFAR10()函数


  • 示例:dataset = torchvision.datasets.CIFAR10("/content/gdrive/MyDrive/Learn- pytorch/dataset",train=False,transform=torchvision.transforms.ToTensor())


  • 作用:下载数据集


  • 参数:


。CIFAR10:官方数据集的名字

。train=False:是否下载训练集。否,则下载测试集

。🍔transform=torchvision.transforms.ToTensor():转换为Tensor数据类型


图片卷积


for data in dataloader:
  imgs,targets = data
  out = Model()(imgs)
  print(imgs.shape)
  print(out.shape)
  writer.add_images("input",imgs,step)
  out = torch.reshape(out,(-1,3,30,30))
  writer.add_images("output",out,step)
  step=step+1


【First cycle output】 :torch.Size([64, 3, 32, 32]) torch.Size([64, 6, 30, 30])


🔥在数据集(dataloader)中读取每一份data,每一个data都包含imgs(图片,tensor格式),targets(标签)


⚡卷积前后的图像对比:


585aef39cb83d88810a91051dee6c2d5.png


227a65f9ebb9e848d22d01085e46f5e5.png


池化层


池化核每移动一个步长,然后取池化核所覆盖的图片,其范围内的最大值


在卷积层步长默认为1,在池化层步长为step=kernel_size=3


from torch.nn import MaxPool2d 
class Pool_test(nn.Module):
  def __init__(self):
    super(Pool_test,self).__init__()
    self.maxpool1 = MaxPool2d(kernel_size=3,ceil_mode=False)
  def forward(self,input):
    output = self.maxpool1(input)
    return output
test=Pool_test()


MaxPool2d()函数


  • 示例:self.maxpool1 = MaxPool2d(kernel_size=3,ceil_mode=False)
  • 作用:池化,相当于给图片打马赛克
  • 参数:

。kernel_size:池化核窗口大小

。ceil_mode:如果等于True,计算输出信号大小的时候,会使用向上取整,代替默认的向下取整的操作


池化核的移动

 

202205161024721.png

202205161024407.png


202205161024176.png


池化的作用


模糊、马赛克


17c77bb3bbb6ffe467949ed1cbc36a7a.png


57a9a7c0d9910d5683418efd17638dfa.png


非线性激活


使得神经网络可以任意逼近任何非线性函数


如果没有非线性层,无论神经网络有多少层,输出都是输入的线性组合


使用一个sigmoid1()函数的效果对比:


10b07d8075d3e11bc26c64f6b70599a0.png

642c0c140b3cefc48158c8ab4484ee7a.png


搭建一个神经网络


afb3393d9a1947c43b29a17c97377d63.png


self.model1 = Sequential(
            Conv2d(3,32,5,1,2),
            MaxPool2d(2),
            Conv2d(32,32,5,1,2),
            MaxPool2d(2),
            Conv2d(32,64,5,1,2),
            MaxPool2d(2),
            Flatten(),
            Linear(1024,64),
            Linear(64,10),
            )


  • 卷积1


31caa703fa3d60e1ae6ed6a42ef7a87c.png


🍺输入一个3@32x32的图像,经过5 x 5的卷积核,输出一个32通道,32x32大小的图像:Conv2d(3,32,5,1,2)


3-通道数;32-图像尺寸;5-卷积核大小


pading计算?


202205161046638.png


Hin=32,padding[0]=?,dilation[0]默认为1,kernel_size[0]=5,stride[0]设置为1(我们设每一次卷积核移动1个像素点),Hout=32


则:padding[0]=2;stride=1


  • 池化1


ece768b1bd82a6b72611c39904a37023.png


MaxPool2d(2),池化核大小为2


  • 卷积2


0765c3860a5ac761dd1821ce803387de.png


输入一个32@32*32的图像,经过5 x 5的卷积核,输出一个32通道,32x32大小的图像:Conv2d(32,32,5,1,2)


  • 池化2


  • 卷积3


7ab5618c7d2c395952ceceeb4dd4073f.png


输入一个32@8x8的图像,经过5 x 5的卷积核,输出64@8x8的图像


  • 池化3


  • 展平层


31c06779bcbc1c34c9b6b8b17afe697a.png


将64@4x4的tensor类型的图像,转成64x4x4=1024的一维向量数组


  • 线性层1


对输入数据做线性变换:y=Ax+b


50e978645c8b3323393ad0d01e0602e3.png


Linear(1024,64),1024是输入向量组的长度,64是输出的长度


  • 线形层2


1636f9eecf107a8b6d4b9a71686cb26d.png



将64个输入继续线性组合,最终输出10(因为最后分类的图像一共有十个类别):Linear(64,10)

相关文章
|
2月前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
80 11
|
1月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
130 5
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
14天前
|
机器学习/深度学习 数据可视化 算法
PyTorch生态系统中的连续深度学习:使用Torchdyn实现连续时间神经网络
神经常微分方程(Neural ODEs)是深度学习领域的创新模型,将神经网络的离散变换扩展为连续时间动力系统。本文基于Torchdyn库介绍Neural ODE的实现与训练方法,涵盖数据集构建、模型构建、基于PyTorch Lightning的训练及实验结果可视化等内容。Torchdyn支持多种数值求解算法和高级特性,适用于生成模型、时间序列分析等领域。
157 77
PyTorch生态系统中的连续深度学习:使用Torchdyn实现连续时间神经网络
|
5天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
43 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
12天前
|
Shell 网络架构 计算机视觉
YOLOv11改进策略【模型轻量化】| ShufflenetV2,通过通道划分构建高效网络
YOLOv11改进策略【模型轻量化】| ShufflenetV2,通过通道划分构建高效网络
43 14
|
8天前
|
Shell 网络架构 计算机视觉
RT-DETR改进策略【模型轻量化】| ShufflenetV2,通过通道划分构建高效网络
RT-DETR改进策略【模型轻量化】| ShufflenetV2,通过通道划分构建高效网络
24 5
|
1月前
|
机器学习/深度学习 监控 算法
基于yolov4深度学习网络的排队人数统计系统matlab仿真,带GUI界面
本项目基于YOLOv4深度学习网络,利用MATLAB 2022a实现排队人数统计的算法仿真。通过先进的计算机视觉技术,系统能自动、准确地检测和统计监控画面中的人数,适用于银行、车站等场景,优化资源分配和服务管理。核心程序包含多个回调函数,用于处理用户输入及界面交互,确保系统的高效运行。仿真结果无水印,操作步骤详见配套视频。
54 18
|
2月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于yolov4深度学习网络的公共场所人流密度检测系统matlab仿真,带GUI界面
本项目使用 MATLAB 2022a 进行 YOLOv4 算法仿真,实现公共场所人流密度检测。通过卷积神经网络提取图像特征,将图像划分为多个网格进行目标检测和识别,最终计算人流密度。核心程序包括图像和视频读取、处理和显示功能。仿真结果展示了算法的有效性和准确性。
87 31
|
1月前
|
运维 监控 Cloud Native
构建深度可观测、可集成的网络智能运维平台
本文介绍了构建深度可观测、可集成的网络智能运维平台(简称NIS),旨在解决云上网络运维面临的复杂挑战。内容涵盖云网络运维的三大难题、打造云原生AIOps工具集的解决思路、可观测性对业务稳定的重要性,以及产品发布的亮点,包括流量分析NPM、网络架构巡检和自动化运维OpenAPI,助力客户实现自助运维与优化。
|
1月前
|
人工智能 大数据 网络性能优化
构建超大带宽、超高性能及稳定可观测的全球互联网络
本次课程聚焦构建超大带宽、超高性能及稳定可观测的全球互联网络。首先介绍全球互联网络的功能与应用场景,涵盖云企业网、转发路由器等产品。接着探讨AI时代下全球互联网络面临的挑战,如大规模带宽需求、超低时延、极致稳定性和全面可观测性,并分享相应的解决方案,包括升级转发路由器、基于时延的流量调度和增强网络稳定性。最后宣布降价措施,降低数据与算力连接成本,助力企业全球化发展。

热门文章

最新文章