李沐大神动手学深度学习——学习笔记(不定期连载)

2023-11-04

最近在看李沐大佬的动手学深度学习,讲的非常基础,从很基础的开始讲,很易懂,这里记一些在之前没碰到过的在他代码里出现过的写法,and一些问题,当做学习记录,不定期连载更新。

前12集

1. torch的tensor高级索引用法

  如果想要同时访问一个n维的tensor里的多个数据,可以像下面这样做:
在这里插入图片描述
  第三行索引就是高级用法,像是一个二维数组一样。y_hat是一个二维tensor,第三行的索引的第一个数组表示第一个维度的索引,同理,第二个数组就表示第二个维度的索引。如果y_hat是三维数组,同理,可以这样做:
在这里插入图片描述
  可以看到,y-hat是一个三维数组,索引时第一个数组表示第一个维度,第二个数组表示第二个维度,以此类推。

2. pytorch网络模型自定义初始化

  设计好了一个pytorch网络模型,需要初始化它的权重,如果想对其中不同的类型的层统一用不同的初始化方法,就可以自定义一个初始化方法对不同层做不同的初始化,例如对线性层用正态分布初始化,对卷积层做方差不同的正态分布初始化等等。

import torch.nn as nn
net = nn.Sequential(nn.Flatten(),
                    nn.Linear(784, 10),
                    nn.Linear(10, 100),
                    nn.Linear(100, 10),
                    nn.Conv2d(3, 64, 3, 1))

def init_weights(m):
    type_m = type(m)
    if type_m == nn.Linear:
        nn.init.normal_(m.weight, std=0.01)
    elif type_m == nn.Conv2d:
        nn.init.normal_(m.weight, mean=1, std = 0.1)
    else:
        nn.init.normal_(m.weight, mean=0, std = 2)

net.apply(init_weights)
# 输出第二层线性层的参数
print(net[1].weight)	
Parameter containing:
tensor([[ 0.0144, -0.0138,  0.0018,  ..., -0.0047, -0.0086,  0.0111],
        [ 0.0057, -0.0093,  0.0175,  ...,  0.0025,  0.0081, -0.0197],
        [ 0.0030, -0.0007, -0.0065,  ..., -0.0049, -0.0170,  0.0015],
        ...,
        [ 0.0063,  0.0019, -0.0048,  ..., -0.0040, -0.0133, -0.0035],
        [ 0.0085, -0.0043,  0.0065,  ..., -0.0035,  0.0087, -0.0062],
        [-0.0205, -0.0106,  0.0139,  ..., -0.0090,  0.0171,  0.0072]],
       requires_grad=True)

3. pytorch的Dataloader的num_workers是否并行

  这个问题当初也困扰了我一段时间,现在可以肯定的是num_workers个Dataloader是并行的,多个worker也就是实现了“预取”的功能,例如设置其为4,那么pytorch就会开4个dataloader进程,并行的读4个batch_size的数据放到内存中,如果GPU够快,那它算得肯定比workers读的要快(GPU带宽等也要够快),所以在空间足够的情况下,num_workers越多肯定越好。可以在任务管理器中看到开启的多个python进程,也就是dataloader。

4. 关于数据集的概念

  • 训练数据集:用来训练模型的参数
  • 验证数据集:用来选择模型的超参数
  • 在非大数据集上通常用k折交叉验证
  • k折交叉验证是指将数据集划分为k个部分,每次拿其中一部分作为验证集,其余作为训练集,重复k次,通常选择k=5或k=10.

————————————12.29更新——————————————————

13集——丢弃法

一句话总结,丢弃法的丢弃不是字面上的把神经元直接去掉,而是将某些神经元置零。

  一个好的模型需要对输入数据的扰动鲁棒——在层之间添加噪音

-通常作用在隐藏全连接层输出上。
-从效果上来看,类似于一个正则项,只在训练中用,推理时直接返回输入。
-将一些输出项随机置零来控制模型复杂度,丢弃概率是超参数。
-训练时每个batch都会丢一次
-卷积层不会用到丢弃法

14集——数值稳定性,模型初始化,激活函数

数值稳定性

  • 梯度爆炸:对多层的梯度累乘,可能导致梯度最后会很大,超出值域。
  • 梯度消失:同理,如果梯度值很小,经过多层的累乘之后,梯度会变得很小,接近0. 常见于sigmoid激活函数(不过这个函数现在都很少用了)
    • 梯度爆炸的问题:
      • 值超出值域
      • 对学习率敏感,学习率大-》大参数值-》更大梯度
      • 学习率小-》训练无进展
    • 梯度消失的问题:
      • 梯度值变为0
      • 训练无进展,
      • 网络较深时,仅顶层网络较好,底部层很差。

