pytorch张量 张量的生成_hhhhxxn的博客-程序员ITS203_torch生成张量

技术标签: python  机器学习  深度学习  pytorch  

一、torch.tensor()函数

生成张量:

A = torch.tensor([1.0,1.0],[2,2])
A
#tensor([1.,1.],
#       [2.,2.])

查看张量的一些属性:

A.shape() #张量的维度
#torch.Size([2,2])
A.size() #张量的形状
#torch.Size([2,2])
A.numel() #张量中元素的数量
#4

在使用torch.tensor()函数时,可以使用参数dtype来指定张量的数据类型,使用参数requires_grad来指定张量是否需要计算梯度。只有计算了梯度的张量,才能在深度网络优化时根据梯度大小进行更新。

B = torch.tensor([1,2,3],dtype=torch.float32,requires_grad = True)
B
#tensor([1.,2.,3.],requires_grad = True)

下面针对张量B计算sum(B^2)在每个元素上的梯度大小:

y = B.pow(2).sum()
y.backward()
B.grad
#tensor([2.,4.,6.])

需要注意的是,只有浮点类型的数据才能计算梯度,其他类型的数据不能计算张量的梯度。

二、torch.Tensor()函数

也可以根据指定形状生成张量:

C = torch.Tensor([1,2,3,4])
C
#tensor([1.,2.,3.,4.])
D = torch.Tensor(2,3) #生成2*3的张量
D
#tensor([[0.0000e+00,-1.0842e-19,-1.4324e+00],
         [8.5920e+09,1.1117e-21,1.4013e-45]]) 

针对已经生成的张量可以使用torch.**like()系列函数生成与指定张量维度相同、性质相似的张量

torch.ones_like(D) #生成一个与D相同大小和类型的全1向量
#tensor([[1.,1.,1.],
#        [1.,1.,1.]])

torch.zeros_like(D) #生成一个与D相同大小和类型的全0向量
#tensor([[0.,0.,0.],
#        [0.,0.,0.]])

torch.rand_like(D) #生成一个与D相同大小和类型的随机向量
#tensor([[0.3651,0.3743,0.4789],
#        [0.2079,0.7280,0.2771]])

针对一个创建好的张量D,可以使用D.new_**()系列函数创建出新的张量,如使用D.new_tensor()将列表转化为张量:

E = [[1,2],[3,4]]
E = D.new_tensor(E) #将列表E转化为32位浮点型的张量
print("D.dtype:",D.dtype)
print("E.type:",E.dtype)
# D.dtype: torch.float32
# E.dtype: torch.float32

#其他:
D.new_full((3,3),fill_value= 1) #3*3使用1填充的张量
D.new_zeros((3,3))  #3*3的全0张量
D.new_empty((3,3))  #3*3的空张量
D.new_ones((3,3))  #3*3的全1张量

三、张量和numpy数据相互转换

将numpy数组转化为pytorch张量

import numpy as np
F = np.ones((3,3))
Ftensor = torch.as_tensor(F)  # torch.as_tensor()函数
Ftensor
#tensor([[1.,1.,1.],
#       [1.,1.,1.],
#       [1.,1.,1.]],dtype = torch.float64) #因为numpy生成的数组默认64位浮点型数据

Ftensor = torch.from_numpy(F) # torch.from_numpy()函数
Ftensor
#tensor([[1.,1.,1.],
#       [1.,1.,1.],
#       [1.,1.,1.]],dtype=torch.float64)

将pytorch张量转化为numpy数组

Ftensor.numpy()
#array([[1.,1.,1.],
#       [1.,1.,1.],
#       [1.,1.,1.]])

四、随机数生成张量

可以通过相关随机数来生成张量,并且可以指定生成随机数的分布函数等。在生成随机数之前,可以使用torch.manual_seed()函数,指定生成随机数的种子,用于保证生成的随机数是可重复出现的。
可以使用torch.normal()函数生成服从正态(0,1)分布的随机数。

torch.manual_seed(123)
#使用torch.normal()函数生成服从正态(0,1)分布的随机数
A = torch.normal(mean=0.0,std=torch.tensor(1.0)) #mean参数和std参数都只有一个元素则只会生成一个随机数
A
#tensor(-0.1115)

torch.manual_seed(123)
A = torch.normal(mean=0.0,std=torch.arange(1,5.0))#mean参数和std参数有多个值则只可生成多个随机数
A
#tensor([-0.1115,0.2407,-1.1089,-0.9617])
#解释:每个随机数服从的分布均值都是0,但是它们分布的标准差则分别为1,2,3,4

