当前位置: 首页 > news >正文

(14)学习笔记:动手深度学习(Pytorch神经网络基础)

文章目录

  • 神经网络的层与块
    • 块的基本概念
      • 自定义块
  • 问答

神经网络的层与块

块的基本概念

   以多层感知机为例, 整个模型接受原始输入(特征),生成输出(预测), 并包含一些参数(所有组成层的参数集合)。
    同样,每个单独的层接收输入(由前一层提供), 生成输出(到下一层的输入),并且具有一组可调参数, 这些参数根据从下一层反向传播的信号进行更新。
可以描述单个层、由多个层组成的组件或者模型本身。
在这里插入图片描述
在pytorch中,块由class表示。它的任何子类都必须定义一个将其输入转换为输出的前向传播函数, 并且必须存储任何必需的参数。 注意,有些块不需要任何参数。 最后,为了计算梯度,块必须具有反向传播函数。

import torch
from torch import nn
from torch.nn import functional as F
net = nn.Sequential(nn.Linear(20, 256), nn.ReLU(), nn.Linear(256, 10))X = torch.rand(2, 20)
print(X)
print(net(X))

自定义块

  1. 将输入数据作为其前向传播函数的参数。
  2. 通过前向传播函数来生成输出。请注意,输出的形状可能与输入的形状不同。例如,我们上面模型中的第一个全连接的层接收一个20维的输入,但是返回一个维度为256的输出。
  3. 计算其输出关于输入的梯度,可通过其反向传播函数进行访问。通常这是自动发生的。
  4. 存储和访问前向传播计算所需的参数。
  5. 根据需要初始化模型参数。
class MLP(nn.Module):# 用模型参数声明层。这里,我们声明两个全连接的层def __init__(self):# 调用`MLP`的父类`Module`的构造函数来执行必要的初始化。# 这样,在类实例化时也可以指定其他函数参数,例如模型参数`params`(稍后将介绍)super().__init__()self.hidden = nn.Linear(20, 256)  # 隐藏层self.out = nn.Linear(256, 10)  # 输出层# 定义模型的前向传播,即如何根据输入`X`返回所需的模型输出def forward(self, X):# 注意,这里我们使用ReLU的函数版本,其在nn.functional模块中定义。return self.out(F.relu(self.hidden(X)))

问答

在将类别变量转换成伪变量的时候内存炸掉了怎么办?
1.转换为系数矩阵
2.考虑其它特征表达的方法(自然语言处理)

实例化后,不用调用实例方法,就可以net(X),是因为父类实现了魔法方法吗?
可以使用net.forward(X),这里在module里面做了映射

我们创建好网络之后torch是按什么规则给参数初始化的?
采用kaiming初始化

跑项目的时候显存不够用怎么办,如果把batch_size调小,显存够用了但是cuda占用一直很低怎么办?
调小bach size后模型的性能会下降,比较好的方法是把模型变小

—般使用gpu训练,data在哪一步to_gpu比较好?
在最后to_gpu,做前向和反向运算

自定义的block被放在同一个Sequential内的不同层,但不想共享参数,该怎么做呢?
每次创建一个实例都会有不同的参数,只有将同一个实例放在不同层才会共享参数

相关文章:

  • Capto2024专为Mac电脑设计的屏幕录制和视频编辑软件
  • S4.2.4.7 Start of Data Stream Ordered Set (SDS)
  • 【计算机网络 - 自顶向下方法】第一章习题答案
  • Excel自学三部曲_Part3:Excel工作场景实战(四)
  • 阅读论文:Deep Learning for Sensor-based Activity Recognition: A Survey
  • 代码随想录Day42-图论:力扣第417m、841m、463e题
  • 【网络协议】聊聊DNS协议如何域名解析和负载均衡
  • 中期科技:智慧公厕打造智能化城市设施,提升公共厕所管理与服务体验
  • Mybatis技术原理详解之:使用Mapper形式和注解驱动的复杂映射开发
  • 数据结构(超详细讲解!!)第二十一节 特殊矩阵的压缩存储
  • 【lvgl】linux开发板搭建环境
  • 类和对象解析
  • Java21-虚拟线程小试牛刀-meethigher
  • Python---字符串中的查找方法--index()--括号里是要获取的字符串
  • Qt5 安装 phonon
  • ES6指北【2】—— 箭头函数
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • CentOS从零开始部署Nodejs项目
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Hibernate【inverse和cascade属性】知识要点
  • JAVA SE 6 GC调优笔记
  • Java深入 - 深入理解Java集合
  • js写一个简单的选项卡
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Python学习笔记 字符串拼接
  • rc-form之最单纯情况
  • react-native 安卓真机环境搭建
  • Vue官网教程学习过程中值得记录的一些事情
  • Yii源码解读-服务定位器(Service Locator)
  • 反思总结然后整装待发
  • 工程优化暨babel升级小记
  • 关于for循环的简单归纳
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 驱动程序原理
  • 什么是Javascript函数节流?
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 我看到的前端
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  •  一套莫尔斯电报听写、翻译系统
  • 以太坊客户端Geth命令参数详解
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 原生js练习题---第五课
  • 白色的风信子
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 移动端高清、多屏适配方案
  • ​configparser --- 配置文件解析器​
  • ​io --- 处理流的核心工具​
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (12)Hive调优——count distinct去重优化
  • (2015)JS ES6 必知的十个 特性
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (四)TensorRT | 基于 GPU 端的 Python 推理