PyTorch基础知识 | 安装 | 张量 | 自动求导


PyTorch基础篇:


一、PyTorch安装

  这里介绍两种安装方式:

1.基于whl安装

  https://download.pytorch.org/whl/torch_stable.html下载对应cuda版本或cpu,对应pytorch版本,对应python版本、对应电脑系统的文件,选择两个文件torchtorchvision,然后在对应的虚拟环境下pip安装即可。

2.官网命令行安装

  https://pytorch.org/get-started/previous-versions/选择对应cuda版本或cpu,对应pytorch版本,对应python版本、对应电脑系统的命令。每个版本都有两种安装方式:conda和wheel。网速快的话,wheel方式更快一点。

二、张量

1.张量的简介

  张量的核心就是一个数据容器

张量维度 代表含义
0维张量 代表的是标量(数字)
1维张量 代表的是向量
2维张量 代表的是矩阵
3维张量 时间序列数据 、股价、 文本数据、单张彩色图片(RGB)
4维张量 多张彩色图片(RGB)
5维张量 视频

  多数情况下,它只包含数字。在PyTorch中, 张量(torch.Tensor) 是存储和变换数据的主要工具。Tensor 提供GPU计算和自动求梯度等更多功能。
  Tensor有8个属性:
在这里插入图片描述

  • data:被包装的Tensor
  • dtype:张量的数据类型,如torch.FloatTensor, torch.cuda.FloatTensor(表示数据放到了GPU上)
  • shape:张量的形状,如(64,3,224,224)
  • device:张量所在设备,GPU/CPU,是加速的关键
  • grad: data的梯度
  • grad_fn:创建TensorFunction,是自动求导的关键
  • requires_grad:指示是否需要梯度
  • is_leaf:指示是否是叶子结点(张量)

2.创建tensor

  常见的构造Tensor的方法如下:

函数 功能
Tensor(sizes) 基础构造函数
tensor(data) data可以传入list, tuple,ndarray, scalar等,返回tensor
ones(sizes) 全1
zeros(sizes) 全0
eye(sizes) 对角为1,其余为0
arange(s,e,step) 从s到e,步长为step
linspace(s,e,steps) 从s到e,均匀分成step份
rand/randn(sizes) rand是[0,1)均匀分布;randn是服从N(0,1)的正态分布
normal(mean,std) 正态分布(均值为mean,标准差是std)
randperm(m) 随机排列
2.1 直接创建

  torch.tensor():直接传入数据list, tuple,ndarray, scalar等,构造一个张量。

torch.tensor(data, dtype=None, device=None, requires_grad=False,pin_memory=False)

功能:从data创建tensor

  • data:数据,可以是list, tuple,ndarray, scalar
  • dtype:数据类型,默认与data的一致
  • device :所在设备,cuda/cpu
  • requires_grad:是否需要梯度
  • pin_memory:是否存于锁页内存(这与转换效率有关)

注意:torch.tensor创建得到的张量和原数据是不共享内存的,张量对应的变量是独立变量。

传入列表:

import torch
x = torch.tensor([5.5, 3]) 
print(x)
tensor([5.5000, 3.0000])

传入ndarry:

# tensor和numpy array之间的相互转换
import numpy as np

g = np.array([[1,2,3],[4,5,6]])
h = torch.tensor(g)
print(h)
tensor([[1, 2, 3],
        [4, 5, 6]], dtype=torch.int32)

  通过torch.from_numpy()创建张量

torch.from_numpy(ndarray)

注意事项:从torch.from_numpy创建的tensor与原ndarray共享内存,当修改其中一个的数据,另外一个也将会被改动。

import torch
import numpy as np
arr = np.ones((2, 2))
t1 = torch.from_numpy(arr)
print(arr)
print(t1)
t1 += 1
print(arr)
print(t1)
[[1. 1.]
 [1. 1.]]
tensor([[1., 1.],
        [1., 1.]], dtype=torch.float64)
[[2. 2.]
 [2. 2.]]
tensor([[2., 2.],
        [2., 2.]], dtype=torch.float64)
2.2 依据数值创建

  torch.zeros():创建全0张量

torch.zeros(*size,
	out=None,dtype=None,
	layout=torch.strided,device=None,
	requires_grad=False)

