limu|P1-7|安装、预备知识

安装
建议参考小土堆Pytorch教程的第一课,然后需要1-下载所有Jupiter Notebook的文件并解压;2-pip install d2l相当于一次性把课程需要用到的包都install,但是这么下亲测很慢,不如到时候用到的时候发现没装,再install

预备知识
仅说几个我觉得有意思的概念(全文字,一点点代码,懒得写公式),具体torch代码需要用的时候再查or问chatgpt
(一)数据操作
1、Pytorch和Tensorflow中的Tensor张量和Numpy的ndarray = n dim array有何区别?
其实都是n维数组,但Tensor是有对应数学概念的,ndarray纯计算机概念
深度学习喜欢用Tensor是因为(1)Tensor支持GPU加速计算,而ndarray仅支持CPU计算。(2)Tensor支持自动微分
2、Tensor作为n维数组
若只有1个值——标量scalar
若n=1——向量vector
若n=2——矩阵matrix
若n≥2——没别的名字的都叫张量tensor
如:
n=3——一张3通道图像(Channel, Height, Width)
n=4——一个batch的3通道图像(batch_size, C, H, W)
n=5——视频,加了时间轴
3、广播机制
两个张量按元素进行运算操作时,即使形状不同,也可以通过适当复制元素以扩展,使得两个张量具有相同的形状,从而可以进行按元素操作【有的时候的出错点。。】
(二)数据预处理
1、读取数据集
比较简单pd.read.csv,注意用此读取csv文件时默认第一行为列名。如果没有列名,设置参数header=None
真的实战的时候还是得用Dataset类+Dataloader读取自己的数据集,详见:
Dataset类:https://www.cnblogs.com/xjl-ultrasound/p/18337058
Dataloader:https://www.cnblogs.com/xjl-ultrasound/p/18339035
2、处理缺失值NaN
比较常用的是 插值(补!)
(1)用均值补inputs = inputs.fillna(input.mean())
(2)如果input中是离散值,如类别,可将NaN自动视为一类。inputs = pd.get_dummies(inputs, dummy_na=True)。意思是,在不忽视NaN这一类dummy_na=True的情况下,进行one-hot encoding
(三)线性代数
1、怎么看n维数组,以及降维求和/均值
怎么看Tensor是几维?数开头或结尾的中括号数量
如何理解降维?比如A.sum(axis=1)。相当于按照这个方向压缩(sum求和各元素)张量,最后得到的tensor维度会缺掉这个维度的数字。
但很多时候,为了便于后续计算,需要非降维求和。可设置参数keepdims=True;或者换函数A.cumsum(axis=1)
2、各种乘!
(1)基本上用不到的是哈达玛积,按元素乘
(2)常用的是:
两向量的点积:得到一个标量,是两个向量的相同位置元素乘积之和torch.dot(x, y)
矩阵-向量积:要求矩阵m*n维,向量n维,相乘,得到一个m维向量torch.mv(A, x)。其实是在变换向量的维度。新向量的各个值是老向量所有值的加权和(权重由矩阵决定)。“线性层,全连接层”做的事情
矩阵-矩阵乘法torch.mm(A, B)
3、范数norm
(1)向量的范数:表示一个向量的大小size,但不涉及维度。也就是把一个向量 映射到 标量 的函数
常用的是
L2范数:向量各元素平方和的开根号(模),torch.norm(x)
L1范数:向量各元素绝对值之和,torch.abs(x).sum()
更一般的是Lp范数:\(\|x\|_{p} = (\sum^{n}_{i=1}|x_i|^p)^{1/p}\)
(2)矩阵的范数
Frobenius范数 可视为 矩阵形向量的L2范数,torch.norm(A)
各种“距离”相关的概念,很常用!
(四)微积分
1、torch里都是自动求,但要知道input和output的维度
标量、向量、矩阵互相微分时,input和output的维度见下图

*被李老师的头挡住的维度为(m,l,k,n)
这里可以看出的是,如果在分母上,size会倒一倒,然后和分母的size连一连(消掉紧邻的一样的维度),就变成了output的维度。更多的我也不会了。。。
2、梯度:值变化最大的方向

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

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

相关文章

LeetCode 1631. Path With Minimum Effort

原题链接在这里:https://leetcode.com/problems/path-with-minimum-effort/description/ 题目: You are a hiker preparing for an upcoming hike. You are given heights, a 2D array of size rows x columns, where heights[row][col] represents the height of cell (row,…

javaCC链3

cc3 cc3区别cc6不再是使用Rutime类执行命令,而是通过类加载器动态加载恶意类然后执行 类加载: ClassLoader.loadClass->ClassLoader.findClass->ClassLLoader.defineClass ClassLoader.loadClass:寻找加载的类(双亲委派机制) ClassLoader.findClass:如果loadClass没…

数据结构 顺序与链式二叉树的原理与实现(万字)

目录一、树概念及结构树的概念树的相关概念树的表示二、二叉树概念及结构概念特殊的二叉树二叉树的性质二叉树的存储结构三、二叉树的顺序结构及实现二叉树的顺序结构堆的概念及结构堆的实现堆向下调整算法堆的创建建堆时间复杂度堆的插入堆的删除堆的代码实现Heap.hHeap.c堆的…

Logisim-009-4位并行加载寄存器

仓库地址 https://gitee.com/gitliang/logisim-to-cpu

CTF—web专项

一:信息泄露 1、目录遍历漏洞 (1)原理:本质是没有过滤用户输入的 ../ 相关的目录跳转符,使得攻击者通过目录跳转符来遍历服务器中的任意文件。 (2)题解: eg:根据提示遍历网页目录信息,会在某一个文件夹中发现一个flag.txt文件2、phpinfo泄露 (1)定义:phpinfo 是 PH…

算术运算符里的特殊运算符

1.++(自加) 给一个数加1 自加分为两种,一个是++a,另一个是a++ a++:先给数赋值,然后再给a加1++a:先给a加1,然后再给数赋值2.--(自减) 给一个数减1

中文手写体识别(ocr)测试

记录一下,以下是测试中文手写体识别结果图展示(对于潦草的字迹效果一般),后期会开放模型,有java和python版本:

【Playwright+Python】系列教程(七)使用Playwright进行API接口测试

playwright也是可以做接口测试的,但个人觉得还是没有requests库强大,但和selenium相比的话,略胜一筹,毕竟支持API登录,也就是说可以不用交互直接调用接口操作了。 怎么用 既然是API的测试了,那肯定就别搞UI自动化那套,搞什么浏览器交互,那叫啥API测试,纯属扯淡。 也不…

继承和多态

继承 继承: 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例 域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 生活中的继承:继承的概述:继承是面向对象程序设…

数据的存储和排列

大端方式和小端方式边界对齐

中位数

题目题解1. 首先我们可以想到,既然需要输出(n+1)/2次,所以我们可以每次排序一下,并在其为奇数的时候输出它们中间的数。 #include<iostream> #include<algorithm> #include<queue> using namespace std; int N; int a[100001]; int main() { cin >&g…

Unity Gyro Camera ---- 传感器控制摄像头旋转 + 正北校准 (纯原生支持Android+IOS,无需安装ARKit,ARCore等插件)

Unity Gyro Camera 传感器控制摄像头旋转 + 正北校准 纯原生支持Android+IOS,无需安装ARKit,ARCore等插件这篇文章主要介绍如何利用手机原生的传感器,控制摄像头的旋转,最终可以实现AR或者VR的摄像头旋转控制问题提出 虽然,目前有一些用手机传感器控制虚拟摄像头旋转的方案…