1. 神经网络 非线性激活层

    作用:增强模型的非线性拟合能力

    非线性激活层网络:

    class activateNet(nn.Module):def __init__(self):super(activateNet,self).__init__()self.relu = nn.ReLU()self.sigmoid = nn.Sigmoid()def forward(self,input):#output = self.relu(input)output = self.sigmoid(input)return outputactivatenet = activateNet()
    

    relu:

    在这里插入图片描述

    sigmoid:

    在这里插入图片描述

    完整代码:

    这里是将上一步池化层的输出作为非线性激活层的输入

    code:

    import torch
    import torchvision
    from torch import nn
    from torch.nn import Conv2d, MaxPool2d
    from torch.utils.data import DataLoader
    from torch.utils.tensorboard import SummaryWriter
    from torchvision.datasets import ImageFolder
    from torchvision import transforms#数据预处理
    transform = transforms.Compose([transforms.Resize((224,224)),transforms.ToTensor(),transforms.Normalize(mean = [0.5,0.5,0.5],std = [0.5,0.5,0.5])
    ])#加载数据集
    folder_path = '../images'
    dataset = ImageFolder(folder_path,transform=transform)
    dataloader = DataLoader(dataset,batch_size=1)#卷积
    class convNet(nn.Module):def __init__(self):#调用父类nn.Module的构造函数super(convNet,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 xconvnet = convNet()#池化
    class poolNet(nn.Module):def __init__(self):super(poolNet,self).__init__()#ceil_mode=True表示边缘不满3x3的部分也会被池化#kernel_size=3 默认是卷积核的大小self.maxpool1 = MaxPool2d(kernel_size=3,ceil_mode=True)self.maxpool2 = MaxPool2d(kernel_size=3,ceil_mode=False)def forward(self,input):output = self.maxpool1(input)#output = self.maxpool2(input)return outputpoolnet = poolNet()#非线性激活层(这里使用relu、sigmoid)
    class activateNet(nn.Module):def __init__(self):super(activateNet,self).__init__()self.relu = nn.ReLU()self.sigmoid = nn.Sigmoid()def forward(self,input):#output = self.relu(input)output = self.sigmoid(input)return outputactivatenet = activateNet()writer = SummaryWriter('../logs')cnt = 0
    for data in dataloader:img,label = dataprint(img.shape)conv_output = convnet(img)print(conv_output.shape)writer.add_images('input',img,cnt)conv_output = torch.reshape(conv_output,(-1,3,222,222))writer.add_images('conv_output',conv_output,cnt)pool_output = poolnet(conv_output)writer.add_images('pool_output',pool_output,cnt)activate_output = activatenet(pool_output)writer.add_images('activate_output',activate_output,cnt)cnt = cnt + 1writer.close()
    
  2. 神经网络 正则化层

    防止过拟合

    比较简单 不写了

    这这里区别几个概念:

    - 归一化:将数据映射到特定区间(如[0,1]或[-1,1])的过程,常见方法如min-max归一化,通过减去最小值并除以极差实现。其目的是消除不同特征量纲差异的影响,使数据处于统一量级,便于模型快速收敛,例如将图像像素值从0-255转换为0-1。

    - 标准化:将数据转换为均值为0、标准差为1的分布,即通过减去均值并除以标准差实现(z-score标准化)。它能让数据更符合正态分布,降低异常值对模型的影响,常用于线性回归、SVM等对数据分布敏感的算法中。

    - 正则化:在模型训练中加入额外约束(如L1、L2范数)以防止过拟合的技术。L1正则化通过惩罚权重绝对值,可产生稀疏权重;L2正则化(权重衰减)惩罚权重平方,使权重更平滑。其核心是平衡模型复杂度与拟合能力,提升泛化性能。

  3. 神经网络 线性层(全连接层)

    输入为上一步非线性激活层的输出

    线性层:

    code:

    class linearNet(nn.Module):def __init__(self):super(linearNet,self).__init__()#in_features(根据下面展开后输出的数值) 表示输入特征的维度,out_features=10 表示输出特征的维度self.linear = nn.Linear(32856,10)def forward(self,input):output = self.linear(input)return outputlinearnet = linearNet()
    

    in_features:

        #为了得到in_featuresprint(torch.reshape(activate_output,(1,1,1,-1)).shape)
    

    在这里插入图片描述

    完整代码:

    code:

    import torch
    import torchvision
    from torch import nn
    from torch.nn import Conv2d, MaxPool2d
    from torch.utils.data import DataLoader
    from torch.utils.tensorboard import SummaryWriter
    from torchvision.datasets import ImageFolder
    from torchvision import transforms#数据预处理
    transform = transforms.Compose([transforms.Resize((224,224)),transforms.ToTensor(),transforms.Normalize(mean = [0.5,0.5,0.5],std = [0.5,0.5,0.5])
    ])#加载数据集
    folder_path = '../images'
    dataset = ImageFolder(folder_path,transform=transform)
    #drop_last=True 表示最后一个batch可能小于batch_size,不足的部分会被丢弃
    #dataloader = DataLoader(dataset,batch_size=1,drop_last=True)
    dataloader = DataLoader(dataset,batch_size=1)#卷积
    class convNet(nn.Module):def __init__(self):#调用父类nn.Module的构造函数super(convNet,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 xconvnet = convNet()#池化
    class poolNet(nn.Module):def __init__(self):super(poolNet,self).__init__()#ceil_mode=True表示边缘不满3x3的部分也会被池化#kernel_size=3 默认是卷积核的大小self.maxpool1 = MaxPool2d(kernel_size=3,ceil_mode=True)self.maxpool2 = MaxPool2d(kernel_size=3,ceil_mode=False)def forward(self,input):output = self.maxpool1(input)#output = self.maxpool2(input)return outputpoolnet = poolNet()#非线性激活层(这里使用relu、sigmoid)
    class activateNet(nn.Module):def __init__(self):super(activateNet,self).__init__()self.relu = nn.ReLU()self.sigmoid = nn.Sigmoid()def forward(self,input):#output = self.relu(input)output = self.sigmoid(input)return outputactivatenet = activateNet()#线性层(全连接层)
    class linearNet(nn.Module):def __init__(self):super(linearNet,self).__init__()#in_features(根据下面展开后输出的数值) 表示输入特征的维度,out_features=10 表示输出特征的维度self.linear = nn.Linear(32856,10)def forward(self,input):output = self.linear(input)return outputlinearnet = linearNet()writer = SummaryWriter('../logs')cnt = 0
    for data in dataloader:img,label = dataprint(img.shape)conv_output = convnet(img)print(conv_output.shape)writer.add_images('input',img,cnt)conv_output = torch.reshape(conv_output,(-1,3,222,222))writer.add_images('conv_output',conv_output,cnt)pool_output = poolnet(conv_output)writer.add_images('pool_output',pool_output,cnt)activate_output = activatenet(pool_output)writer.add_images('activate_output',activate_output,cnt)#为了得到in_featuresprint(torch.reshape(activate_output,(1,1,1,-1)).shape)#flatten:展开成一维数组linear_output = torch.flatten(activate_output)linear_output = linearnet(linear_output)print(linear_output.shape)cnt = cnt + 1writer.close()
    

    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Vue进阶学习笔记】组件通信专题精讲

