【pytorch】pytorch学习笔记

news2024/9/24 11:23:40

(实践)p5:线性回归问题中损失函数为什么要使用均方误差?

均方误差:即误差的平方和的平均数。

p8:1.pytorch不是一个完备的语言库,而是一个对于数据的gpu加速库,所以其没有对string的内键支持,即pytorch的基本类型中不包含string。

2.pytorch表示string的方法:

(1)one hot encoding

问题:1)两个单词之间的相关性并没有在one hot编码中得到体现;

  2)当编码结果为上百维时,是一个稀疏矩阵。

(2)nlp中的embedding layer:为解决1)两个单词之间的相关性并没有在one hot编码中得到体现

有:word2vec,glove。

综上,pytorch中string是没有内键支持的,要支持的话我们必须使用编码的方式。

3.数据类型:

cpu上:torch.FloatTensor    torch.IntTensor     torch.ByteTnesor

gpu上:torch.cuda.FloatTensor    torch.cuda.IntTensor     torch.cuda.ByteTnesor

所以,数据一样,放置的位置不一样,类型也不一样。

torch.randn(2,3):随机创建一个两行三列的tensor。

tensor.type():返回tensor的类型。

isinstance(tensor,tensor的类型a):用来检验tensor类型的合法化,即tensor是否是a类型的。

data=data.cuda():把cpu上的数据data搬运到gpu上。

torch.tensor(1.):生成标量,维度为0。该类型(即标量)常用于loss的结果(即:均方误差的结果)。

torch.shape:是实例的一个成员,所以没有括号。

torch.size():是实例的一个成员函数,所以有括号。

len(tensor.shape):返回tensor的维度,是一个数字。

tensor.dim:同上。

torch.tensor([1,2,...,n]):生成一个n维的张量。

pytorch中,0维的叫标量,1维,2维,。。。,都叫张量。

(实践)torch.FloatTensor(2):随机初始化一个2维的张量。也可以用numpy实现。

4.1维的张量多用于bias,即神经单元中的参数b,偏值。

5.注意区分dim,size/shape,tensor:

dim(2)是size/shape([2,2])的长度,size/shape是tensor([1,2][3,4],两行两列的一个矩阵)的形状。

p9:1.torch.FloatTensor(2,3):生成一个两行三列的矩阵。

二维的tensor常用于批量线性输入(Linear input batch)

2.torch.randn():使用随机的正态分布;torch.rand():使用随机的均匀分布。

3.三维的适用于RNN

4.四维的适合表达图片,因此适用于CNN。

5.tensor.nume():返回tensor所占内存大小。若tensor是2*3*28*28的,则返回2*3*28*28=4704。

p10:1.torch.tensor():括号里放的是具体的数据(列表形式)或是np;torch.Tensor()与torch.FloatTensor()类似,括号里放的是数据的维度(shape),不过也可以放现有数据,即列表。建议:少用Tensor()括号里放列表的情况。

2.未初始化的tensor并不是没有数据,而是有数据的,只不过数据都是随机的,可能会特别大或者特别小。所以以后如果出现nan或者inf报错的话,可能是把未初始化的tensor喂给了神经网络。

3.Tensor()生成的类型是默认的类型,即把默认的类型设置成什么类型,Tensor()生成的就是什么类型的tensor,通常会把默认的类型由float改为double,因为double类型的精度是64位,会更精确一些。

4.随机初始化函数:

(1)rand(2,3):随机均匀生成[0,1]区间内的数组成的两行三列的矩阵。

(2)rand_like(tensor):随机生成类似于tensor的tensor,会先读出tensor的shape,然后再把shape喂给rand,生成相似的tensor。

(3)randint(min,max,shape):生成[min,max)区间内的数组成的tensor,shape是列表形式。

(4)randn(3,3):正态分布

(5)normal(mean,std):指定均值和方差的正态分布。使用起来有些别扭

(6)full(shape:list,element):全部赋值为一个元素。

(7)arange(start,end,step=1):生成一个从start到end(不包含end)的等差(step)数列。range()函数在pytorch中不建议使用。

(8)linspace(start,end,steps):等分切割从start到end(包含end),共且分出steps个数。

