【python、pytorch】

什么是Pytorch

Pytorch是一个基于Numpy的科学计算包,向它的使用者提供了两大功能。作为Numpy的替代者,向用户提供使用GPU强大功能的能力。做为一款深度学习的平台,向用户提供最大的灵活性和速度。

基本元素操作

Tenors张量:张量的概念类似于Numpy中的ndarray数据结构,最大的区别在于Tensor可以利用

GPU的加速功能。

引用

复制代码
from __future__ import print_function
import torch

创建矩阵

未初始化矩阵 (脏数据)

复制代码
x=torch.empty(5,3)

初始化矩阵

复制代码
x=torch.rand(5,3)

全零矩阵

复制代码
x=torch.zeros(5,3,dtype=torch.long)

dtype可以设置数据类型

创建张量

复制代码
x=torch.tensor([[1,2],[3,4]])

创建同尺寸的张量(数据随机)

复制代码
x=x.new_ones(5,3,dtype=torch.double)
y=torch.rand_like(x,dtype=torch.float)

张量的尺寸(返回的是元组)

复制代码
x=x.new_ones(5,3,dtype=torch.double)
x.size()

基本运算操作

加法操作

x,y尺寸相同

复制代码
x+y

尺寸相同和上个方法一致

复制代码
torch.add(x,y)

把结果存入result

复制代码
result=torch.empty(5,3)
torch.add(x,y,out=result)

就地置换(存入x)

复制代码
x.add_(y)

所有就地置换函数都有_的后缀

切片操作

和numpy几乎一致

改变张量形状(-1在前匹配列,在后或没有匹配行)

取出唯一个元素

复制代码
x.item()

与其他格式的相互转换

tensor转numpy array

复制代码
b=x.numpy()

注意:如果对其中一个数据操作,另一个也会随之发生改变

numpy array转tensor

复制代码
a=np.ones(5)
b=torch.from_numpy(a)

注意:如果对其中一个数据操作,另一个也会随之发生改变

cuda tensor

复制代码
if torch.cuda.is_available():
    device = torch.device("cuda")
    y=torch.ones_like(x,device=device)
    x=x.to(device)
    z=x+y
    print(z)
    print(z.to("cpu",torch.double))

autograd

在整个Pytorch框架中,所有的神经网络本质上都是一个autograd pickage(自动求导工具包)。

autograd package提供了一个对Tensors上所有的操作进行自动微分的功能。

torch.Tensor

requires_grad

torch.Tensor是整个package中的核心类,如将属性requires_grad设置为True,它将追踪在这个类上定义的所有操作,当代码要进行反向传播的时候,直接调用backward()就可以自动计算所有的梯度.在这个Tensor上的所有梯度将被累加进属性grad中。

复制代码
x = torch.ones(2, 2, requires_grad=True)
y=x+2
print(x.grad_fn)
print(y.grad_fn)
改变 requires_grad属性
复制代码
x.requires_grad_(True)

detach()

如果想终止一个Tensor在计算图中的追踪回溯,只需要执行detach()就可以将该Tensor从计算图中撤下,在未来的回溯计算中也不会再计算该Tensor。

除了detach(),如果想终止对计算图的回溯,也就是不再进行方向传播求导数的过程,也可以采用代码块的方式with torch.no_grad():, 这种方式非常适用于对模型进行预测的时候,因为预测阶段不再需要对梯度进行计算.

torch.Function

Function类是和Tensor类同等重要的一个核心类,它和Tensor共同构建了一个完整的类,每一个Tensor拥有一个grad_fn属性,代表引用了哪个具体的Function创建了该Tensor。

如果某个张量Tensor是用户自定义的,则其对应的grad_fn is None。

相关推荐
云栖梦泽10 分钟前
易语言开发从入门到精通:进阶篇·网络爬虫与数据采集分析系统深度实战
开发语言
lsx20240621 分钟前
XSLT `<sort>` 元素详解
开发语言
_olone22 分钟前
牛客每日一题:显生之宙(Java)
java·开发语言·算法·牛客
Sirens.24 分钟前
Java 包装类、泛型与类型擦除
java·开发语言·javac
小光学长40 分钟前
基于ssm的膳食健康管理系统e6whl4q7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·开发语言·数据库·学习·ssm
Dapenson42 分钟前
腾讯小龙虾WorkBuddy技能与插件深度解析
python·ai
无心水44 分钟前
【常见错误】2、Java并发编程避坑指南:从加锁失效到死锁,10个案例教你正确使用锁
java·开发语言·python
青衫码上行1 小时前
【项目开发日记 | Java架构】第一天
java·开发语言·spring cloud
至为芯1 小时前
IP2075_34S至为芯支持C口快充的30W功率AC/DC芯片
c语言·开发语言
困死,根本不会1 小时前
Python 连接 iBeacon 蓝牙设备超详细学习笔记
python·蓝牙服务·ibeacon