目录前言props 父传子原理说明使用场景代码示例父组件 PropsTest.vue子组件 Child.vue自定义事件 $emit 子传父原理说明使用场景代码示例父组件 EventTest.vue子组件 Event2.vueEvent Bus 兄弟/跨层通信原理说明使用场景代码示例事件总线 bus/index.ts兄弟组件通信示例Child2.v…

【PTA数据结构 | C语言版】求最小生成树的Prim算法

本专栏持续输出数据结构题目集,欢迎订阅。 文章目录题目代码题目 请编写程序,实现在带权的无向图中求最小生成树的 Prim 算法。 注意:当多个待收录顶点到当前点集的距离等长时,按编号升序进行收录。 输入格式: 输入首…

【加解密与C】Rot系列(四)RotSpecial

RotSpecial 函数解析RotSpecial 是一个自定义函数,通常用于处理特定的旋转操作,尤其在图形变换或数据处理中。该函数可能涉及欧拉角、四元数或其他旋转表示方法,具体行为取决于实现上下文。以下是关于该函数的通用解释和可能的使用方法&#…

【机器学习深度学习】LLaMAFactory中的精度训练选择——bf16、fp16、fp32与pure_bf16深度解析

目录 前言 一、 为什么精度如此重要?—— 内存、速度与稳定性的三角博弈 二、 四大精度/模式详解: bf16, fp16, fp32, pure_bf16 三、 关键特性对比表 ▲四大计算类型核心对比表 ▲ 显存占用对比示例(175B参数模型) ▲LLa…

C# 基于halcon的视觉工作流-章21-点查找

C# 基于halcon的视觉工作流-章21-点查找 本章目标: 一、检测显著点; 二、Harris检测兴趣点; 三、Harris二项式检测兴趣点; 四、Sojka运算符检测角点; 五、Lepetit算子检测兴趣点;一、检测显著点 halcon算子…

(11)机器学习小白入门YOLOv:YOLOv8-cls epochs与数据量的关系

YOLOv8-cls epochs与数据量的关系 (1)机器学习小白入门YOLOv :从概念到实践 (2)机器学习小白入门 YOLOv:从模块优化到工程部署 (3)机器学习小白入门 YOLOv: 解锁图片分类新技能 (4)机器学习小白入门YOLOv :图片标注实操手册 (5)机…