(9)logspace(start,end,steps):等分切割从start到end(包含end),共且分出steps个数。并将这steps个数作为10的指数,将求得的指数结果返回。

(10)ones(shape:list):生成形状为shape的全1矩阵。

(11)zeros(shape:list):生成形状为shape的全0矩阵。

(12)eye(shape:list):生成形状为shape的对角线元素全为1,其余元素全为0的矩阵。若shape的行和列不相等,则取行列中的较小值为方阵的维数。当行列相等时,shape可以只是一个数。该函数的参数只能是1个或者是2个,不接受更高维的参数。

(13)ones_like(a):生成形状与a相同的全1矩阵。

(14)randperm(num):生成[0,num)的索引,并随机打散。

p14:1.view/reshape:保持tensor整个大小(size)不变的情况下可以将一个shape转变成另一个任意的shape。这个两个操作几乎一样,完全可以通用。

view进行维度的合并必须有真实的物理意义。但是根据变换后的矩阵无法恢复成原来的存储方式,会造成数据的污染。

2.squeeze/unsqueeze:挤压与增加维度的操作。删减维度/增加维度。

(1)unsqueeze(num):num的范围是[-a.dim()-1,a.dim()+1),超出建议使用[0,a.dim()],这个区间足以覆盖我们的需求。当num=0时,表示在原来的第0个维度的前面插入一个维度;当num=a.dim()时,表示在原来的最后一个维度的后面插入一个维度。当num是非负数时,是在以num为索引的数之前插入一个维度,而当num为负数时,是在以num为索引的数之后插入一个维度。该函数实现了新插入一个自定义的维度,这个维度不会改变数据本身,不会增加数据也不会减少数据,只是给数据新增加了一个自定义的组别,它改变的其实是理解方式。在后面插入一个维度,就是在当前维度内增加一个维度;在前面插入一个维度,就是在当前维度外面再包一个维度。

(2)squeeze(idx):idx为要删减的那个维度的参数,如果不给idx的话,会把所有能删减的(即:dim.size为1的维度)都删减掉。idx可以是正索引,也可以是负索引。如果当前索引上的shape不是1的话,它就不会变,如果是1的话,就会把这个维度减少掉。

3.transpose/t/permute:矩阵的转置。有多维的单次操作/多次操作。

(1).t():矩阵的转置。注意:该方法只适用于2维的,即只适用于矩阵。否则会报错。

(理解)(2)transpose(num1,num2):交换num1维度和num2维度。会使得内存顺序变得不连续,所以需要使用.contiguous来使得内存顺序变得连续。

要把维度的变换信息跟踪住。

(3)permute():括号里放的是多次变换后最终的维度顺序,标识维度的索引还是最一开始的索引。会使得内存顺序变得不连续,所以需要使用.contiguous来使得内存顺序变得连续。

4.expand/repeat:维度的扩展,可以将维度很小的转换成一个高维度的变量。扩展/重复。

(1)expand:扩展,只是改变了我们的理解方式,并没有增加数据。(推荐)

(2)repeat:重复,确实增加了数据。

(3)这两种操作在最终的效果上是一致的。只不过expand不会主动复制数据,只有在必要时才会复制数据。而且expand执行速度快,节约内存。

(4)expand():括号里的参数表示新的shape。扩展前后维度数目必须相等,而且它只能实现从1到n的扩展,而从2(或者其他大于1的数)到m的扩展是不能实现的。如果在括号里出现了-1,则表示该维度保持不变。有一个bug:就是如果括号里写了-4,那扩展之后的相应位置的维度也会变成-4.

(5)repeat():括号里的数字表示的是每一个dim需要拷贝的次数。

5.使用eq(a,b)来比较a和b的内容是否一致。

p18:broadcasting:自动扩展。它的操作和expand一样,但是它是自动的,也不需要复制数据。

实现的关键步骤:(1)从右边开始比较当前tensor和目标tensor的维度信息,若当前tensor最左边的维度确实,则在前面增加一个维度,为1;(2)自动调用expand函数将1扩展为n(需要扩展的(就是当前tensor和目标tensor不一样的维度)都扩展),使得当前tensor和目标tensor的维度信息一致。

在一个列表表示的维度里,最右边的认为是最小的维度,最左边的认为是最大的维度。

broadcasting=unsqueeze+expand

