神经网络架构PYTORCH-几个概念

  使用Pytorch之前,有几个概念需要弄清楚.

什么是Tensors(张量)?

  这个概念刚出来的时候,物理科班出身的我都感觉有点愣住了,好久没有接触过物理学的概念了.

这个概念,在物理学中怎么解释呢?

  张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数。

用在神经网络架构PyTorch中,又是怎么的概念呢?

PyTorch Tensor 在概念上与 numpy 数组相同: Tensor 是一个n维数组, PyTorch 也提供了很多能在这些 Tensor 上操作的函数. 像 numpy 数组一样, PyTorch Tensor 也和numpy的数组对象一样不了解深度学习,计算图和梯度下降;它们只是科学计算的通用工具.

基本的使用例子:

构建一个 5x3 的矩阵, 未初始化的:

x = torch.Tensor(5, 3)
print(x)

构建一个随机初始化的矩阵:

x = torch.rand(5, 3)
print(x)

获得 size:

print(x.size())

 更更多例子见:http://pytorch.apachecn.org/cn/tutorials/beginner/blitz/tensor_tutorial.html

什么是autograd 自动求导包?

 autograd 自动求导包针对张量上的所有操作都提供了自动微分操作. 这是一个逐个运行的框架, 这意味着您的反向传播是由您的代码如何运行来定义的, 每个单一的迭代都可以不一样.

autograd.Variable 是包的核心类. 它包装了张量, 并且支持几乎所有的操作. 一旦你完成了你的计算, 你就可以调用 .backward() 方法, 然后所有的梯度计算会自动进行.

你还可以通过 .data 属性来访问原始的张量, 而关于该 variable(变量)的梯度会被累计到 .grad上去.

如果你想计算导数, 你可以在 Variable 上调用 .backward() 方法. 如果 Variable 是标量的形式(例如, 它包含一个元素数据), 你不必指定任何参数给 backward(), 但是, 如果它有更多的元素. 你需要去指定一个 grad_output 参数, 该参数是一个匹配 shape(形状)的张量.

  基本的例子:

import torch
from torch.autograd import Variable x = torch.randn(3)
x = Variable(x, requires_grad = True) y = x * 2
while y.data.norm() < 1000:
y = y * 2 print(y)

详细参考:http://pytorch.apachecn.org/cn/tutorials/beginner/blitz/autograd_tutorial.html#variable

上一篇:gbdt的面试要点总结-上篇


下一篇:Rails当你运行一个数据库回滚错误:ActiveRecord::IrreversibleMigration exception