深度学习软件

(这一部分去看tensorflow和pytorch的笔记)
(见专栏)

  1. tensorflow和pytorch区别

    tensorflow,我们先构建显示的图,然后重复运行它

    pytorch,我们每次做前向传播时,都构建一个新的图

卷积神经网络CNN 结构
  1. LeNet-5

    比较经典的用于数字识别的cnn

    from torch import nn
    import torch
    from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Tanhclass LeNet(nn.Module):def __init__(self):super(LeNet,self).__init__()self.model1 = nn.Sequential(#input:32x32x1#conv1:28x28x6Conv2d(1, 6, 5, 1, 0),Tanh(),#poo1:14x14x6MaxPool2d(2, 2),#conv2:10x10x16Conv2d(6,16,5,1,0),Tanh(),#poo2:5x5x16MaxPool2d(2,2),Flatten(),Linear(400,120),Tanh(),Linear(120,84),Tanh(),Linear(84,10))def forward(self,x):x = self.model1(x)return xlenet = LeNet()
    
  2. AlexNet

    很小的计算量,但是耗费存储也很多,比较低的acc

    但是,实际上AlexNet 的输入图片尺寸为 224×224(这里是227×227)

    import torch
    from torch import nn
    from torch.nn import Flatten, Linearclass AlexNet(nn.Module):def __init__(self):super(AlexNet,self).__init__()self.model1 = nn.Sequential(#input:227x227x3#conv1:55x55x96nn.Conv2d(3,96,11,4,0),#pool1:27x27x96nn.MaxPool2d(3,2),nn.ReLU(),#conv2:27x27x256nn.Conv2d(96,256,5,1,2),#pool2:13x13x256nn.MaxPool2d(3,2),nn.ReLU(),#conv3:13x13x384nn.Conv2d(256,384,3,1,1),#conv4:13x13x384nn.Conv2d(384,384,3,1,1),#conv5:13x13x256nn.Conv2d(384,256,3,1,1),#pool3:6x6x256nn.MaxPool2d(3,2),nn.Flatten(),#9216=6x6x256nn.Linear(9216,4096),nn.Linear(4096,1000),nn.Linear(1000,10))def forward(self,x):x = self.model1(x)return xalexnet = AlexNet()
    
  3. ZFNet

    注意:计算输出图尺寸是下取整(输入尺寸-卷积核尺寸+2*padding)/stride + 1

    import torch
    from torch import nnclass ZFNet(nn.Module):def __init__(self):super(ZFNet,self).__init__()self.model1 = nn.Sequential(#input:224x224x3#conv1:110x110x96nn.Conv2d(3,96,7,2,1),#pool1:55x55x96nn.MaxPool2d(3,2),#conv2:26x26x256nn.Conv2d(96,256,5,2,0),#pool2:13x13x256nn.MaxPool2d(3,2),#conv3:13x13x384nn.Conv2d(256,384,3,1,1),#conv4:13x13x384nn.Conv2d(384,384,3,1,1),#conv5:13x13x256nn.Conv2d(384,256,3,1,1),#pool5:6x6x256nn.MaxPool2d(3,2),nn.Flatten(),#6*6*256nn.Linear(6*6*256,4096),nn.Linear(4096,4096),nn.Linear(4096,1000))def forward(self,x):x = self.model1(x)return xzfnet = ZFNet()
    
  4. VGGNet

    耗费最高的存储,最多的操作

    import torch
    from torch import nnclass VGG16Net(nn.Module):def __init__(self):super(VGG16Net,self).__init__()self.model1 = nn.Sequential(#input:224x224x3nn.Conv2d(3,64,3,1,1),nn.Conv2d(64,64,3,1,1),nn.MaxPool2d(2,2),nn.Conv2d(64,128,3,1,1),nn.Conv2d(128,128,3,1,1),nn.MaxPool2d(2,2),nn.Conv2d(128,256,3,1,1),nn.Conv2d(256,256,3,1,1),nn.Conv2d(256,256,3,1,1),nn.MaxPool2d(2,2),nn.Conv2d(256,512,3,1,1),nn.Conv2d(512, 512, 3, 1, 1),nn.Conv2d(512, 512, 3, 1, 1),nn.MaxPool2d(2,2),nn.Conv2d(512,512,3,1,1),nn.Conv2d(512, 512, 3, 1, 1),nn.Conv2d(512, 512, 3, 1, 1),nn.MaxPool2d(2,2),nn.Flatten(),nn.Linear(7*7*512,4096),nn.Linear(4096,4096),nn.Linear(4096,1000))def forward(self,x):x = self.model1(x)return xvgg16 = VGG16Net()
    
  5. GoogLeNet

    最高效

    efficient Inception module:设计一个良好的本地网络拓扑结构(网络中的网络)然后将这些模块堆叠在彼此之上

    没有全连接层

    对来自前一层的输入应用并行filter操作

    但是这样就会计算的很复杂,解决办法:采用1x1卷积来降低特征深度的“瓶颈”层

    四个并行分支:1x1 卷积、1x1→3x3 卷积、1x1→5x5 卷积、3x3 池化→1x1 卷积实现:

    class Inception(nn.Module):"""Inception模块:并行处理不同尺度的特征"""def __init__(self, in_channels, c1, c2, c3, c4):super(Inception, self).__init__()# 分支1:1x1卷积(降维或保持维度)self.branch1 = nn.Sequential(Conv2d(in_channels, c1, kernel_size=1),BatchNorm2d(c1),ReLU(inplace=True))# 分支2:1x1卷积(降维)-> 3x3卷积self.branch2 = nn.Sequential(Conv2d(in_channels, c2[0], kernel_size=1),BatchNorm2d(c2[0]),ReLU(inplace=True),Conv2d(c2[0], c2[1], kernel_size=3, padding=1),BatchNorm2d(c2[1]),ReLU(inplace=True))# 分支3:1x1卷积(降维)-> 5x5卷积self.branch3 = nn.Sequential(Conv2d(in_channels, c3[0], kernel_size=1),BatchNorm2d(c3[0]),ReLU(inplace=True),Conv2d(c3[0], c3[1], kernel_size=5, padding=2),BatchNorm2d(c3[1]),ReLU(inplace=True))# 分支4:3x3池化 -> 1x1卷积(降维)self.branch4 = nn.Sequential(MaxPool2d(kernel_size=3, stride=1, padding=1),  # 保持尺寸的池化Conv2d(in_channels, c4, kernel_size=1),BatchNorm2d(c4),ReLU(inplace=True))def forward(self, x):# 四个分支的输出在通道维度拼接b1 = self.branch1(x)b2 = self.branch2(x)b3 = self.branch3(x)b4 = self.branch4(x)return torch.cat([b1, b2, b3, b4], dim=1)  # dim=1表示通道维度拼接
    
  6. ResNet

    模型效率中等,准确度最高

    使用残差连接的非常深的网络(152层)

    在这里插入图片描述

    这是ResNet(残差网络)中最基础的 残差块(Residual Block) 结构示意图,用来解决深度神经网络训练时的梯度消失、模型难以收敛问题,核心是 “残差连接(跳跃连接)”设计。

    下面拆解每个部分:

    1. 基础流程(从下往上看)

      • 输入 X: 代表网络某一层的输入特征(比如是图像经过前面卷积后的特征图,包含空间维度和通道维度)。
      • 主路径(计算 F(X)): - 先过一个 3x3 conv(3×3 卷积层),接着 relu(ReLU 激活函数),再过第二个 3x3 conv。这一系列操作对输入 X 做特征变换,输出 F(X)F 表示“残差函数”,学习输入与输出的残差关系 )。
      • 残差连接(X 直接跳连): 输入 X 不经过主路径的卷积,直接“抄近道”加到主路径输出上(图里的 是逐元素相加,要求 XF(X) 维度匹配 )。
      • 前向传播:因为这个分支仅进行简单的恒等映射或少量维度调整操作,计算量小,传播速度更快,虽然X跳连和主路径并行启动计算,但是完成时间有差异,最终会在加法操作处等待最慢的分支完成后再继续传播。
      • 反向传播:在残差块反向传播过程中,来自后续层的梯度到达 (F(x) + x) 的加法操作位置时,会按照加法求导规则,同时分配到 “identity” 分支和 (F(x)) 分支。虽然 identity 分支的梯度计算简单,可能先传播到前面的层,但前面的层等待的是两个分支的梯度都传播过来后进行融合。只有当 (F(x)) 分支的梯度也传播过来后,将两个分支的梯度相加,得到总的梯度,才会用于对前面层的参数更新 。
      • 输出(F(X)+Xrelu): 相加后的结果 F(X)+X 再经过一个 relu,作为整个残差块的最终输出,传递给下一层。
    2. 核心设计意义

      残差连接 - 解决梯度消失:传统深层网络训练时,梯度回传易衰减。残差连接让梯度能“走捷径”直接反向传播,让深层网络更易训练。

      学习残差更高效:网络不直接学“从 X 到最终输出”的复杂映射,而是学“残差 F(X) = 最终输出 - X”。残差通常更简单,模型收敛更快、更稳定。

  7. 其他的一些CNN结构

    1. Network in Network (NiN)

      带有“微网络”的Mlpconv层,在每个卷积层内部计算局部图像块,更高层次的特征抽象

      微网络采用多层感知机(全连接层,即1x1卷积层)
      作为GoogLeNet和ResNet “瓶颈层”的前身

    2. Identity Mappings in Deep Residual Networks

    3. Wide Residual Networks

    4. Aggregated Residual Transformations for Deep Neural Networks (ResNeXt)

    5. Deep Networks with Stochastic Depth

    6. FractalNet: Ultra-Deep Neural Networks without Residuals
      采用分形结构设计

    7. Densely Connected Convolutional Networks
      DenseNet:通过特征拼接增强层间连接

    8. SqueezeNet: AlexNet-level Accuracy With 50x Fewer Parameters and <0.5Mb Model Size

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

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

相关文章

【具身智能】具身智能的革命——人形机器人如何重塑人类日常生活

还在为高昂的AI开发成本发愁?这本书教你如何在个人电脑上引爆DeepSeek的澎湃算力! 2025年被誉为具身智能的元年,人形机器人技术迅猛发展,将深刻改变人类生活方式。本文从具身智能的核心概念入手,探讨人形机器人的硬件架构、感知系统、运动控制和决策算法等技术基础。结合…

Jira Service Management企业服务管理:IT、HR、法务、财务等部门如何落地现代企业服务管理理念与实践

Jira Service Management 服务管理方法Jira Service Management 服务管理方法将开发、IT运营和业务团队整合至一个统一平台&#xff0c;以实现更高效的协作。任何团队都能够快速响应业务变化&#xff0c;为客户和员工提供卓越体验。Jira Service Management 提供直观、经济高效…

软件开发 - danger 与 dangerous、warn 与 warning

danger 与 dangerous 1、danger词性&#xff1a;n.含义&#xff1a;指可能造成伤害或损失的情况或事物# 例词in 【danger】&#xff08;处于危险中&#xff09; out of 【danger】&#xff08;脱离危险&#xff09;# 例句After the surgery, the doctor said the patient was o…

为何毫米波需要采用不同的DPD方法?如何量化其值?

摘要 在5G新无线电技术标准中&#xff0c;除了sub-6 GHz频率外&#xff0c;还利用毫米波(mmWave)频率来提高吞吐量。毫米波频率的使用为大幅提高数据吞吐量带来了独特的机会&#xff0c;同时也带来了新的实施挑战。本文探讨sub-6 GHz和毫米波基站无线电之间的架构差异&#xff…

【数据结构入门】栈和队列的OJ题

目录 1. 有效的括号 分析&#xff1a; 代码&#xff1a; 2. 用队列实现栈 分析&#xff1a; 代码&#xff1a; 3. 用栈实现队列 分析&#xff1a; 代码&#xff1a; 4. 设计循环队列 思路&#xff1a; 代码&#xff1a; 定义循环队列结构体&#xff1a; 初始化结…

#Datawhale AI夏令营#第三期全球AI攻防挑战赛(AIGC技术-图像方向)

本次题目来源于Datawhale AI夏令营第三期全球AI攻防挑战赛图像生成赛道。首先看一下赛题背景和要求。1.赛题相关大赛背景随着大模型&#xff08;Deepseek、GPT、LLaMA等&#xff09;的爆发式应用&#xff0c;AI技术已深度融入金融、医疗、智能终端语音交互场等核心领域&#xf…

Compose笔记(四十二)--RangeSlider

这一节主要了解一下Compose中的RangeSlider&#xff0c;在Jetpack Compose中&#xff0c;RangeSlider是Material3库提供的双滑块范围选择控件&#xff0c;用于在一个连续区间内选择最小值和最大值。它能直观地设置一个区间范围&#xff0c;广泛应用于筛选、过滤等场景,简单总结…

window10本地运行datax与datax-web

搭建 dataX 前置条件 JDK(1.8以上&#xff0c;推荐1.8)Python(2或3都可以)Apache Maven 3.x (Compile DataX) 下载 datax 编译好的包 https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.tar.gz 进入目录&#xff0c;使用 powershell 打开 执行解压命令…

PDF注释的加载和保存的实现

PDF注释功能文档 概述 本文档详细说明了PDF注释功能的实现&#xff0c;包括注释的加载和保存功能。该功能基于Android PDFBox库实现&#xff0c;支持Ink类型注释的读取和写入。 功能模块 1. 注释加载功能 (getAnnotation()) 功能描述 从PDF文件中加载已存在的注释&#xff0c;并…

Linux环境下实现简单TCP通信(c)

具体代码实现 server.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h>#define PORT 8080 #define BUFFER_SIZE 1024void handle_client(int client_s…

炫酷圆形按钮调色器

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>圆形按钮颜色控制器</title><style>bod…

Vue 3 的编译时优化如何改写 DOM 操作规则

在现代前端开发中&#xff0c;框架级优化正悄然改变我们处理性能瓶颈的方式。与手动优化策略不同&#xff0c;Vue 3 的编译器在构建阶段就完成了关键性能改造&#xff0c;为 DOM 操作效率带来质的飞跃。一、虚拟DOM的隐藏成本虚拟DOM&#xff08;Virtual DOM&#xff09;通过内…

Angular初学者入门第二课——.ts、.d.ts、.state.ts的区别(精品)

初次接触 Angular 实际项目时&#xff0c;发现里边有很多不同后缀的文件&#xff0c;虽然没深入研究过&#xff0c;但根据其他编程语言的经验猜测这应该是通过后缀名来区分文件的作用。后来有时间研究了一下具体的细节和不同点&#xff0c;就有了今天这篇文章&#xff0c;这些知…

进程状态+进程优先级+进程上下文切换解读

一、进程状态 什么是进程状态&#xff1f;进程状态指的是在操作系统中进程在生命周期中所处的不同阶段。进程状态有哪些呢&#xff1f;我们可以看到上述图片 进程状态分为&#xff1a;创建状态、就绪状态、运行状态、阻塞状态和终止状态所有的操作系统在实现进程状态变化的时候…

Android 原生与 Flutter 通信完整实现 (Kotlin 版)

1. 项目配置 pubspec.yaml 添加依赖 dependencies:flutter:sdk: flutterprovider: ^6.0.52. Flutter 端实现 状态管理类 // settings_provider.dart import package:flutter/foundation.dart;class SettingsProvider with ChangeNotifier {String _themeColor blue;bool _dark…

数字图像处理3

图像线性滤波——目的就是滤去噪声&#xff0c;但是边缘会模糊&#xff0c;整体也模糊线性&#xff1a;邻域平均法&#xff08;4邻域平均和8邻域平均&#xff09;用当前运算点所在邻域的平均值来代替该点的平均值im_for_read"D:\AAAproject\PYproject\EXPERuse\zaosheng.j…

Linux发行版分类与Centos替代品

让centos7气的不轻&#xff0c;这玩意儿太老了&#xff0c;什么都不好配置。 目录Linux 发行版的大致分类1. Red Hat 系列&#xff08;RPM 系&#xff09;2. Debian 系列&#xff08;DEB 系&#xff09;3. Arch 系列4. SUSE 系列CentOS 7 的替代品推荐AlmaLinux 和 Rocky Linux…

大语言模型提示工程与应用:大语言模型对抗性提示安全防御指南

对抗性提示工程 学习目标 理解大语言模型中对抗性提示的风险与防御机制&#xff0c;掌握提示注入、提示泄露和越狱攻击的检测方法&#xff0c;培养安全防护意识。 相关知识点 对抗性攻击类型防御技术 学习内容 1 对抗性攻击类型 1.1 提示注入 提示注入旨在通过使用巧妙…

避不开的数据拷贝(2)

接着上周未完的话题 避不开的数据拷贝。 既然处理器是通用机器&#xff0c;就没有专属数据&#xff0c;所以数据都要从别处调来&#xff0c;这就涉及到了数据搬运&#xff0c;就有了外设的概念。由于不同外设和处理器一起共享数据存储&#xff0c;时间会花在两方面&#xff1a…

娃哈哈经销商“大洗牌”:砍掉年销300万以下经销商

文 | 大力财经据第一财经报道&#xff0c;娃哈哈在宗馥莉“铁腕”策略推动下&#xff0c;正经历经销商体系的重大变革&#xff0c;陆续砍掉年销低于300万元的经销商&#xff0c;方式有时颇为激进&#xff0c;“一刀切”的做法引发诸多争议&#xff0c;部分经销商反馈存在款项未…