本文只是学习做的笔记,不喜忽喷。
Pytorch的安装
安装地址介绍:https://pytorch.org/
带GPU的安装:
conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch
不带GPU的安装
conda install pytorch torchvision torchaudio cpuonly -c pytorch
安装之后在ipython中验证
import torch
torch.__version__
注意:安装模块的时候使用的是pytorch,在代码中使用的是torch。
pytorch的使用
1、张量Tensor
各种数值数据都可以称为张量。
- 常数:scaler:0阶张量
- 向量:vector:1阶张量
- 矩阵:matrix:2阶张量
- 3阶张量…n阶张量
2、张量的创建方法
- 使用python中的列表或者序列创建tensor
torch.tensor([1,2,3])
- 使用numpy中的数组创建tensor
torch.tensor(np.array([[1,2,3],[4,5,6]]))
- 使用torch中的api创建tensor
# 创建3行4列的空的tensor
torch.empty([3,4])
# 创建3行4列的全为0的tensor
torch.zeros([3,4])
# 创建3行4列的全为1的tensor
torch.ones([3,4])
# 创建3行4列的随机值的tensor,随机值的区间为[0,1)
torch.rand([3,4])
# 创建3行4列的随机整数的tensor,随机区间为[lower,high)
torch.randint(low = 0,high = 10,size = [3,4])
# 创建3行4列的随机整数的tensor,随机值的分布均值为0,方差为1
torch.randn([3,4])
3、pytorch中tensor的常用方法
- 获取tensor中的数据(当tensor中只有一个元素可用时):tensor.item()
t1 = torch.tensor(np.array(1))
t1.item()
- 转化为numpy数组
t2 = torch.tensor(np.array([[1,2,3],[4,5,6]]))
t2.numpy()
- 获取形状:tensor.size()
# size既可以获取整个tensor的形状,也可以获取某一维度的形状
t2.size()
t2.size(3)# 2为下标
# shape值可以获取整个tensor的形状
t2.shape
- 形状改变:tensor.view((3,4)),类似numpy 中的reshape,是一种浅拷贝,仅仅是形状发生改变,不会改变原来结果的值,会返回一个结果。
- 获取维数:tensor.dim()
- 获取最大/小值:tensor.max()、tensor.min()
- 转置:tensor.transpose()
transpose在转置是对二维数组可以直接进行转置,对于三维数组需要写清楚哪一列。
二维的时候tensor.transpose()可以换成tensor.t()
t3 = torch.tensor(np.arange(24).reshape(2,3,4))
# 结果为:tensor([[[ 0, 1, 2, 3],
# [ 4, 5, 6, 7],
# [ 8, 9, 10, 11]],
#
# [[12, 13, 14, 15],
# [16, 17, 18, 19],
# [20, 21, 22, 23]]], dtype=torch.int32)
t3.size()
torch.Size([2, 3, 4])
t3.transpose(0,1)# 对第0维和第1维进行转置
# permute将tensor的维度换位
t3.permute(2,1,0)# 交换0维和2维数据
- tensor[1,3]获取tensor中第一行第三列的值
- tensor[1,3]=5 是对tensor第一行第三列的位置进行赋值5
4、数据类型
tensor中的数据类型非常多,常见的如下:
具体可以看pytorch的官方文档
- 获取tensor的数据类型:tensor.dtype
- 创建数据的时候指定类型
torch.ones([2,3],dtype=torch.float32)
torch.tensor([2,3],dtype=torch.float32)# 此处必须是小写的tensor,后面的dtype可以指定数据类型
torch.LongTensor()
torch.FloatTensor()
- 类型的修改
tensor.float()/long()/int()
5、tensor的其他操作
- tensor的加法
x = torch.ones(5,3,dtype=torch.float)
y = torch.rand(5,3)
# 第一种相加
x+y
# 第二种相加
torch.add(x,y)
# 第三种相加
x.add(y)
# 带下划线的方法会对x进行就地修改
x.add_(y)
# tensor和数字进行操作
x+10
- CUDA中的tensor
torch.cuda这个模块增加了CUDA tensor的支持,能够在cpu和gpu上使用相同的方法操作tensor。
通过.to
方法能够把一个tensor转移到另外一个设备(比如从CPU转到GPU)
# 判断电脑是否支持GPU
torch.cuda.is_available()
# 判断GPU是否可用,如果可用的话就使用GPU,否则使用CPU的tensor
# cuda:0中的数字0指的是在电脑中有多个GPU时选择使用哪一个
# 下面是实例化一个device
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
# 下面可以使用.to进行转换,通过实例化一个CPU的device或者GPU的device,然后进行转换
a = torch.zeros([2,3])
a.to(device)