【动手学深度学习v2】第二章预备知识-2.1入门

2023-10-26

入门

深度学习领域方向
自然语言处理、计算机视觉、深度学习

具体领域
图片分类、物体检测与分割、样式迁移(为图片加滤镜)、人脸合成、文字生成图片、文字生成、无人驾驶

张量 

        表示一个多维矩阵,核心是一个数据容器,多数情况下包含数字,可以想象成一个数字的水桶。
        张量的每个值称为张量的元素,新的张量将存储在内存中,并且在计算时通常是基于CPU的。
        N维数组是机器学习和神经网络的主要数据结构。

张量维度 代表含义
0维张量 标量(数字)
1维张量 向量
2维张量 矩阵
3维张量 时间序列数据 股价 文本数据 单张彩色图片
4维张量 图像
5维张量 视频

        0-d(标量)一个类别
        1-d(向量)一个特征向量
        2-d(矩阵)一个样本-特征矩阵
        3-d(RGB图片)宽*高*通道[(width, height, channel) = 3D]
        4-d(一个RGB图片批量)批量大小*宽*高*通道[(batch_size, width, height, channel) = 4D]
        5-d(一个视频批量)批量大小*时间*宽*高*通道


创建数组需要的元素:

  1. 形状:例3*4的矩阵
  2. 每个元素的数据类型:例如32位浮点数
  3. 每个元素的值:例如全是0

 例子:

访问元素

        

        访问第二行第三列元素

                

        访问第二行所有元素

         访问第二列所有元素(表示方法有误,应改为 一列:[:,1])

        1:3 表示访问的是第二行到第三行,实质上为[1,3)的一个区间,不包括第四行

         1: 表示从第一列开始的所有列跳着访问, ::3 表示从第0行到第四行::2 表示从第0列到第三列

常见构造Tensor(张量)的方法

        x=torch.arange(start=0,step=1,*,out=None,dtype=None, layout=torch.strided, device=None, requires_grad=False) --> Tensor 

        作用:表示返回大小为[(end-start)/step]的一维张量,值介于[start,end)区间,以step为步长等间隔取值。

        参数意义:
                start:起始值,默认值为0
                end:结束值
                step:步长,默认值为1
                out:输出张量
                dtype:期待返回的张量,如果是None,使用全局默认值,如果未给出dtype,则从其他输入参数推断类型,如果 start、end、step 任意一个数是浮点数,则dtype推断为默认值

例:

         本章用到的一些方法如下:

x.shape():可以查看已创建的张量x的形状。
x.numel():可以查看张量的大小。
x.reshape():可以改变张量的形状而不改变元素的量以及元素的值,并且张量的大小也没有改变。
torch.zeros():创建一个全0的张量(元素都为0)。
torch.ones():创建一个全1的张量。
torch.device():代表torch.Tensor分配到对象存储的设备,包含一个设备类型和可选设备的序号,没有序号默认为当前设备。

torch.randn():表示创建一个元素都从均值为0,标准差为1的正态分布中随机采样。

torch.tensor(data, *, dtype=None, device=None, requires_grad=False, pin_memory=False) 构造一个包含单一数据类型元素的多维矩阵,通过提供列表为张量的每个元素赋予确定的值。
data:张量的初始数据。可以是列表、元祖、numpy和数组、标量等类型。

torch.exp(input,*,out=None) --> Tensor:对input逐元素进行以自然数e为底指数运算。
 

math.log(x[,base]) :该操作是导入math,然后对二维张量(0,ln2)进行逐元素的以自然数e为底数的求幂运算。
        x:输入的数字,如果不是数字返回TypeError,如果是0或负数,返回ValueError。
        base:可选,log函数的底数,默认是e。

torch.cat(tensors,dim=0,*,out=None)-->Tensor:将多个tensor类型张量进行连接。
        tensors:tensor元祖或者tensor列表。
        dim:可选参数,代表张量连接的维数,若tensor是二维的,dim=0表示在行上连接,dim=1指在列上连接。

torch.reshape(input,shape):返回具有相同数据和元素的张量,且具有指定的形状。
        input(Tensor) 要被重塑的张量
        shape(python元组:int) 新的形状

torch.zeros_like(tensor):生成和括号内张量维度一致的全是零的块。

        torch.device()的使用方法:

        torch.randn()的使用方法:

         torch.tensor的使用方法:

        torch.exp()的使用方法:

这里可以将这个函数泛化为下面这个数学式子

        torch.zeros_like()的使用方法:

广播机制

  1. 通过适当复制元素来扩展一个或两个数组,以便在转换后两个张量具有相同的形状。
  2. 对生成的数组执行按元素操作。

总结:通过复制元素使两个张量形状相同后再按元素进行计算。

注:两个张量进行广播机制需满足以下条件:

  • 两个张量都至少有一个维度
  • 两个张量对应的每一个维度都要能够匹配的上(需满足以下三个条件):
    • 这两个维度大小相等
    • 某个维度,一个张量有,一个张量没有。
    • 某个维度,一个张量有,一个张量也有但是大小是1。

使用广播机制的例子:

         解释:x为1行2列的矩阵,y为3行1列的矩阵,二者要想实现相加,x需要将第一行的元素复制到第二行和第三行,y需要将第一列的元素复制到第二列,这样二者形状相同,可以完成按元素相加操作。

索引和切片

        张量的元素可以通过索引访问,第一个元素的索引是0,最后一个元素的索引是-1。

例:

        X[-1]表示选择X张量最后一个元素,X[1:3]表示取到X张量第二个到第三个元素。

        也可以指定索引将元素写入矩阵。
        X[1,2] = 9 表示将原第二行第三列的元素改为9。

        同时为多个元素赋予相同的值,可以将全部元素索引后赋值。
        

        原有X张量中第一行与第二行的元素:

        重新赋值后,X张量中第一行与第二行元素被改为了12。
        X[0:2,:] = 12 中, 表示索引全部元素。

节省内存

        运行一些操作可能会为新结果分配内存。

        id(Y)操作可以提供内存引用对象的确切地址,执行了Y = Y + X 后,Y的内存发生改变,执行id(Y) == before 结果为False,可以看出其内存发生改变。

        日常工作中,我们不想总是进行不必要的分配内存,我们希望原地执行这些更新。

        如果不原地更新,其他引用仍然会指向旧的内存位置,某些代码无意中会引用旧的参数,这是不可取的。

        可以采用切片法将操作的结果分配给先前分配的数组。如Y[:] = <expression>

        可以使用X[:]= X + Y或X += Y减少内存操作的开销。


转换为其他Python对象

        深度学习中定义的张量(Tensor)与Python中NumPy张量(ndarray)的相互转换很容易,并且torch张量和numpy数组将共享底层内存。

        将大小为1的张量转换为python标量,可以调用item函数或python内置函数。

教材地址:《动手学深度学习》 — 动手学深度学习 2.0.0 documentation

B站教程: 02 深度学习介绍【动手学深度学习v2】_哔哩哔哩_bilibili

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

【动手学深度学习v2】第二章预备知识-2.1入门 的相关文章

