avatar
文章
23
标签
8
分类
0
首页
音乐
照片
友链
说说
关于
LogoLuckypytorch基础
搜索
首页
音乐
照片
友链
说说
关于

pytorch基础

发表于2021-02-26|更新于2025-03-03
|总字数:1.5k|阅读时长:6分钟

持续补充

1
import torch

1.随机相关

1
2
3
4
5
6
7
8
9
a = torch.randn(2,3)		正态分布

b = torch.rand(2,3) 0~1范围内随机

c = torch.rand_like(a) 模仿a的形状生成随机矩阵

d = torch.randint(1,10,[2,3,4]) 在1~10内生成形状为(2,3,4)的矩阵

a = a.cuda() 将数据加载到gpu内

2.查看数据形状

1
2
3
4
5
a.type()			输出数据类型

a.size() == a.shape 输出张量形状

a.dim() 输出维度

3.生成矩阵

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
a = torch.full([3,4,5],6)        (3,4,5)形状矩阵,用6填满
tensor([[[6., 6., 6., 6., 6.],
[6., 6., 6., 6., 6.],
[6., 6., 6., 6., 6.],
[6., 6., 6., 6., 6.]],

[[6., 6., 6., 6., 6.],
[6., 6., 6., 6., 6.],
[6., 6., 6., 6., 6.],
[6., 6., 6., 6., 6.]],

[[6., 6., 6., 6., 6.],
[6., 6., 6., 6., 6.],
[6., 6., 6., 6., 6.],
[6., 6., 6., 6., 6.]]])

# 小写trnsor是自己传值,大写Tensor是传维度

b = torch.tensor(4) 4为填充数据,0维的常量
c = torch.tensor([4]) 4为填充数据,1维的向量
d = torch.tensor([[4]]) 4为填充数据,2维的矩阵

e = torch.FloatTensor(2,3) (2,3)为矩阵形状

f = torch.empty(2,3,4) 原则上生成全为0的(2,3,4)维度的矩阵,事实上是很多很大的值

g = torch.eye(5,5) 对角线为1的矩阵
tensor([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])

1.

1
2
3
torch.arange(1,10,2)		2为步长

torch.linspace(1,10,5) 5为数据个数

5.切片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
基本操作与numpy切片一样,只不过涉及图像处理后,矩阵维度为四维,刚开始接触不太好理解

a = torch.randn(4,3,28,28)

a.shape
torch.Size([4, 3, 28, 28])

a[0].shape
torch.Size([3, 28, 28])

a[0,0].shape
torch.Size([28, 28])

a[0,0,0].shape
torch.Size([28])

a[:2].shape
torch.Size([2, 3, 28, 28])

a[:2,2:].shape
torch.Size([2, 1, 28, 28])

a[:,:,::2,::2].shape
torch.Size([4, 3, 14, 14])

特殊:
... 代表最大维度
a[...].shape
torch.Size([4, 3, 28, 28])

a[1,...].shape
torch.Size([3, 28, 28])

a[:1,...,::2].shape # 当三个点在中间时,根据左右两边的数来确定...代表的维度
torch.Size([1, 3, 28, 14])

6.维度转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
a = torch.randn(4,3,28,28)

1.打平
a.view(4,3*28*28)
将四维矩阵转化为4行,3*28*28列的二维矩阵,矩阵数据不能丢

2.增1维
a.unsqueeze(0) 0为插入维度的位置,含义为在0维之前再插入一个维度
若写为-1,则在-1维之后再插入一个维度,正负有别
a的shape变为[1,4,3,28,28]

3.降1维
只能去掉dim为1的维度
a.squeeze(0) 此维度为1的话可以删去,不然的话无效(不会报错)

4.让1维度扩展
expand:只扩展维度
a = torch.randn(1,32,1,1)
a.expand(5,32,5,10) 参数为需要转换的维度

repeat:会复制数据,不常用
a.repeat(5,1,5,10) 参数为每个维度复制的次数


5.转置
a只能是二维矩阵
a.t()

6.拼接:cat(),stack()
c = torch.randn(4,3,7,5)
d = torch.randn(4,6,7,5)