p19

(问题:怎么手动完成?)

对于没有给到维度,我们认为给了的维度在没有给的维度都是适用的。

默认从最小维度开始匹配。

p20:1.拼接:

(1)cat(list:包含所有需要的tensor,如[a,b],dim=0:表示在第0个维度上进行拼接):

进行cat的两个tensor的除需要拼接的维度以外的其他维度必须都相同,要拼接的维度可相同也可不相同。

(2)stack(list:如[a,b],dim=0:表示在第0个维度前添加一个新的维度):与cat不同的是,stack会创建一个新的维度。

进行stack的tensor的相应位置的维度必须相同。

2.拆分:

(1)split(len,dim=0:表示对第0个维度进行拆分):按长度进行拆分。

len:如果采用固定长度(固定长度必须小于该维度上的数字,否则会报错)进行拆分,那么令len=固定长度即可;若不是采用固定长度拆分,则令len=[a,b,...],a/b/...表示拆分后的第一块的长度,第二块的长度,...。要求使得列表中的所有元素相加的和等于拆分前该维度上的数字。

(2)chunk(num,dim=0:表示要进行拆分的维度):按数量进行拆分。


(未完,待续~)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Golang入门教程】如何使用Goland创建并运行项目

自然语言处理的发展 文章目录 自然语言处理的发展**前言**创建新项目编辑运行/调试配置编写并运行代码总结强烈推荐专栏集锦写在最后 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站: 人工…

新能源汽车智慧充电桩管理方案:环境监测与充电安全多维感知

随着新能源技术的不断发展,新能源充电桩作为电动汽车的重要基础设施,其管理和维护变得尤为重要。环境监测类传感器能够实时监测充电桩周围的环境参数,如温度、湿度等,为管理人员提供及时、准确的数据,以便做出相应的调…

HTML+CSS:炫酷登录切换

效果演示 实现了一个登录注册页面的切换效果,当用户点击登录或注册按钮时,会出现一个叠加层,其中包含一个表单,用户可以在表单中输入用户名和密码,然后点击提交按钮进行登录或注册。当用户点击返回按钮时,会…

第三篇【传奇开心果短博文系列】Python的OpenCV库技术点案例示例:物体检测与识别

传奇开心果短博文系列 系列短博文目录Python的OpenCV库技术点案例示例短博文系列 短博文目录一、项目目标二、OpenCV物体检测与识别介绍三、分别示例代码四、扩展示例代码 系列短博文目录 Python的OpenCV库技术点案例示例短博文系列 短博文目录 一、项目目标 物体检测与识别…

Pycharm终端显示PS而不显示虚拟环境venv

PS表示当前使用的是powershell.exe,如果你要显示虚拟环境名,则要改为cmd.exe 解决办法: 打开File-settings-Tools-Terminal-shell path 在文件中找到设置,在工具中找到终端 把第四个Shell路径设置为cmd.exe 3. 点击确定&#xf…

腾合力携思腾云全系列产品亮相2023算云融合产业大会

由中国信息通信研究院、中国通信标准化协会联合主办的首届算云融合产业大会于2023年3月29-30日在北京国际会议中心举办。大会围绕“云融万物 算启未来”主题,设置“主论坛六大分论坛”,覆盖产业热点领域及方向,全面推动我国算力云服务发展。集…

自定义错误页面在Spring Boot中的实现

引言 在SpringBoot中,常用的异常处理有两种:一种是 BasicErrorController,另一种是 ControllerAdvice。BasicErrorController 用于处理非Controller抛出的异常,而ControllerAdvice 用于处理Controller抛出的异常,对于…

windows vs2005编译libssh2支持sftp

windows vs2005编译libssh2支持sftp 1、编译模块 ​ 需要用到4个库:libcurl、libssh2、openssl、zlib 为啥要用libssh2 因为libcurl实现sftp功能依赖libssh2,是对libssh2的封装。 所以也可以直接用libssh2实现sftp。 为啥要用openssl 因为libssh2依…

【linux】查看进程和子进程

在Linux系统中,可以使用多个命令来查看进程及其子进程。以下是一些常用的方法: 1. ps 命令 ps 命令用于显示当前进程的状态。可以结合不同的选项来查看进程及其子进程。 查看进程树: ps -auxf - -a 显示所有进程。 - -u 显示进程的用户/所…

