PyTorch,简单来说,就是以Python为基础,支持GPU计算和深度学习的平台。
Tensors
张量可以视作NumPy的ndarray,区别在于张量可以使用GPU加速。
由于PyTorch是在Python的基础上设计的,所以很多操作和Python很相像。
在使用张量前,先引入torch包:
可以在构建时指定数据类型,但要注意的一点是,类型前必须调用torch包,否则会报错:
也可以直接使用数据定义张量,张量的数据类型由输入数据决定:
还可以使用函数建立张量:
这里torch.size实际上是个tuple,可以对其做tuple的运算:
Operations
PyTorch的矩阵加减没什么好说的,可以用符号,也可以用函数来做,值得一提的是它在使用函数时可以将结果直接赋予变量。
减的函数是sub,点乘为mul,相乘为mm,除为div。此外,在函数名后加_,会让变量存储计算后的结果。
类似NumPy中的一些操作也是可以的:
reshape的函数是view——我的理解是相当于你划了指定长宽的框,然后把传进去的矩阵的值依次按顺序填好:
-1的意思是缺省,它的值根据其他值来推出:
-1可以放在任何位置,而且可以用于多维矩阵:
当你的张量只有一个元素时,可以使用item来获取其值:
这可以利用循环结构或随机存取来获得张量的值。
NumPy Bridge
可以使用类型转换函数将张量转换为NumPy,但反过来不行。
当张量存储在CPU中时,它和由它转换的NumPy共享存储,改变其中一个的值也会同步改变另一个:
从NumPy转换为张量要稍复杂些:
我们可以使用.to方法来将张量移动到其它设备上计算:
在运行后可以很明显地感到,结果比在cpu上运行要出得慢一些。这些时间应该是张量传递到cuda再传递回来所花的时间,由于数据量比较小,传递多花的时间要比计算节省的时间多很多。