torch.cat([c,d] , dim = 1).shape
>>>torch.Size([4, 9, 7, 5])
torch.stack([c,c],dim=1).shape
#传入参数两者维度需相等,然后在dim参数前创建一个新维度
>>>torch.Size([4, 2, 3, 7, 5])

7.拆分:按比例split() , 均分chunk()
w = torch.randn(4,5,6)
split(步长/比例列表,dim = ?)
q1 , e1 = w.split(1,dim=0)
>>>q1,e1.shape:[2,5,6]
q2 , e2 = w.split([3,1],dim=0)
>>>q2.shape:[3,5,6]
e2.shape:[1,5,6]

w = torch.randn(4,5,6)
q1 , e1 , t1 , u1 = w.chunk(4,dim=0) 均分四分
q1 , e1 = w.chunk(4,dim=0) 均分两份

7.广播法则

1
2
3
4
5
6
7
8
9
特点
1.只可以将一维数据扩展为多维
2.如果两个矩阵维度不同的话就在低纬度处增加维度。
例如:a = torch.randn(2,3,4,5)
b = torch.randn(3,1,1)
print((a+b).shape)
>>>torch.Size([2, 3, 4, 5])
扩充过程:[3,1,1]->[1,3,1,1]->[2,3,4,5]
只可以在前面补充维度,不可在其他位置,若两者高纬度数据不等,则不能广播

8.加减乘除

1
2
3
4
5
6
7
8
9
10
可直接对矩阵进行加减乘除

乘除是对相同位置上的元素进行乘除
如需按照矩阵方法进行运算:1.torch.mm() 二维矩阵的乘除
2.torch.matmul() 多维矩阵的乘除,多维矩阵相乘其实就是矩阵最高的两个维度相乘,其他维度不变
所以说相乘的两个矩阵要符合二维矩阵相乘的条件:前者列数等于后者行数
并且若其余低维不相等,还不符合广播的,则不能相乘
3.@ 第2条的简写

数据取小数和整数部分:.frac() , .trunc()

null
9.属性统计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
a = torch.randn(2,4)

a.norm(int x) 求范数,x代表求几级范数,也可dim指定维度

下面的函数的返回值都是一维的,不论是否加dim,当加上dim后,还可再加keepdim=True这样可以使返回值的维度与数据集维度相同。
a.min() 返回两个tensor , 返回最大值和其位置
a.max()
a.sum()
a.mean() 平均值
a.prod() 累乘
a.topk(int num , dim= , largest = True/False) 返回前num个最大(小)的概率
a.kthvalue(int location , dim=) 返回第k小的概率的值和位置

a.argmax() 求最大值的位置,dim指定维度,不指定的话会将a矩阵打平,求最大值位置
a.argmin() 求最小值的位置

torch.eq(a , b) 返回一个0,1矩阵
torch.equal(a , b) a和b完全相同时返回True,否则返回False。

10.高阶操作

1
2
3
4
5
6
7
8
9
torch.where(condition , x , y) 返回值为tensor:
condition , x , y维度相同,且condition为0,1矩阵
如果condition内位置上为1,则取x内的值,否则取y内的值,然后组成一个新tensor返回

torch.gather(input , dim , index , out=None):
input:可以理解为标签
dim:维度
index:标签的坐标,然后以此返回个新的tensor
out=None
文章作者: 刘同学
文章链接: https://mouhorse.github.io/2021-02-26/pytorch%E5%9F%BA%E7%A1%80/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Lucky!
Python
赞助
  • wechat
    wechat
  • alipay
    alipay