功能:依size创建全0张量

  • size:张量的形状,如(3,3)、(3,224,224)
  • out:输出的张量
  • layout :内存中布局形式,有strided,sparse_coo等
  • device :所在设备,gpu/cpu
  • requires_grad:是否需要梯度

  torch.zeros_like()

torch.zeros_like( input,
	dtype=None,layout=None,device=None,
	requires_grad=False)

功能:依input形状创建全0张量

  • intput:创建与input同形状的全0张量
  • dtype:数据类型
  • layout :内存中布局形式

  torch.ones(),torch.ones_like():创建全1张量

torch.ones( *size,
	out=None,dtype=None,
	layout=torch.strided,device=None,
	requires_grad=False)

功能:依size创建全1张量

torch.ones_like( input,
	dtype=None,layout=None,device=None,
	requires_grad=False)

功能:依input形状创建全1张量

  • size:张量的形状,如(3,3)、(3,224,224)
  • dtype:数据类型
  • layout :内存中布局形式
  • device :所在设备,gpu/cpu
  • requires_grad:是否需要梯度

  torch.full(),torch.full_like():创建指定数据的张量

torch.full(size,
	fill_value,out=None,dtype=None,
	layout=torch.strided,device=None,
	requires_grad=False)

功能:依input形状创建指定数据的张量

  • size:张量的形状,如(3,3)
  • fill_value:张量的值
t2 = torch.full((3, 3), fill_value=10)
print(t2)

#tensor([[10., 10., 10.],
#        [10., 10., 10.],
#        [10., 10., 10.]])

  torch.arange():创建等差张量

torch.arange(start=0,
	end,step=1,
	out=None,dtype=None,
	layout=torch.strided ,device=None,
	requires_grad=False)

功能:创建等差的1维张量
注意事项:数值区间为[start, end),start:数列起始值,end:数列“结束值”,step:数列公差,默认为1

t3 = torch.arange(2, 10, 2)
print(t3)
# tensor([2, 4, 6, 8])

  torch.linspace():创建均分的1维张量

torch.linspace(start,
	end,
	steps=100,out=None,dtype=None,
	layout=torch.strided,device=None,
	requires_grad=False)

功能:创建均分的1维张量
注意:数值区间为[start, end],start:数列起始值,end :数列结束值,steps:数列长度
  torch.logspace():创建对数均分的1维张量

torch. logspace(start,end,
	steps=100,base=10.0,out=None,dtype=None,
	layout=torch.strided,device=None,
	requires_grad=False)

功能:创建对数均分的1维张量
注意:长度为steps,底为base;start:数列起始值,end :数列结束值,steps:数列长度,base :对数函数的底,默认为10
  torch.eye():创建单位对角矩阵

torch.eye(n,
	m=None,out=None,dtype=None,
	layout=torch.strided,device=None,
	requires_grad=False)

功能:创建单位对角矩阵(2维张量)
注意:默认为方阵;n:矩阵行数,m:矩阵列数

2.3 依概率分布创建

  torch.normal():生成正态分布的张量。

torch.normal(mean,
	std,
	out=None)

功能:生成正态分布(高斯分布);mean :均值,std :标准差
四种模式:

  • mean为标量,std为标量
  • mean为标量,std为张量
  • mean为张量, std为标量
  • mean为张量,std为张量
# mean:张量 std: 张量
mean = torch.arange(1, 5, dtype=torch.float)
std = torch.arange(1, 5, dtype=torch.float)
t_normal = torch.normal(mean, std)
print("mean:{}\nstd:{}".format(mean, std))
print(t_normal)

# mean:标量 std: 标量
t_normal = torch.normal(0., 1., size=(4,))
print(t_normal)

# mean:张量 std: 标量
mean = torch.arange(1, 5, dtype=torch.float)
std = 1
t_normal = torch.normal(mean, std)
print("mean:{}\nstd:{}".format(mean, std))
print(t_normal)
mean:tensor([1., 2., 3., 4.])
std:tensor([1., 2., 3., 4.])
tensor([0.3966, 1.5400, 0.7993, 9.4299])
tensor([-0.0378, -0.6219, -0.1607, -1.1813])
mean:tensor([1., 2., 3., 4.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幼稚的人呐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值