3_神经网络的搭建(二)

news2024/9/27 23:30:57

线性层和其它层的介绍

教学视频链接:神经网络-线性层及其他层介绍_哔哩哔哩_bilibili

 正则化层(Normalization Layers)

torch.nn 中,Normalization Layers 主要用于对输入数据进行标准化或归一化,以帮助模型的训练和收敛。这些层通常用于深度学习模型中,特别是在卷积神经网络(CNN)和递归神经网络(RNN)等结构中。

优点:可以加快神经网络的训练速度。

这个使用得不是很多。还是放一个官方网址:

BatchNorm2d — PyTorch 2.4 documentation

torch.nn.BatchNorm2d(num_featureseps=1e-05momentum=0.1affine=Truetrack_running_stats=Truedevice=Nonedtype=None

在它的众多参数中,一般只有num_features需要我们手动设置,其他默认即可。 

# With Learnable Parameters
m = nn.BatchNorm2d(100)


# Without Learnable Parameters(第一个参数与数据集的C相同)
m = nn.BatchNorm2d(100, affine=False)

#以下四个参数分别是(N,C,H,W)
input = torch.randn(20, 100, 35, 45)
output = m(input)

循环层(Recurrent Layers)

Recurrent Layers(循环层)指的是用于处理序列数据的神经网络层,主要是循环神经网络(RNN)及其变体。这些层允许模型在处理序列数据时保持状态或记忆,以便有效地捕捉序列中的长期依赖关系。

这个实际上是一种特定的层,用到的地方比较少。

笔者还没有学到循环神经网络,就先略过了,什么时候需要再来补。

变换层(Transform Layers)

Transform Layers(变换层)通常指的是一类用于对输入数据进行变换或映射的层次结构,它们在神经网络中起到了不同的作用和功能。这些层有时候也可以称为逐元素操作层或者非线性激活函数层,它们的设计目的是为了引入模型需要的非线性特性。

这个也使用得比较少。

线性层(Linear Layers)

Linear Layers(线性层)在 PyTorch 中属于神经网络的基本组成部分之一,也称为全连接层或仿射变换层。它们的作用是将输入张量与权重矩阵相乘,并加上一个偏置向量,从而实现对输入数据的线性变换。

这个使用的很广泛。官方网址:Linear — PyTorch 2.4 documentation

torch.nn.Linear(in_featuresout_featuresbias=Truedevice=Nonedtype=None

 对照着上面的函数基本介绍和上面所示的这幅图,我们来简单讲解一下函数的参数都是什么。

从图上不难看出,左中右分别是输入层、中间层(隐藏层)和输出层。

  • in_features:指输入层的特征个数。即图中的d。
  • out_features:指中间层的特征个数。即图中的L。
  • bias:即偏置项,这个参数用于说明,在神经网络训练过程中,是否要加入偏置项b。

from torch import nn
import torch
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
dataset=torchvision.datasets.CIFAR10("../dataset",train=False,download=True,transform=torchvision.transforms.ToTensor())
dataloader=DataLoader(dataset,batch_size=64,drop_last=True)
class MyNn(nn.Module):
    def __init__(self) :
        super().__init__()
        self.lenear1=nn.Linear(196608,10)

    def forward(self,input):
        return self.lenear1(input)

mynn=MyNn()
for data in dataloader:
    imgs,targets=data
    
    output=torch.reshape(imgs,(1,1,1,-1))
    print(output.shape)
    output=mynn(output)
    print(output.shape)

    



随机失活层(Dropout Layers)

Dropout 是一种常用的正则化技术,主要用于减少神经网络模型的过拟合现象。 使用这个,会随机地把输入数据中的某些元素置为0,我们可以指定随机的概率,由此来防止过拟合。

搭建小实战和sequencial的使用

先把Sequrecial的官方网址放在这里:

Sequential — PyTorch 2.4 documentation

 CIFAR-10 简介

我们之前有一直使用CIFAR-10数据集,那么这个小实战就还是使用这个来进行分类。CIFAR-10中的‘10’代表的是10个类别 。具体介绍可以参考这篇文章:

【神经网络与深度学习】CIFAR10数据集介绍,并使用卷积神经网络训练图像分类模型——[附完整训练代码]_cifar-10-CSDN博客

 下图是训练该分类模型的示例图。可以看出它的运作方式就是先卷积再池化再卷积再池化......最后摊平成一维数据再输出。

其中我要单独拿出来说的是第一步卷积的过程,图上可以看到,输入(Input)是3@32*32,这个的意思其实是3通道,每通道32*32像素(也就是32*32的数据),而经过第一次卷积后,它的通道数增加了:32@32*32。为什么会这样?其实在于它使用的卷积核,图中只标明了这是一个5*5的卷积核,并没有说它的通道数,实际上,这里应该是一个三通道的5*5卷积核,在第一次卷积处理过程中,这样的卷积核一共有32个。每一个卷积核做运算后得到一通道的32*32的输出,一共32个输出“平面”,这才使得第一次卷积的结果成为了32@32*32。

今天我们就来实现这个模型。

模型实现

这一部分要做的笔记就太多了。

把视频放在这里:神经网络-搭建小实战和Sequential的使用_哔哩哔哩_bilibili

 再把图放在这里一遍:

 在搭建网络过程中,有一些参数是涉及到计算的。

比如说刚刚说过的卷积层,再把卷积函数放一下:

torch.nn.Conv2d(in_channelsout_channelskernel_sizestride=1padding=0dilation=1,

 groups=1bias=Truepadding_mode='zeros'device=Nonedtype=None)

可以看到,我们需要设置的参数有:in_channels,out_channels,kernel_size等等。我们需要注意官网上所给出的计算公式:

 其他几个卷积层的计算公式类似,建议看不懂过程的去看视频。

由此我们可以得出所需要设置的参数,开始搭建网络了。

from torch import nn
import torch
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
#dataset=torchvision.datasets.CIFAR10("../dataset",train=False,download=True,transform=torchvision.transforms.ToTensor())
#dataloader=DataLoader(dataset,batch_size=64,drop_last=True)
class MyNn(nn.Module):
    def __init__(self) :
        super().__init__()
        # self.conv1=nn.Conv2d(3,32,5,padding=2)
        # self.maxpool1=nn.MaxPool2d(2)
        # self.conv2=nn.Conv2d(32,32,5,padding=2)
        # self.maxpool2=nn.MaxPool2d(2)
        # self.conv3=nn.Conv2d(32,64,5,padding=2)
        # self.maxpool3=nn.MaxPool2d(2)
        # self.flatten=nn.Flatten()
        # self.linear1=nn.Linear(1024,64)
        # self.linear2=nn.Linear(64,10)
        '''使用Sequential可以简化代码'''
        self.model1=nn.Sequential(
            nn.Conv2d(3,32,5,padding=2),
            nn.MaxPool2d(2),
            nn.Conv2d(32,32,5,padding=2),
            nn.MaxPool2d(2),
            nn.Conv2d(32,64,5,padding=2),
            nn.MaxPool2d(2),
            nn.Flatten(),
            nn.Linear(1024,64),
            nn.Linear(64,10)
        )


    def forward(self,x):
        # x=self.conv1(x)
        # x=self.maxpool1(x)
        # x=self.conv2(x)
        # x=self.maxpool2(x)
        # x=self.conv3(x)
        # x=self.maxpool3(x)
        # x=self.flatten(x)
        # x=self.linear1(x)
        # x=self.linear2(x)
        x=self.model1(x)
        return x

'''
检验网络是否设置正确:
'''
mynn=MyNn()
input=torch.ones((64,3,32,32))
output=mynn(input)
writer=SummaryWriter('Logs')
writer.add_graph(mynn,input)
writer.close()

最后想说的是writer.add_graph()的使用,不得不说tensorboard真的太强大了:

 我们可以使用它来查询训练的每一步过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1980924.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

让C盘清理不再深奥 竟然可以这么简单就清理干净了

让C盘清理不再深奥 竟然可以这么简单就清理干净了。C盘对很多人来说是很陌生的,这个并不奇怪,毕竟C盘确实太复杂,真的懂得C盘的结构的人并不多,如果要给C盘清理垃圾,那真的没多少个人可以做到靠手动去排查垃圾&#xf…

LeetCode 热题 HOT 100 (017/100)【宇宙最简单版】

【链表】No. 0148 排序链表【中等】👉力扣对应题目指路 希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#xff…

PowerBi 瀑布图使用度量值

1. 假设我们有这样一张表。 销量表,第一列是销售月份,第二列到第四列,分别是西南,西北,东南三个地区的销量。 我们想要用瀑布图,X轴显示销售月份日期,细目显示三个地区,Y轴显示销量…

rke管理k8s节点的新增与删除

1 删除worker节点 # 查看节点名 kubectl get nodes # 标记节点不可调度 kubectl cordon worker8 # DaemonSet 确保集群中的所有(或某些)节点上都运行了一个 Pod 的副本 # 排空节点上的pod,确保该节点上的所有Pod都调度到其他节点 kubectl d…

【Android】通知的使用

使用通知 通知(notification)是Android系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现。发出一条通知后,手机最上方的状态栏中…

三十种未授权访问漏洞复现 合集( 五 )

未授权访问漏洞介绍 未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷,导致其他用户可以直接访问,从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。---->目录遍历 目前主要存在未授权访问漏洞的有:NFS服务&a…

Modern C++ 函数发展:从函数指针到匿名函数

函数作为最小的代码单元&#xff0c;在C这个大杂烩中&#xff0c;可以跟很多特性结合&#xff0c;较为复杂&#xff0c;本文讲解C中函数是如何一步步演变的。 函数 跟C中类似&#xff0c;将一部分代码封装起来&#xff0c;方便进行复用。 #include <iostream>int add(i…

【Nuxt】404 页面 和 嵌套路由

404 页面 只需要一个动态参数组件的页面即可&#xff08;slug 也可以是其他字符串&#xff09;&#xff0c;比如&#xff1a; 此时包含三个页面组件&#xff1a;/about, /about/about-fdsfsdf, /about/fdsf/fdsfs/fsdfsfsdf/…(404) 。 具体 404 路由页面可以写成某个路径下的…

【正点原子i.MX93开发板试用连载体验】中文提示词的训练

本文首发于电子发烧友论坛&#xff1a;【正点原子i.MX93开发板试用连载体验】基于深度学习的语音本地控制 - 正点原子学习小组 - 电子技术论坛 - 广受欢迎的专业电子论坛! 好久没有更新了&#xff0c;今天再来更新一下。 我们用前面提到的录音工具录制了自己的中文语音&#…

销量激增难解奇瑞焦虑:新能源短板与加班文化引争议

尽管今年上半年奇瑞汽车以惊人的48.4%同比增长率&#xff0c;力压比亚迪、吉利等竞争对手&#xff0c;成为国内汽车销量增速最快的企业&#xff0c;但这光鲜的增长数字背后&#xff0c;却隐藏着难以忽视的焦虑与困境。 奇瑞汽车的销量飞跃&#xff0c;主要得益于燃油车市场的强…

短信平台营销:解锁市场潜力的金钥匙

在瞬息万变的营销领域&#xff0c;短信平台以其直接、高效、覆盖面广的特性&#xff0c;成为众多企业争相探索的蓝海。面对中国近9亿的手机用户群体&#xff0c;这一庞大的市场潜力无疑为企业开启了无限商机的大门。 一、塑造品牌&#xff0c;提升知名度 短信平台营销是…

ProvenCore经过形式化验证的TEE OS,最高级别的安全认证CC EAL 7

这是一个闭源的TEE OS&#xff0c;但其ATF组件已提交到upstream。 实现安全功能需要硬件的高级抽象&#xff0c;通常由操作系统 (OS) 提供。由于安全功能的正确性取决于这些高级抽象的正确性&#xff0c;因此实现这些功能的操作系统应该没有可利用的漏洞。 ProvenRun 开发了 …

JavaEE---Spring MVC(3)

11.获取session 法1> 传统方式 初始状态下session为空,那么我们就需要手动设置session 2>不传统方式 但是!!!我们发现报错了! 解决方式: 设置session之后可以发现代码的session就被查到了 12.获取header 1>传统方式 这里我们规定只返回浏览器的信息 2>不…

【CodinGame】趣味算法(教学用) CLASH OF CODE -20240804

文章目录 正文写在最后END 正文 import math import sys# Auto-generated code below aims at helping you parse # the standard input according to the problem statement.n int(input()) j 1 h 0for i in range(1, n 1):j * ih iprint(j) print(h)import sys import m…

推荐一款界面优雅、功能强大的 .NET + Vue 权限管理系统

目录 前言 项目简介 项目特点 项目预览 项目演示 1、系统登录 2、系统首页 3、系统页面 4、插件示例 5、移动端 项目地址 总结 前言 今天推荐一款用 .NET 和 Vue3 实现的开源权限管理系统。它的界面清爽干净&#xff0c;功能强大&#xff0c;还具备灵活的角色权限分配…

人工智能在病理组学领域的最新研究进展|顶刊速递·24-08-05

小罗碎碎念 本期推文主题&#xff1a;人工智能在病理组学领域的最新进展 今天的推文主要涉及三个癌种——结直肠癌、肾乳头状细胞癌、上皮性卵巢癌。既有淋巴结转移的风险预测模型&#xff0c;也有结合了测序数据的多模态病理AI模型。 重点关注一下第六篇文献&#xff0c;由西…

本地化AI语音聊天voicechat2;改进版的Whisper模型,速度快50%;多代理创建儿童图画书

✨ 1: voicechat2 voicechat2是一款使用WebSockets进行快速、本地化AI语音聊天的软件。 Voicechat2 是一个快速、完全本地化的AI语音聊天系统&#xff0c;采用WebSockets技术。它运行在高性能硬件上&#xff0c;例如7900级的AMD RDNA3显卡或4090显卡&#xff0c;可以实现低至…

最全面的Python重点知识汇总,建议收藏!

Py2 VS Py3 print成为了函数&#xff0c;python2是关键字 不再有unicode对象&#xff0c;默认str就是unicode python3除号返回浮点数 没有了long类型 xrange不存在&#xff0c;range替代了xrange 可以使用中文定义函数名变量名 高级解包 和*解包 限定关键字参数 *后的变…

【区块链+医疗健康】国家儿童医学中心互联网 + 肾脏专科联盟服务平台 | FISCO BCOS应用案例

医疗资源结构的失衡在儿科领域尤为突出&#xff0c;供需矛盾突出。由于肾脏病等疑难病的特殊性&#xff0c;加之儿童疾病诊断的 复杂性&#xff0c;其诊治过程可谓“难上加难”。一些基层儿童医院由于缺乏专业的医疗团队、特殊的辅助检查手段以及 基因测序等前沿技术的支撑&…

代码随想录算法训练营第二十四天| 455.分发饼干, 376. 摆动序列 , 53. 最大子序和

今天是贪心算法学习的第一天&#xff0c;主要的学习内容有&#xff1a;贪心算法的理论基础&#xff0c;以及如何通过局部最优解推导全局最优解。 对于贪心的理论基础&#xff0c;贪心算法并没有固定的模板和套路&#xff0c;对于贪心算法的题目其实就是一种模拟题&#xff0c;…