torch.manual_seed(123)
A = torch.normal(mean=torch.arange(1,5.0),std=torch.arange(1,5.0)) #也可以分别指定每个随机数服从的均值
A
#tensor([0.8885,2.2407,1.8911,3.0383])
#解释:每个随机数服从的分布均值分别为1,2,3,4,分布的标准差也分别为1,2,3,4

也可以使用torch.rand()函数,在区间【0,1】上生成服从均匀分布的张量

torch.manual_seed(123)
B = torch.rand(3,4)
B
#tensor([[0.2961, 0.5166, 0.2517, 0.6886],
#        [0.0740, 0.8665, 0.1366, 0.1025],
#        [0.1841, 0.7264, 0.3153, 0.6871]])

torch.rand_like()函数,可以根据其他张量的维度,生成与其维度相同的随机数张量

torch.manual_seed(123)
C = torch.ones(2,3)
D = torch.rand_like(C)
D
#tensor([[0.2961, 0.5166, 0.2517],
#        [0.6886, 0.0740, 0.8665]])

使用torch.randn()和torch.randn_like()函数可以生成服从标准正态分布的随机数张量

print(torch.randn(3,3))
print(torch.randn_like(C))
# tensor([[-0.1115,  0.1204, -0.3696],
#         [-0.2404, -1.1969,  0.2093],
#         [-0.9724, -0.7550,  0.3239]])
# tensor([[-0.1085,  0.2103, -0.3908],
#         [ 0.2350,  0.6653,  0.3528]])

使用torch.randperm(n)函数,则可将0~n(包含0不包含n)之间的整数进行随机排序后输出。

import torch
torch.manual_seed(123)
torch.randperm(10)
#tensor([2, 0, 8, 1, 3, 7, 4, 9, 5, 6])

五、其他生成张量的函数

torch.arange()函数

import torch
torch.arange(start=0,end=10,step=2)
#tensor([0, 2, 4, 6, 8])

torch.linspace()函数

import torch
torch.linspace(start=1,end=10,steps=5) #在范围内生成固定数量的等间隔张量
#tensor([ 1.0000,  3.2500,  5.5000,  7.7500, 10.0000])

torch.logspace()函数

import torch
print(torch.linspace(start=0.1,end=1.0,steps=5))
print(torch.logspace(start=0.1,end=1.0,steps=5)) #输出结果和10**(torch.linspace(start=0.1,end=1.0,steps=5))等价
# tensor([0.1000, 0.3250, 0.5500, 0.7750, 1.0000])
# tensor([ 1.2589,  2.1135,  3.5481,  5.9566, 10.0000])

一些预定义函数,用于生成特定的张量

torch.zeros(3,3) #3*3的全0张量
torch.ones(3,3) #3*3的全1张量
torch.eye(3) #3*3的单位张量
torch.full((3,3),fill_value=0.25) #3*3的使用0.25填充的张量
torch.empty(3,3) #3*3的空张量
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hhhhxxn/article/details/110006703

智能推荐

windows 上的python 3.3.5安装pip_请叫我曾阿牛的博客-程序员ITS203

windows 上的python 3.3.5安装pip需要pip-7.1.2的安装包,在安装pip-7.1.2的时候提示需要setuptools的安装包。所以操作步骤如下:1、下载setuptoolshttps://pypi.io/packages/source/s/setuptools/setuptools-33.1.1.zip2、安装setuptools a>解压缩下载包 b>python3 setup.py build c>pyt...

idea版本:2020.1_idea2020.1_Yong on的博客-程序员ITS203

1、setting ctrl+alt+s 通用设置setting-font字体setting-encode UTF8编码一次性鼠标滚轮+Ctrl控制代码字体大小setting-auto Import 自动导入引用2、project structure ctrl+alt+shift+s 当前项目设置设置JDK3、小齿轮功能含义Flatten Packages:摊平包结构;勾选时包按行展示,不勾选包按层级展示。Show Members:显示类的成员,包括属性方法等。Autoscroll to Source:当点

cordic ip核 vivado_Xilinx Vivado Cordic 核的使用_爱分析的博客-程序员ITS203

