深度学习实战笔记-1-Pytorch详解
深度学习实战笔记
推荐资料↓
Pytorch 详解
通识
PyTorch 是一种开源深度学习框架,以出色的灵活性和易用性著称。这在一定程度上是因为与机器学习开发者和数据科学家所青睐的热门 Python 高级编程语言兼容。
pytorch 可以理解为是一个可以支持在GPU上进行数学计算的更高级的numpy库
它完全支持 GPU,并且使用反向模式自动微分技术BP,因此可以动态修改计算图形。这使其成为快速实验和原型设计的常用选择。

PyTorch 是 Facebook AI Research 和其他几个实验室的开发者的工作成果
PyTorch 采用了 Chainer 创新技术,称为反向模式自动微分
从本质上讲,它就像一台磁带录音机,录制完成的操作,然后回放,计算梯度
核心组件
张量
张量是一种核心 PyTorch 数据类型,类似于多维数组,用于存储和操作模型的输入和输出以及模型的参数
张量与 NumPy 的 ndarray 类似,只是张量可以在 GPU 上运行以加速计算
#### 图形
神经网络将一系列嵌套函数应用于输入参数,以转换输入数据。
深度学习的目标是通过计算相对损失指标的偏导数(梯度),优化这些参数(包括权重和偏差,在 PyTorch 中以张量的形式存储)
在前向传播中,神经网络接受输入参数,并向下一层的节点输出置信度分数,直至到达输出层,在该层计算分数误差
在一个称为梯度下降的过程中,通过反向传播,误差会再次通过网络发送回来,并调整权重,从而改进模型
图形是由已连接节点(称为顶点)和边缘组成的数据结构。每个现代深度学习框架都基于图形的概念,其中神经网络表示为计算的图形结构。
PyTorch 在由函数对象组成的有向无环图 (DAG) 中保存张量和执行操作的记录。在以下 DAG 中,叶是输入张量,根是输出张量。

在许多热门框架(包括 TensorFlow)中,计算图形是一个静态对象。PyTorch 基于动态计算图形,即,在运行时构建和重建计算图形,并使用与执行前向传递的计算相同的代码,同时还创建反向传播所需的数据结构。PyTorch 是首个运行时定义深度学习框架,与 TensorFlow 等静态图形框架的功能和性能相匹配,非常适合从标准卷积网络到时间递归神经网络等所有网络。
库文件

torch
Tensor
torch.is_tensor(obj)
:如果参数obj 是一个PyTorch 张量,则返回True。torch.is_storage(obj)
:如果obj 是一个PyTorch storage 对象,则返回True。torch.set_default_tensor_type(t)
:设置当前tensor 的默认数据类型。
1 | 1.2, 3]).dtype # initial default for floating point is torch.float32 torch.tensor([ |
torch.numel(input)->int
:返回input 张量中的元素个数。 input (Tensor):输入张量
1 | 1,2,3,4,5) a = torch.randn( |
torch.set_printoptions(precision=None, threshold=None, edgeitems=None, linewidth=None, profile=None)}
设置打印选项。完全参考自Numpy。 参数: – precision:浮点数输出的精度位数(默认为8 ) – threshold:阈值,触发汇总显示而不是完全显示(repr) 的数组元素的总数(默认 为1000) – edgeitems:汇总显示中,每维(轴)两端显示的项数(默认值为3) – linewidth:用于插入行间隔的每行字符数(默认为80)。Thresholded matricies will ignore this parameter. – profile:pretty 打印的完全默认值。可以覆盖上述所有选项(默认为short, full)
创建操作
torch.eye(n)