模型初始化

  • 让训练更稳定——让梯度值在合理范围里

    • 将乘法变成加法,如ResNet,LSTM
    • 合理的权重初始化和激活函数
  • 让每层的方差是一个常数

  • 权重初始化

    • 在合理值区间里随机初始参数,使得其能更快的到最优解附近
    • 对小一点的网络可以用正态分布来初始,
  • Xavier初始:利用每层的大小来做正态分布或者均匀分布的参数,来初始化某一层,具体略

QA

输出或者参数不是符合正态分布才有利于学习,而是要在一个范围内就可以,只是符合正态分布的话方便计算。

-——待续。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

李沐大神动手学深度学习——学习笔记(不定期连载) 的相关文章

  • Python中Decimal类型的澄清

    每个人都知道 或者至少 每个程序员都应该知道 http docs oracle com cd E19957 01 806 3568 ncg goldberg html 即使用float类型可能会导致精度错误 然而 在某些情况下 精确的解决方
  • Python Popen 与 psexec 挂起 - 不良结果

    我对 subprocess Popen 和我认为是管道的问题有疑问 我有以下代码块 从 cli 运行时 100 都不会出现问题 p subprocess Popen psexec serverName get cmd c ver echo
  • Python - 将宽字符字符串从二进制文件转换为 Python unicode 字符串

    这是漫长的一天 我有点困惑 我正在读取一个包含大量宽字符字符串的二进制文件 我想将它们转储为 Python unicode 字符串 为了解压非字符串数据 我使用 struct 模块 但我不知道如何对字符串执行相同的操作 例如 阅读 系列 一
  • 使用 python 进行串行数据记录

    Intro 我需要编写一个小程序来实时读取串行数据并将其写入文本文件 我在读取数据方面取得了一些进展 但尚未成功地将这些信息存储在新文件中 这是我的代码 from future import print function import se
  • pydev 调试器:严重警告:此版本的 python 似乎编译不正确(内部生成的文件名不是绝对的)[重复]

    这个问题在这里已经有答案了 通过运行 from sklearn datasets import fetch california housing import pandas as pd pd set option precision 4 m
  • 从 ffmpeg 获取实时输出以在进度条中使用(PyQt4,stdout)

    我已经查看了很多问题 但仍然无法完全弄清楚 我正在使用 PyQt 并且希望能够运行ffmpeg i file mp4 file avi并获取流式输出 以便我可以创建进度条 我看过这些问题 ffmpeg可以显示进度条吗 https stack
  • 如何使用 imaplib 获取“消息 ID”

    我尝试获取一个在操作期间不会更改的唯一 ID 我觉得UID不好 所以我认为 Message ID 是正确的 但我不知道如何获取它 我只知道 imap fetch uid XXXX 有人有解决方案吗 来自 IMAP 文档本身 IMAP4消息号
  • 将数据帧行转换为字典

    我有像下面的示例数据这样的数据帧 我正在尝试将数据帧中的一行转换为类似于下面所需输出的字典 但是当我使用 to dict 时 我得到了索引和列值 有谁知道如何将行转换为像所需输出那样的字典 任何提示都非常感激 Sample data pri
  • if 语句未命中中的 continue 断点

    在下面的代码中 两者a and b是生成器函数的输出 并且可以评估为None或者有一个值 def testBehaviour self a None b 5 while True if not a or not b continue pri
  • 从 python 发起 SSH 隧道时出现问题

    目标是在卫星服务器和集中式注册数据库之间建立 n 个 ssh 隧道 我已经在我的服务器之间设置了公钥身份验证 因此它们只需直接登录而无需密码提示 怎么办 我试过帕拉米科 它看起来不错 但仅仅建立一个基本的隧道就变得相当复杂 尽管代码示例将受
  • 如何从Python中的字符串中提取变量名称和值

    我有一根绳子 data var1 id 12345 name John White python中有没有办法将var1提取为python变量 更具体地说 我对字典变量感兴趣 这样我就可以获得变量的值 id和name python 这是由提供
  • 首先对列表中最长的项目进行排序

    我正在使用 lambda 来修改排序的行为 sorted list key lambda item item lower len item 对包含元素的列表进行排序A1 A2 A3 A B1 B2 B3 B 结果是A A1 A2 A3 B
  • 将 2D NumPy 数组按元素相乘并求和

    我想知道是否有一种更快的方法 专用 NumPy 函数来执行 2D NumPy 数组的元素乘法 然后对所有元素求和 我目前使用np sum np multiply A B 其中 A B 是相同维度的 NumPy 数组m x n 您可以使用np
  • 在 Pandas 中使用正则表达式的多种模式

    我是Python编程的初学者 我正在探索正则表达式 我正在尝试从 描述 列中提取一个单词 数据库名称 我无法给出多个正则表达式模式 请参阅下面的描述和代码 描述 Summary AD1 Low free DATA space in data
  • python Soap zeep模块获取结果

    我从 SOAP API 得到如下结果 client zeep Client wsdl self wsdl transport transport auth header lb E authenticate self login res cl
  • 使用 NumPy 将非均匀数据从文件读取到数组中

    假设我有一个如下所示的文本文件 33 346 1223 10 23 11 23 12 23 13 23 14 23 15 23 16 24 10 24 11 24 12 24 13 24 14 24 15 24 16 25 14 25 15
  • 如何在 OSX 上安装 numpy 和 scipy?

    我是 Mac 新手 请耐心等待 我现在使用的是雪豹 10 6 4 我想安装numpy和scipy 所以我从他们的官方网站下载了python2 6 numpy和scipy dmg文件 但是 我在导入 numpy 时遇到问题 Library F
  • 无法在前端使用 JavaScript Fetch API 将文件上传到 FastAPI 后端

    我正在尝试弄清楚如何将图像发送到我的 API 并验证生成的token那是在header的请求 到目前为止 这就是我所处的位置 app post endreProfilbilde async def endreProfilbilde requ
  • 字典和数组作为类变量与实例变量

    这是赚取积分的简单方法 请解释以下内容 class C a b 0 c def init self self x def d self k v self x k v self a k v self b v self c append v d
  • 迭代 pandas 数据框的最快方法?

    如何运行数据框并仅返回满足特定条件的行 必须在之前的行和列上测试此条件 例如 1 2 3 4 1 1 1999 4 2 4 5 1 2 1999 5 2 3 3 1 3 1999 5 2 3 8 1 4 1999 6 4 2 6 1 5 1