一:参数配置1.选择函数的类型。包含了矢量旋转,矢量变换,正弦,余弦,双曲正弦,双曲余弦,反正切,反双曲正切和平方根的计算。2.选择cordic的结构。可选并行和串行。3.选择输出流水线类型。提供了三种,无,最优,最大。其中optimal模式实现时使用很多流水线,但是不使用附加的查找表。4.选择数据格式。有符号小数(默认),无符号小数,无符号整数。5.选择相位模式。弧度和角度。。radians的取...

iOS开发之Xcode9报错 Compiling IB documents for earlier than iOS7 is no longer supported._坤宇的博客-程序员ITS203

在我们升级到Xcode9时,最低的编译版本为iOS8,但是在使用一些SDK的时候就会报出Compiling IB documents for earlier than iOS7 is no longer supported.这句错误,这个时候我们点击错误跳转到Xib或Storyboard中随后按照截图操作,把build for 的版本更改为iOS7.1或以上错误即可解决

配置Typescript+Node环境_jcLee95的博客-程序员[email protected]/node

配置 NodeJS + Typescript 开发环境CSDN用户名:jcLee95(关于TypeScript配置文件、NodeJS安装请参考其它博文,这里不再赘述)1. 安装TypeScript使用npm:npm install -g typescript使用yarn:yarn global add typescript2.安装ts-node使用npm:npm install -D ts-node # 在你的本地项目中npm install -g

Python经典例题:跑马灯文字效应_qq_45912432的博客-程序员ITS203_python走马灯案例

Python经典例题:跑马灯文字效应跑马灯文字效应是Python比较经典的例题,编程思想是:首先输入字符串,然后对字符串进行切片,将字符串的第一位数切片,然后将它放到末尾,以此进行无限循环。**注:**写出来的这个程序是在pycharm上运行的,其中有一些小细节需要解释清楚,其他的编译器我没有尝试过,所以建议在pycharm上运行程序代码如下:import timeimport oscontent = '拼搏到无能为力,坚持到感动自己 'while True: os.s

随便推点

自定义RecyclerView间距_营养不良的孩子的博客-程序员ITS203

自定义RecyclerView间距(上下左右都一样间距)直接上代码(自定义间距,继承RecyclerView.ItemDecoration 利用getItemOffsets()里面修改):/** * 自定义recyclerView间距,(上下左右都一样间距) * @author [email protected] **/public class CustomizeItemDecoration extends RecyclerView.ItemDecoration { /**

Windows 10 终于干掉了 Windows 7!_CSDN资讯的博客-程序员ITS203

不容易啊!不容易!今天早上,笔者的电脑坏了,刚被运维小哥换上了Windows 10。正在我和小哥讨论,到底是7好用、还是10好用的时候,大洋那端的媒体,就传来大料——Wi...

魔方游戏程序设计制作(C语言)_老花眼猫的博客-程序员ITS203_魔方程序

魔方游戏程序设计制作(C语言)大家都玩过手机的小游戏吧。我是编程爱好者,喜欢动脑筋研究一些算法,编程做出小游戏程序,很有趣很有成就感。在学习VB6编程时就编制过钻石棋和伤脑筋十二块那样的游戏,都是标准Windows图形界面的。现在有空闲时就玩手机上编译手机游戏。这里用简单的C语言编制魔方游戏,是安卓手机版图形界面的,全是用编译器绘图方法绘制的。一般的游戏图形都是方形和圆形为主,此魔方游戏图形是用伪3D的方法绘制的。此方法是用平面绘画方法画出许多菱形拼接成魔方的立体图像,给你的观感是立体的魔方。你可看

Linux: 一款比较好用的阅读器 Okular_Felaim的博客-程序员ITS203

Okular是一款比较好用的阅读器,虽然LZ最喜欢的还是阅读纸质的paper,但是打印电子书确实还是有些奢侈的,或者从网上买,有些英文的书籍还是比较贵的,所以介绍一款比较好用的PDF阅读器,就是Okular啦,当然用起来真心比较方便。安装方法 sudo apt-get install okular调节成豆沙色的护眼模式打开okular,Settings->Configur...

Java Object转JSONObject_普通网友的博客-程序员ITS203

代码】Java Object转JSONObject。_1671465600

apktool.bat 无法下载的解决方案_SmallMartin的博客-程序员ITS203_apktool.bat

创建一个apktool.bat的空文件把下面的代码复制进去@echo offsetlocalset BASENAME=apktool_chcp 65001 2>nul >nulset java_exe=java.exeif defined JAVA_HOME (set java_exe="%JAVA_HOME%\bin\java.exe")rem Find the highest version .jar available in the same dire