Pytorch 学习 第一篇文章 What is Pytorch ?

What is Pytorch

  • 1、什么是Pytorch
  • 2、Pytorch之Tensor
    • 2.1 Tensor对象的创建
    • 2.2Tensor对象的操作
      • 2.2.1 Tensor的数学运算操作
      • 2.2.2 Tensor的reshape/resize操作
      • 2.2.3 Tensor与Numpy之间的转换
      • 2.2.4 Tensor的数据在GPU和CPU设备间移动

1、什么是Pytorch

  1. 一个灵活的深度学习框架
  2. GPU版的NUMPY
    第一点没什么好说的,第二点直觉感觉要牢记到心里,以后可能会大有用途。

2、Pytorch之Tensor

Tensor可以人为是Pytorch对Numpy封装后的产物,基于Tensor,可以让数据在CPU和GPU设备上自由转移。

2.1 Tensor对象的创建

Tensor对象的创建有两种方式,一种方式是间接创建,基于一些函数来返回Tensor对象,另外一种是直接创建,直接构建Tensor对象

  1. 间接创建
x = torch.empty(5, 3)
x = torch.rand(5, 3)
x = torch.zeros(5, 3, dtype=torch.long)

2.直接创建

x = torch.tensor([5.5, 3])

2.2Tensor对象的操作

2.2.1 Tensor的数学运算操作

数学运算操作分为inreplace操作和非inreplace操作,一般来讲,在pytorch中带“_”的的函数都为inreplace操作。

  1. 非 inreplace
    (1) x+y
    (2) torch.add(x,y)
  2. inreplace
    (1) y.add_(x)

2.2.2 Tensor的reshape/resize操作

x = torch.randn(4, 4)
y = x.view(16)#此时为1*16
z = x.view(-1, 8)  # the size -1 is inferred from other dimensions,此时为2*8

2.2.3 Tensor与Numpy之间的转换

本篇博客的最开头,讲过Tensor可以认为是加强版的Numpy,如何二者进行转换呢?

b=a.numpy()#Tensor转换为Numpy
a=torch.from_numpy(b)#Numpy转换为Tensor

注意点: 经过上述操作的a和b会指向同一块内存地址,修改任何一方都会导致另一方随之变化。
有趣点: 可以看到从Tensor转换为Numpy,是一种对象的操作方式,这是因为Torch是后来者,Numpy毕竟是大佬,因此Torch能够,也不得不在Tensor的类中添加numpy()的方法,来实现转换功能;而从Numpy转换为Tensor,Numpy作为先出现的大佬,它不会知道也不会鸟后面出现的小弟Pytorch,因此不会有转换为Tensor的接口,Pytorch一厢情愿的转,只能利用函数来实现,感觉在Tensor类以方法的形式实现也行吧。也就是说前者是一种对象操作方式,后者是一种函数式操作方式。

2.2.4 Tensor的数据在GPU和CPU设备间移动

1.在创建Tensor时就指明设备

if torch.cuda.is_available():
    device = torch.device("cuda")          # a CUDA device object
    y = torch.ones_like(x, device=device) 

2.使用中想切换设备,利用to()函数

print(x.to("cpu", torch.double))

写于2018年的最后一天

你可能感兴趣的:(pytorch系统学习,Pytorch,深度学习框架,Tensor)