1 | 3) torch.eye( |
torch.from_numpy(ndarray) -> Tensor

torch.linspace(start, end, steps=100, out=None) -> Tensor

torch.logspace(start, end, steps=100, out=None) -> Tensor

torch.ones(*sizes, out=None)

torch.rand(*sizes, out=None) -> Tensor


torch.randn(*sizes, out=None) -> Tensor

torch.randperm(n, out=None) -> LongTensor

torch.arange(start, end, step=1, out=None) -> Tensor

torch.range(start, end, step=1, out=None) -> Tensor

torch.zeros(*sizes, out=None) -> Tensor

索引,切片,连接,换位
torch.cat(inputs, dimension=0) -> Tensor


torch.chunk(tensor, chunks, dim=0)

torch.gather(input, dim, index, out=None) -> Tensor


torch.index_select(input, dim, index, out=None) -> Tensor


torch.masked_select(input, mask, out=None) -> Tensor

1 | ?????? 出现bug 待搜资料补充 |
torch.nonzero(input, out=None) -> LongTensor


torch.split(tensor, split_size, dim=0)

torch.squeeze(input, dim=None, out=None)


torch.stack(squence, dim=0)

torch.t(input, out=None) -> Tensor

torch.transpose(input, dim0, dim1, out=None) -> Tensor


torch.unbind(tensor,dim=0)

torch.unsqueeze(input, dim, out=None)


随机抽样
torch.manual_seed(seed)
设定生成随机数的种子,并返回一个torch._C.Generator对象 参数:seed (int or long):种子._torch.initial_seed()
返回生成随机数的原始种子值(python long)torch.get_rng_state()
返回随机生成器状态(ByteTensor)torch.set_rng_state(new_state)
设定随机生成器状态。 参数:new_state (torch.ByteTensor):期望的状态。torch.default_generator = <torch._C.Generator object>
torch.bernoulli(input, out=None)


torch.multinomial(input, num_samples, replacement=False, out=None) -> LongTensor


torch.normal(means, std, out=None)




序列化
torch.save(obj, f, pickle_module=<module 'pickle' from '/home/jenkins/miniconda/lib/python3.5/pickle.py'>, pickle_protocol=2)

torch.load(f, map_location=None, pickle_module=<module 'pickle' from '/home/jenkins/miniconda/lib/python3.5/pickle.py'>)


并行化
torch.get_num_threads() -> int
torch.set_num_threads(int)

数学操作
按点操作
torch.abs(input, out=None) -> Tensor

torch.acos(input, out=None) -> Tensor


torch.add(input, value, out=None)




torch.addcdiv(tensor, value=1, tensor1, tensor2, out=None) -> Tensor

torch.addcmul(tensor, value=1, tensor1, tensor2, out=None) -> Tensor


torch.asin(input, out=None) -> Tensor

torch.atan(input, out=None) -> Tensor

torch.atan2(input1, input2, out=None) -> Tensor


torch.ceil(input, out=None) -> Tensor

torch.clamp(input, min, max, out=None) -> Tensor



torch.cos(input, out=None) -> Tensor

torch.cosh(input, out=None) -> Tensor


torch.div(input, value, out=None) -> Tensor


torch.exp(tensor, out=None) -> Tensor

torch.floor(input, out=None) -> Tensor


torch.fmod(input, divisor, out=None)

torch.frac(tensor, out=None) -> tensor

torch.lerp(start, end, weight, out=None)
torch.log(input, out=None) -> Tensor

torch.loglp(input, out=None) -> Tensor


torch.mul(input, value, out=None)




torch.neg(input, out=None) -> Tensor

torch.pow(input, exponent, out=None) -> tensor

s


torch.reciprocal(input, out=None) -> Tensor


torch.remainder(input, divisor, out=None) -> Tensor

torch.round(input, out=None) -> Tensor

torch.rsqrt(input, out=None) -> tensor


torch,sigmoid(input, out=None) -> tensor

torch.sign(input, out=None) -> tensor

torch.sin(input, out=None) -> tensor


torch.sinh(input, out=None) -> tensor

torch.sqrt(input, out=None) -> tensor


torch.tan(input, out=None) -> tensor


torch.tanh(input, out=None) -> tensor

torch.trunc(input, out=None) -> tensor


累积操作
torch.cumprod(input, dim, out=None) -> tensor


torch.cumsum(input, dim, out=None) -> tensor


torch.dist(input, other, p=2, out=None) -> tensor


torch.mean(input) -> float


torch.median()


torch.mode()


torch.norm(input, p=2) -> float

torch.prod()

torch.std()



torch.sum(input) -> tensor


torch.var(input) -> tensor


torch.eq()

torch.equal(tensor1, tensor2)

torch.ge()


torch.gt

torch.kthvalue


torch.le()

torch.lt()


torch.max()



torch.min()



torch.ne()

torch.sort()


torch.topk()

其他操作
torch.cross

torch.diag()


torch.histc()


torch.renorm()

torch.trace()

torch.tril()


torch.triu()


torch.dot()

torch.eig()

torch.inverse()


torch.mm()

torch.svd()



torch.bmm()


nn

container
torch.nn.Module


torch.nn.Sequential()

torch.nn.ParameterList()