cover of previous post
上一篇
数据结构:图(C语言)
...
cover of next post
下一篇
MNIST手写数字识别总结(pytorch)
此博客并不是教程,只是一个练习总结 代码汇总放在文末 1.首先导入所需要的库1234567891011import torchfrom torch import nnfrom torch.nn import functional as Ffrom torch import optimimport torchvisionfrom matplotlib import pyplot as pltimport pandas as pdimport numpy as npfrom Util import plot_image,pd_one_hot #辅助函数,在博客末尾附上 2.数据集 此数据集总共包含70K张图片,其中60K作为训练集,10K作为测试集。 更多消息可以查看官网官网链接:官网 3.加载数据 batch_size设置一次处理多少图片,此处设置为512张图片,这样并行处理可以cpu,gpu加快处理速度 1batch_size =...
相关推荐
cover
2022-02-16
MNIST手写数字识别总结(pytorch)
此博客并不是教程,只是一个练习总结 代码汇总放在文末 1.首先导入所需要的库1234567891011import torchfrom torch import nnfrom torch.nn import functional as Ffrom torch import optimimport torchvisionfrom matplotlib import pyplot as pltimport pandas as pdimport numpy as npfrom Util import plot_image,pd_one_hot #辅助函数,在博客末尾附上 2.数据集 此数据集总共包含70K张图片,其中60K作为训练集,10K作为测试集。 更多消息可以查看官网官网链接:官网 3.加载数据 batch_size设置一次处理多少图片,此处设置为512张图片,这样并行处理可以cpu,gpu加快处理速度 1batch_size =...
cover
2018-08-21
3D图像颜色
viridis 翡翠色 #中文会慢慢给出,也会逐渐整理 只有[ ‘ ‘]内的代码才是颜色。# # cmaps = [('Perceptually Uniform Sequential', # # ['viridis', 'inferno', 'plasma', 'magma']), # # ('Sequential', ['Blues', 'BuGn', 'BuPu', # # 'GnBu', 'Greens', 'Greys', 'Oranges', 'OrRd', # # 'PuBu', 'PuBuGn', 'PuRd', 'Purples',...
cover
2018-12-28
Python函数
函数 之前由于水平不足博客写的很不好,现于2019/12/17进行大更改。 1.内置函数 ①python与其他编程语言一样有许多内置函数,我们可以直接调用使用,只需要知道参数和函数名。内置函数有很多,需要的话自行百度了解 ②利用内置函数进行数据类型转换,int,float… ③可以把函数名复制给一个变量,然后用这个变量也可以调用该函数。 a=abs    #用a代替abs函数a(-1)    #调用取绝对值函数 1     #产生结果与直接调用abs函数相同 ==2.用户自定函数== ①用def语句定义函数,后面跟函数名,括号,括号里写参数名,还要加冒号。用return语句返回。没有return语句函数也可以,只不过返回值为none。 ②python与c一样,也可以设置空函数,等到以后再补充内容,需要用pass语句。 def nop()...
cover
2018-12-15
Python基础
之前由于水平不足博客写的很不好,现于2019/11/30进行大更改。 python1.基础①代码中单引号与双引号效果一样,不像其他语言一样有所区别,但是要成对使用,不能落单。  ②命名可以用数字,字母,下划线,汉字,不能以数字开头。注意不要和关键字重名。  ③字符串:每个元素的位置可以正着数,也可以倒着数。正着数从0开始,倒着从-1开始。 字符串访问区间方式:[m,n],访问从m开始到n的字符串内元素(不包括n,左闭右开) m,n可以是正着数的,也可以是倒着数的,还可以混合用。  ④交换x,y的值:x,y=y,x(比c简单多了)   ⑤#后面跟的是注释,大程序中注释很重要,便于自己和别人的理解。  ⑥为了简化避免造成机器误解,Python还允许用 r’ ‘表示 ‘ ‘ 内部的字符串默认不转义,可以自己试试:  (1)输入:>>> print( ‘ \\\t\\ ‘)     输出:\    \  (2)输入:>>> print ( r ‘ \\\t\\‘)     输出:\\\t\\ 2.输出...
avatar
刘同学
欢迎光临我的博客
文章
23
标签
8
分类
0
Follow Me
公告
欢迎来到我的博客!
可以交换友链
联系方式:485182274@qq.com
最新文章
Hexo本地与云端布局不同处理办法
Hexo本地与云端布局不同处理办法2025-02-25
解决 Hexo 部署到 GitHub Pages 自定义域名失效
解决 Hexo 部署到 GitHub Pages 自定义域名失效2025-02-24
Butterfly 个性化配置教程
Butterfly 个性化配置教程2025-02-23
Hexo安装并修改主题
Hexo安装并修改主题2025-02-23
MNE脑电预处理
MNE脑电预处理2024-10-07
©2018 - 2025 By 刘同学
框架 Hexo 7.3.0|主题 Butterfly 5.3.3
活出个样子给自己看
搜索
数据加载中