list、numpy、tensor两两之间的相关转换
list 转 numpy
ndarray = np.array(list)
import numpy as np
a_list = [1, 2, 3]
a_np = np.array(a_list)
numpy 转 list
list = ndarray.tolist()
import numpy as np
a_list = [1, 2, 3]
a_np = np.array(a_list)
a_to_list = a_np.tolist()
用numpy创建tensor
tensor = torch.from_numpy(np.zeros(r, c))
row = 2
column = 3
a_tensor = torch.from_numpy(np.zeros((row,column)))
os.environ['CUDA_VISIBLE_DEVICES'] = '0, 1'
device = 'cuda' if torch.cuda.is_available() else 'cpu'
a_tensor_device = a_tensora_tensor.to(device)
list 转 torch.Tensor
tensor=torch.Tensor(list)
a_tensor =torch.Tensor(a_list)
torch.Tensor 转 list
Tensor不可直接转换为list , 需要先转换为numpy,然后在转换为list list = tensor.numpy().tolist()
a_list = a_tensor.numpy().tolist()
torch.Tensor 转换为numpy
ndarray = tensor.numpy() gpu上的tensor不能直接转为numpy ndarray = tensor.cpu().numpy()
a_np = a_tensor.numpy()
a_np_gpu = a_tensor.cpu().numpy()
tensor(PyTorch)的一些基本操作
tensor 设置数据类型
import torch
a = [1, 2, 3, 5]
b = [1.2, 3.3, 5.6]
da = torch.tensor(a)
db =torch.tensor(b)
daa = torch.tensor(a, dtype = torch.long)
tensor 创建注意的几个Tips
- torch.rand 和 torch.randn是两个不同的分布函数的随机数创建。
- torch.rand:返回一个张量,包含了从区间[0, 1)的均匀分布中抽取的一组随机数
- torch.randn:返回一个张量,包含了从标准正态分布(均值为0,方差为1,即高斯白噪声)中抽取的一组随机数
import torch
a = torch.rand(1,2)
a
b = torch.randn(1,2)
b
- torch.normal创建
torch.normal创建的是符合离散正态分布随机数,可以指定均值和方差。
torch.normal(2, 3, size=(1, 4))
- torch.full创建
torch.full创建任意指定维度而且指定值的tensor。
import torch
x=torch.full((2,3),1.2,dtype=torch.float)
x
[1.2000, 1.2000, 1.2000]])
单个元素tensor取值
单个元素tensor取值可以使用Tensor.item()
import torch
x = torch.randn(1)
y = x.item()
print('x: {}'.format(x))
print('y: {}'.format(y))
不同维度tensor最大值(最小值)的选择
torch.max, torch.min不仅会返回最大值、最小值,而且在指定的维度会返回其对应的位置,但是不指定维度直接使用只会返回最大值、最小值。torch.max和torch.min用法一样,只是一个是求最大值,一个是求最小值。
import torch
a = torch.randn(2,10)
a
torch.max(a)
a = torch.randn(2,3,4,3)
a
torch.max(a, 0)
torch.max(a, 1)
torch.max(a, 2)
torch.max(a, 3)
tensor 的拆分、拼接、加减乘除、乘方、开方、指数、对数、裁剪等操作
此处我就不写了,有份资料写的很详细:Pytorch张量高阶操作 注意: 直接使用torch.add(1)函数,张量的值会加1,但张量本身不会发生改变。而使用torch.add_(1)是直接在张量上进行加1操作,会改变张量的值。
tensor的切片和索引
tensor的切片和索引与numpy相同,可以参考:NumPy 切片和索引
几个和训练模型相关的pytorch的资料
以下的几份资料可以用作pytorch撰写神经网络模型的入门材料:
- PyTorch简明教程
- PyTorch深度学习:60分钟入门(Translation)
- torch的常用模块学习
最后也是最好的资料:官方的教程
参考资料
|