PyTorch采用Python语言接口来实现编程,它就像带GPU的Numpy,与Python一样都属于动态框架。PyTorch继承了Torch灵活、动态的编程环境和用户友好的界面,支持以快速和灵活的方式构建动态神经网络,还允许在训练过程中快速更改代码而不妨碍其性能,支持动态图形等尖端AI模型的能力,是快速实验的理想选择。
PyTorch由4个主要的包组成:
PyTorch的Tensor,它可以是零维(又称为标量或一个数)、一维、二维及多维的数组。
Tensor自称为神经网络界的Numpy,它与Numpy相似,二者可以共享内存,且之间的转换非常方便和高效。它们最大的区别就是Numpy会把ndarray放在CPU中进行加速运算,而由Torch产生的Tensor会放在GPU中进行加速运算(假设当前环境有GPU)。
从接口的角度可以分为两类:
从修改方式的角度可以分为两类:
import torch
x = torch.tensor([1, 2])
y = torch.tensor([3, 4])
z = x.add(y)
print(z)
print(x)
x.add_(y)
print(x)
#结果:
# tensor([4, 6])
# tensor([1, 2])
# tensor([4, 6])
创建Tensor的方法有很多,可以从列表或ndarray等类型进行构建,也可根据指定的形状构建。
常见的创建Tensor的方法:
函数 | 功能 |
---|---|
Tensor(*size) | 直接从参数构造一个张量,支持list,numpy数组 |
eye(row, column) | 创建指定行数和列数的二维单位Tensor |
linspace(start, end, steps) | 从start到end,均匀切分成steps份 |
logspace(start, end, steps) | 从10 ^ start到10 ^ end,均匀切分成steps份 |
rand/randn(*size) | 生成[0,1)均匀分布标准正态分布数据 |
ones(*size) | 返回指定shape的张量,元素初始为1 |
zeros(*size) | 返回指定shape的张量,元素初始为0 |
ones_like(t) | 返回与t的shape相同的张量,元素初始为1 |
zeros_like(t) | 返回与t的shape相同的张量,元素初始为0 |
arange(start, end, steps) | 在区间上生成等间距序列张量 |
from_Numpy(ndarray) | 从ndarray创建一个张量 |
注意torch.Tensor与torch.tensor的几点区别:
在处理数据、构建网络层等过程中,经常需要了解Tensor的形状、修改Tensor的形状。
tensor常用修改形状的函数:
函数 | 说明 |
---|---|
size() | 返回张量的shape属性值 |
numel(input) | 计算元素个数 |
view(*shape) | 修改张量的shape,与reshape类似,但view返回的对象与源张量共享内存。reshape生成新的张量,而且不要求源张量是连续的。view(-1)展平数组 |
resize | 和view类似,但在size超出时重新分配内存空间 |
item | 若Tensor为单元素,则返回Python的标量 |
unsqueeze | 在指定维度增加一个1 |
squeeze | 在指定维度压缩一个1 |
torch.view与torch.reshape的异同:
(未完待续……)
更多pytorch用法可参考pytorch中文文档
本文内容根据《Python深度学习:基于PyTorch》书中第2章内容总结
一起加油吧ヾ(◍°∇°◍)ノ゙