Grafana | 如何将 11.x 升级快速到最新 12.x 版本?

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ]📢 大家好,我是 WeiyiGeek,一名深耕安全运维开发(SecOpsDev)领域的技术从业者,致力于探索DevOps与安全的融合(Dev…

Dubbo + Spring Boot + Zookeeper 快速搭建分布式服务

Dubbo Spring Boot Zookeeper 快速搭建分布式服务 本文将详细介绍如何基于 Dubbo、Spring Boot 和 Zookeeper 快速搭建一个简单的分布式服务调用场景,包含服务提供者(Provider)、服务消费者(Consumer)及公共接口&…

五分钟掌握 TDengine 数据文件的工作原理

小 T 导读:今天我们来探讨一下——TDengine中的时序数据到底是如何存储的? 在上一期的文章《五分钟掌握 TDengine 时序数据的保留策略》中,我们知道了TDengine是如何按照时间段对数据进行分区来管理数据的。 接下来,我们和大家一起…

Python爬虫实战:研究http-parser库相关技术

一、研究背景与意义 在当今数字化时代,网络数据蕴含着巨大的价值。从商业决策、学术研究到社会治理,对海量网络信息的有效采集与分析至关重要。网络爬虫作为数据获取的核心工具,其性能与稳定性直接影响数据质量。然而,随着互联网技术的发展,网站反爬机制不断升级,传统爬…

Go语言实战案例-批量重命名文件

在《Go语言100个实战案例》中的 文件与IO操作篇 - 案例17:批量重命名文件 的完整内容,适合初学者实践如何使用 Go 操作文件系统并批量处理文件名。🎯 案例目标实现一个小工具,能够批量重命名指定目录下的所有文件,例如…

基于单片机非接触红外测温系统

传送门 👉👉👉👉其他作品题目速选一览表 👉👉👉👉其他作品题目功能速览 概述 本设计实现了一种基于单片机的非接触式红外测温系统,适用于快速、安全测量物体表面温…

Python 入门手札:从 0 到会--第十天Python常用的第三方库Numpy,Pandas,Matplotlib

目录 一、Numpy 1.NumPy 是什么? 1.1安装numpy 1.2 导入numpy模块 2.NumPy 的核心:ndarray 2.1 什么是 ndarray? 2.2 ndarray 的创建方式 2.3 常见属性(用于查看数组结构) 2.4 ndarray 的切片与索引 2.5 ndarr…

mysql 性能优化之Explain讲解

EXPLAIN是 MySQL 中用于分析查询执行计划的重要工具,通过它可以查看查询如何使用索引、扫描数据的方式以及表连接顺序等信息,从而找出性能瓶颈。以下是关于EXPLAIN的详细介绍和实战指南:1. EXPLAIN 基本用法在SELECT、INSERT、UPDATE、DELETE…

Redis 连接:深度解析与最佳实践

Redis 连接:深度解析与最佳实践 引言 Redis 作为一款高性能的内存数据结构存储系统,在当今的互联网应用中扮演着越来越重要的角色。高效的 Redis 连接管理对于保证系统的稳定性和性能至关重要。本文将深入探讨 Redis 连接的原理、配置以及最佳实践,帮助读者更好地理解和应…

C语言---VSCODE的C语言环境搭建

文章目录资源下载配置环境验证资源下载 站内下载 配置环境 解压压缩包,复制以下文件的路径 打开主页搜索系统环境变量 点击环境变量 选择系统变量中的Path,点击编辑 在最后面添加路径。 添加完成记得关机重启。 验证 重启电脑之后打开在Power…

ojdbc对应jdk版本附下载地址(截止20250722)

可以从Oracle官网查看, JDBC and UCP Downloads page

Redis为什么被设计成是单线程的?

Redis单线程模型解析 当我们说Redis是单线程时,特指"其网络IO和键值对读写操作由单个线程完成"。实际上,Redis仅网络请求模块和数据操作模块采用单线程设计,而持久化存储、集群支持等其他模块都采用了多线程架构。 事实上,Redis从4.0版本就开始对部分命令实现了…

基础流程图

一、常用符号及定义二、 画图基础规则1、从上至下,从左至右流向顺序。2、开始符号只能有一个出口。3、进程符号不做校验逻辑。4、相同流程图,符号大小应为一致。5、引用流程,不重复绘制。6、路径符号尽量避免交叉重叠。7、同一路径&#xff0…

C# 结构体

目录 1.如何定义一个结构体(struct 关键字) 2.如何使用一个结构体 3.如何修改一个数据 4.如何让去访问一个学生的信息 5、结构体数组 练习 1.如何定义一个结构体(struct 关键字) C#中public 、private、protect的区别 结构…