AI伦理边界:探索人工智能伦理计算

大家好,近年学界与工业界都已开始关注并热议 AI 伦理治理问题,也在伦理规范研究上取得了初步进展。然而,由于 AI 伦理的抽象性,如何定量化度量智能系统的伦理,还是一个未知的难题。 李学龙教授团队在《中国科学&#…

【学网攻】 第(5)节 -- Cisco VTP的使用

文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节 -- 交换机划分Vlan 前言 网络已经成为了我们生活中不可或缺的一部分,它连接了世界各地的人们,让信息和资…

apple watch开通esim(一号双终端)报错解决方法

写在前面: 本文不一定可以解决您问题,本文记录了作者在遇到该情况时的处理办法,导致这个问题的原因会有很多,本文仅记录部分,仅供读者参考。与客服人员沟通时,请避免说esim,大多数客服人员不一定…

windbg :查看局部变量值

查看变量有以下几种常用方式&#xff1a; 仍以我们上篇 &#xff1a; 《windbg : x 命令》中的代码作为示例来讲解使用。 源码&#xff1a; #include <iostream>using namespace std;struct JKGirl{std::string name;int age;friend ostream& operator <<(o…

【机器学习300问】17、什么是欠拟合和过拟合?怎么解决欠拟合与过拟合?

一个问题出现了&#xff0c;我们首先要描述这个问题&#xff0c;然后分析问题出现的原因&#xff0c;找到原因后提出解决方案。废话不多说&#xff0c;直接上定义&#xff0c;然后通过回归和分类任务的例子来做解释。 一、什么是欠拟合和过拟合&#xff1f; &#xff08;1&am…

面试题:String s = new String(“xyz“) 创建了几个对象?

项目场景&#xff1a; 今天分享一篇基础技术面试题。 这个问题相信每个学习 java 的同学都不陌生&#xff0c;作为一个经典的面试题&#xff0c;到现在工作这么多年了我真是认为挺操蛋的一个问题&#xff0c;在网上到现在你仍然可以看见很多讨论这个问题的人&#xff0c;其中不…

酷开科技 | 酷开系统体育频道燃爆体育赛事,为偶像疯狂打CALL

体育竞技&#xff0c;总会带给我们激情澎湃的感受&#xff0c;兴奋、激动、热血&#xff0c;这些瞬间也许就是竞技体育的魅力&#xff01;酷开科技通过酷开系统的体育频道&#xff0c;为广大体育迷们提供了一个观赛平台。在这个平台上&#xff0c;你可以欣赏到各类体育赛事的精…

用JavaFX写了一个简易的管理系统

文章目录 前言正文一、最终效果1.1 主页面1.2 动物管理页面-初始化1.3 动物管理页面-修改&新增1.4 动物管理页面-删除&批量删除 二、核心代码展示2.1 启动类2.2 数据库配置-db.setting2.3 日志文本域组件2.4 自定义表格视图组件2.5 自定义分页组件2.6 动物管理页面2.7 …

JVM/GC复习1---更新中

JVM/GC JVMGC垃圾回收算法1.引用计数法2.标记清除发3.标记压缩算法4.复制算法5.分代算法 收集器1.串行垃圾收集器2.并行垃圾收集器2.CMS垃圾收集器 3.G1垃圾收集器(重点)jdk1.7开始1.9默认的回收器Young GC模式Mixed GCFull GC JVM 待更新中ing GC 垃圾回收:程序运行的时候必…

2024年美赛数学建模思路 - 案例:异常检测

文章目录 赛题思路一、简介 -- 关于异常检测异常检测监督学习 二、异常检测算法2. 箱线图分析3. 基于距离/密度4. 基于划分思想 建模资料 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 一、简介 – 关于异常…

【JSON2WEB】03 go的模板包html/template的使用

Go text/template 是 Go 语言标准库中的一个模板引擎&#xff0c;用于生成文本输出。它使用类似于 HTML 的模板语言&#xff0c;可以将数据和模板结合起来&#xff0c;生成最终的文本输出。 Go html/template包实现了数据驱动的模板&#xff0c;用于生成可防止代码注入的安全的…