【Pytorch神经网络理论篇】 02 Pytorch快速上手(二)GPU与CPU张量切换+具有随机值的张量+张量的数学运算

172 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1 在GPU与CPU上定义张量

1.1 GPU与CPU的张量相互转化

import torch
# 创建一个张量
a = torch.FloatTensor()
# 将CPU上的张量在GPU所管理的内存中重新创建
b = a.cuda()
print(b) # 输出 tensor([], device='cuda:0')
# 将GPU上的张量创建到CPU上
print(b.cpu()) # 输出   tensor([])

1.2 在GPU上定义张量

import torch
# 创建一个张量
a = torch.tensor([4],device='cuda')#在GPU上定义一个张量
print(a) # 输出 tensor([4], device='cuda:0')

1.3 指定GPU设备运行的两种方法

1.3.1 代码方式

import torch
# 创建一个张量
a = torch.FloatTensor([4])
print(a.to('cuda:0')) # 输出 tensor([4.], device='cuda:0')

1.3.2 命令行方式

CUDA_VISIBLE_DEVICES=1     # 只有编号为1的GPU对程序是可见的,在代码中gpu[0]指的就是这块儿GPU
CUDA_VISIBLE_DEVICES=0,2,3 # 只有编号为0,2,3的GPU对程序是可见的,在代码中gpu[0]指的是第0块儿,
                           # gpu[1]指的是第2块儿,gpu[2]指的是第3块儿
CUDA_VISIBLE_DEVICES=2,0,3 # 只有编号为0,2,3的GPU对程序是可见的,但是在代码中gpu[0]指的是第2块儿,
                           # gpu[1]指的是第0块儿,gpu[2]指的是第3块儿

使用方法1:

CUDA_VISIBLE_DEVICES=0 python 自己的代码.py

使用方法2:

# 在代码首行添加如下代码
import os
os.environ["CUDA_VISIBLE_DEVICES"] = 0 # 将当前代码放置在第一个GPU上运行

2 具有随机值的张量

2.1 随机种子的设置

### 所有的随机值都是由随机种子设定的
import torch
torch.initial_seed() # 查看随机种子
torch.manual_seed(2) # 设置随机种子

2.2 生成指定形状的随机值

import torch
a = torch.rand(2,3) #指定形状
print(a) # 输出 tensor([[0.3513, 0.7726, 0.8044],[0.5643, 0.9863, 0.6723]])

2.3 生成线性空间的随机值

import torch
### torch.arange() 取值范围只包括初始值,不包括结束值
a = torch.arange(1,10,step=2) # 110之间,按照步长为2进行取值
print(a) # tensor([1, 3, 5, 7, 9])
### torch.linspace() 取值范围只包括初始值,也包括结束值
b = torch.linspace(1,9,steps=5)# 19之间,均匀取5个值
print(b) # tensor([1., 3., 5., 7., 9.])

2.4 生成对数空间的随机值

import torch
print(torch.logspace(1,9,steps=5)) #同torch.linspace()
# 输出 tensor([1.0000e+01, 1.0000e+03, 1.0000e+05, 1.0000e+07, 1.0000e+09])

2.5 生成未初始化的矩阵

import torch
print(torch.empty(1,2)) # 生成指定形状的未初始化的矩阵
# tensor([[6.6718e+35, 2.3473e-38]]) 

2.6 更多随机值生成函数

例如:伯努利分布、柯西分布、指数分布、几何分布、对数正态分布、正态分布、均匀分布、连续均匀分布

3 张量的数学运算

3.1 运算函数与运算方法

import torch
a = torch.FloatTensor([4])
print(a) # 输出 tensor([4.])
### Pytorch重载运算符
print(a+a) # 输出 tensor([8.])
### Pytorch的加法函数
b = torch.add(a,a) 
print(b) # 输出 tensor([8.])
### Pytorch的指定输出函数
torch.add(a,a,out=b)
print(b) # 输出 tensor([8.])

3.2 自变化运算函数

import torch
a = torch.FloatTensor([4])
### 自变化运算函数是指:在变量本身的基础上做运算,最终结果会作用于自己本身
a.add_(a)
print(a) # 输出 tensor([8.])