随机推荐

  • VS:让程序运行完后不直接关闭

    Issue 控制台一闪而过 看不到输出结果 如何保持控制台窗口 让程序运行完后不直接关闭 Solve 1 推荐 建议设置项目属性 1 右键项目 gt gt 属性 Properties 打开项目的属性页 2 项目的属性页下 找到 配置属性 C
  • SQL语句优化问题

    有时返回数据时 需要有三张或以上的表需要查询 一张表的数据往往需要连接多张 效率非常的差 SELECT user id user uuid user user name AS username user login name name us
  • 测试项目:车牌检测,行人检测,红绿灯检测,人流检测,目标识别

    本项目为2020年中国软件杯 组第一批赛题 基于计算机视觉的交通场景智能应用 项目用python实现 主要使用YOLO模型实现道路目标如人 车 交通灯等物体的识别 使用开源的 中文车牌识别HyperLPR 项目实现车牌识别功能 github
  • OpenWRT UCI介绍及相关处理库

    OpenWRT UCI介绍及相关处理库 文章目录 OpenWRT UCI介绍及相关处理库 1 前言 2 概念 3 UCI配置文件 4 文件语法 5 命令行实用工具 5 1 用法 5 2 示例 导出整个配置 查看所有配置项的值 查看特定选项的
  • [Dotween] 介绍与使用,和坑

    Dotween 是在unity里实现各种动画效果 比如 位移 transform DoMove 旋转 transform DoRotation 缩放 transform DoScale 颜色改变 image DoColor 延时调用 Dov
  • QT中的QVariant类型-万能变量

    转自 https blog csdn net xiaopei yan article details 81410092 前言 QVariant这个类很神奇 或者说方便 很多时候 需要几种不同的数据类型需要传递 如果用结构体 又不大方便 容器
  • Vue前端自动化测试-Vue Test Utils

    Vue Test Utils简介 vue test utils是vue官方的单元测试框架 提供了一系列非常方便的工具 使我们更轻松地为vue构建的应用来编写单元测试 主流的JavaScript测试运行器有很多 但vue test utils
  • 中国人民大学和加拿大女王大学,学历的提升也是竞争力的提升

    如果想要读研提升自己在工作岗位上的竞争力和专业能力 报考在职研究生是一共非常不错的方式 在职研究生顾名思义就说国家计划内 以在职人员的身份 部分时间在职工作 部分时间在校学习的一种研究生类型 也是我国高等教育的重要组成部分 中国人民大学和加
  • 西洋经济史的趣味-赖建诚

    1990年代 台湾清华大学西洋经济史的老师 将的都是一些趣味性和严肃性的东西 明白一些经济学常识 1 经济学史到1993年 两个人获得诺贝尔经济学奖之后 才收到重视 2 这本书讲到了经济学史的重要性 3 火车轨道为什么是四尺八寸 因为这是国
  • web前端笔记

    web前端笔记 css选择器 标记选择器 如 div p 标签p id选择器 id class选择器 类名 通配符选择器 css文件外部链接 属性与属性之间用空格隔开 不是用逗号 HTML标签 双标签 p p 段落标签 标题标签 p h1
  • 微信开发 接口配置失败的坑新手注意

    申请的SAE 用来微信开发 填写完URL TOKEN后总会莫名其妙的爆出配置失败 如下的错误 出现这种原因有如下的原因 看你中招了没 1 最基本的检查这两个地方是否正确 怎么检查 不用我说吧 2 当发现上面的填写没问题 那就看这个你中招没
  • pandoc(markdown、latex、pdf、word相互转换的命令行工具)

    Markdown Pandoc 打通写作界的任督二脉 duqi yc的专栏 博客频道 CSDN NET http blog csdn net duqi yc article details 8974041 中文markdown转pdf Fl
  • java堆年轻代_Java堆(年轻代 -- 老年代 -- 永久代)

    JVM所管理的内存空间中 Java堆是最大的一块 主要用于存放各类实例对象 如下图 JVM中的堆被划分为两个不同区域 新生代Young 老年代Old 新生代又划分为Eden 伊甸 标志新生 Survivor0 s0 Survivor s1
  • 使用IDEA打包springcloud项目的jar包并发布至linux服务器

    前言 首先保证自己的springcloud项目在本地跑的通的 使用springcloud有可能缺少依赖的jar包 报 Java 程序包xxxx不存在 出现这种情况 因为配置Java的程序包这块出现了错误 同时可能你还没有设置让IDEA自动加
  • 【2023知乎爬虫】批量获取问题的全部回答

    一 需求 爬取任意问题下的所有回答 如下图 1 根据问题 批量获取问题下的所有回答 与对应问题的关系到answer csv文件 2 保存当前问题基本信息到quesiton info csv文件 二 展示爬取结果 三 讲解步骤 3 1 新建项
  • 《动手学深度学习 Pytorch版》 4.4 模型选择、欠拟合和过拟合

    4 4 1 训练误差和泛化误差 整节理论 详见书本 4 4 2 模型选择 整节理论 详见书本 4 4 3 欠拟合还是过拟合 整节理论 详见书本 4 4 4 多项回归 import math import numpy as np import
  • 表格嵌套表格数据

    表格嵌套表格数据 通常我们做联表查询 为了接收返回的数据我们往往需要书写一个类 这个类包含着接收两张表的数据字段 如下图 这是一种写法 但是如果面对一张表里的字段太多 那就得一个个去将这些字段写进类里 这种写法还可能让你的代码看上去比较繁杂
  • 手把手教你搭建ROS阿克曼转向小车之(霍尔编码器数据读取与速度计算)

    上一篇文章已经介绍了如何驱动直流有刷电机转动起来 这篇文章讲解如何获取编码器的计数值 并且计算出速度信息 在实际的运行中 随着机器的重量不一样 电机受到的阻力就会不一样 给定同样的PWM在不同载重的情况下速度会不一样 要解决这个问题就需要引
  • RFID自助借还书机给图书馆带来的优势

    自助借还书机系统是智慧图书馆的主要组成部分 自助借还书机系统主要通过对粘贴有电子标签或条形码的图书进行扫描识别 将其信息反馈到自助借还书机系统当中进行处理 自动完成借阅与归还 自助借还书机的操作页面简洁 用户操作快捷方便 而且其硬件设备简洁
  • 李沐大神动手学深度学习——学习笔记(不定期连载)

    最近在看李沐大佬的动手学深度学习 讲的非常基础 从很基础的开始讲 很易懂 这里记一些在之前没碰到过的在他代码里出现过的写法 and一些问题 当做学习记录 不定期连载更新 简单的目录 前12集 1 torch的tensor高级索引用法 2 p