随机推荐

  • C++中的各种进制转换函数汇总

    1 在C中 按指定进制格式输出如下 include
  • shell脚本——shell函数详解

    shell脚本 shell函数详解 一 shell函数 1 shell函数的概念 2 shell函数的格式 1 函数的定义 2 调用函数的方法 3 函数返回值 4 函数传参 5 函数变量的作用范围 6 递归 函数调用自己本身的函数 1 阶乘
  • 【MFC】列表视图控件——List Control

    01 文章目录 文章目录 01 文章目录 02 List Control介绍 03 List Control的通知消息 04 List Control的相关结构体 05 List Control的创建 06 CListCtrl类的主要成员函
  • 0-1背包问题

    题目描述 有n件物品和一个容量为v的背包 第i件物品的重量是w i 价值是p i 求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量 且价值和最大 算法分析 动态规划的题目一直是比较有难度 这种题目炸看往往连个思路都没有 往往需要数
  • expect 使用实例

    自动登录一台 服务器 代码 root localhost D151SP160 cat test1 exp bin expect set timeout 2 set user name lindex argv 0 set mypassword
  • Delphi转Java开发的辛酸

    工作已经快两年了 回想起以前的选择 真是让人不是滋味啊 通过近段时间的仔细思考和对自己以后职业规划 现在越来越想往JAVAWEB方向发展 想了许久 我还是决定辞职 放弃现在这份安逸的工作 易然的选择做JAVA这边道路 今天刚刚出来面试 就让
  • 数据结构-哈希-哈希表实现

    哈希表实现 一 哈希概念 哈希概念 常见哈希函数 哈希冲突 哈希冲突的解决 二 闭散列实现 闭散列的结构 插入 查找 删除 闭散列总结 三 哈希桶实现 哈希桶的结构 插入 查找 删除 析构 拷贝构造 赋值运算符重载 四 哈希表总结 开散列与
  • 安装windows版caffe

    MATLAB操作caffe框架 安装之前先谈谈我的电脑硬件配置 Qudra K600 的GPU 计算能力是3 0 你在安装之前也要搞清楚自己的GPU显卡是什么 看看到底支持不支持CUDA 如果支持 要查查计算能力是多少 后面配置参数要用到
  • windows环境下查看Python的安装路径

    1 windows r 进入cmd命令 2 查看python安装路径 where python
  • 常见的几种Sort排序算法

    几种常见的Sort排序算法 1 排序的基本概念 有n个记录的序列 其相应关键字的序列是 相应的下表序列是 通过排序 要求找出当前下标序列的一种排列 使得相应的关键字满足如下的非递减 或非递增 关系 这样就得到一个按关键字有序的记录序列 该文
  • ant design pro 跳转新页面 修改功能

    ant design pro 修改功能跳转新页面 背景 例子 页面跳转 背景 在官方提供的例子中 是以弹窗的形式做的修改和新增 在项目中如果遇到 采集项数较多 会在修改页面添加别的功能的情况下 弹窗满足不了此需求了 例子 页面跳转 先说修改
  • 计算机网络校园网网络设计报告,计算机网络课程设计报告-校园网的组建和应用...

    计算机网络课程设计报告 校园网的组建和应用 北 京 邮 电 大 学校园网的组建和应用 计算机网络课程设计指导老师 吴建伟老师刘亦桐老师小组成员 姓名 班级 学号王 超 06121 060648曹 振 06121 060643郭 嵩 0612
  • 我的创作纪念日

    机缘 咱记性不好 技术也差 实验过程中总是遇到奇奇怪怪的问题 有些问题找了好久也没找到完全适合自己情况的解决方案 很多情况下需要结合多篇文章进行总结 为了下次遇到类似问题能够快速解决 同时也为遇到同样问题的小伙伴们能够快速找到详细的问题解决
  • 基于HAL库的stm32f103c8t6的快速开发笔记(简易版)—— 5、STM32的PWM输出(附舵机控制)

    1 概念了解 首先了解到 PWM生成是在通用定时器的基础上配置的 每个通用定时器都有多路通道输出PWM信号 这里以TIM4 定时器4 为例 在图形配置面板找到TIM4的通道一作为PWM输出管脚 其管脚为PB6 打开左侧定时器配置面板 可以看
  • HBase工作机制

    1 图示 2 组件说明 Client hbase客户端 1 包含访问hbase的接口 比如 linux shell java api 2 除此之外 它会维护缓存来加速访问hbase的速度 比如region的位置信息 Zookeeper 1
  • 【MySQL】基础SQL语句——库的操作

    文章目录 一 创建数据库 1 1 基础语句 1 2 字符集和校验规则 1 3 校验规则对读取数据的影响 二 查看数据库 三 修改数据库 四 删除数据库及备份 4 1 删除 4 2 备份和还原 结束语 一 创建数据库 1 1 基础语句 最简洁
  • 微信小程序期末大作业 点餐小程序

    点餐小程序 小程序如图所示 下载链接在文末 点我下载资源 https download csdn net download weixin 43474701 58000564
  • xshell连接ubuntu失败排错指南

    本人在学习linux系统中出现了一些远程连接失败的问题 以此笔记记录下排错过程 注意 VMware桥接模式需要让虚拟机的ip和物理机的ip在同一网段 因此需要手动配置linux系统网卡 NAT模式虚拟机ip不需要和物理机ip在同一个网段 但
  • Python Tkinter详解 (二)Label标签的使用

    一个简单到不能再简单的标签 import tkinter as tk window tk Tk window title Label的使用 window geometry 400x400 label tk Label window text
  • 【动手学深度学习v2】第二章预备知识-2.1入门

    入门 深度学习领域方向自然语言处理 计算机视觉 深度学习 具体领域 图片分类 物体检测与分割 样式迁移 为图片加滤镜 人脸合成 文字生成图片 文字生成 无人驾驶 张量 表示一个多维矩阵 核心是一个数据容器 多数情况下包含数字 可以想象成一个