从头开始了解PyTorch的简单实现(内含代码)

选自GitHub上,机器之心编译。

本教程展示了如何从了解张量开始到使用PyTorch训练简单的神经网络,是非常基础的PyTorch入门资源.PyTorch建立在Python和火炬库之上,并提供了一种类似Numpy的抽象方法来表征量(或多维数组),它还能利用GPU来提升性能。本教程的代码并不完整,详情请查看原Jupyter Notebook文档。

PyTorch 使入门深度学习变得简单,即使你这方面的背景知识不太充足。至少,知道多层神经网络模型可视为由权重连接的节点图就是有帮助的,你可以基于前向和反向传播,利用优化过程(如梯度计算)从数据中估计权重。

  • 必备知识:该教程假设读者熟悉 Python 和 NumPy。
  • 必备软件:在运行原 Jupyter Notebook 之前你需要安装 PyTorch。原 Notebook 有代码单元格可供验证你是否做好准备。
  • 必备硬件:你需要安装 NVIDIA GPU 和 CUDA SDK。据报告此举可能实现 10-100 的加速。当然,如果你没有进行此设置,那么你仍然可以在仅使用 CPU 的情况下运行 PyTorch。但是,记住,在训练神经网络模型时,生命苦短!所以还是尽可能使用 GPU 吧!

项目地址:https://github.com/hpcgarage/accelerated_dl_pytorch

1. 必要的 PyTorch 背景

  • PyTorch 是一个建立在 Torch 库之上的 Python 包,旨在加速深度学习应用。
  • PyTorch 提供一种类似 NumPy 的抽象方法来表征张量(或多维数组),它可以利用 GPU 来加速训练。

1.1 PyTorch 张量

PyTorch 的关键数据结构是张量,即多维数组。其功能与 NumPy 的 ndarray 对象类似,如下我们可以使用 torch.Tensor() 创建张量。

# Generate a 2-D pytorch tensor (i.e., a matrix)
pytorch_tensor = torch.Tensor(10, 20)
print("type: ", type(pytorch_tensor), " and size: ", pytorch_tensor.shape )

如果你需要一个兼容 NumPy 的表征,或者你想从现有的 NumPy 对象中创建一个 PyTorch 张量,那么就很简单了。

# Convert the pytorch tensor to a numpy array:
numpy_tensor = pytorch_tensor.numpy()
print("type: ", type(numpy_tensor), " and size: ", numpy_tensor.shape)

# Convert the numpy array to Pytorch Tensor:
print("type: ", type(torch.Tensor(numpy_tensor)), " and size: ", torch.Tensor(numpy_tensor).shape)

1.2 PyTorch vs. NumPy

PyTorch 并不是 NumPy 的简单替代品,但它实现了很多 NumPy 功能。其中有一个不便之处是其命名规则,有时候它和 NumPy 的命名方法相当不同。我们来举几个例子说明其中的区别:

1 张量创建

t = torch.rand(2, 4, 3, 5)
a = np.random.rand(2, 4, 3, 5)

2 张量分割

t = torch.rand(2, 4, 3, 5)
a = t.numpy()
pytorch_slice = t[0, 1:3, :, 4]
numpy_slice =  a[0, 1:3, :, 4]
print ('Tensor[0, 1:3, :, 4]:\n', pytorch_slice)
print ('NdArray[0, 1:3, :, 4]:\n', numpy_slice)

-------------------------------------------------------------------------
Tensor[0, 1:3, :, 4]:

 0.2032  0.1594  0.3114
 0.9073  0.6497  0.2826
[torch.FloatTensor of size 2x3]

NdArray[0, 1:3, :, 4]:
 [[ 0.20322084  0.15935552  0.31143939]
 [ 0.90726137  0.64966112  0.28259504]]

3 张量 Masking

t = t - 0.5
a = t.numpy()
pytorch_masked = t[t > 0]
numpy_masked = a[a > 0]

4 张量重塑

pytorch_reshape = t.view([6, 5, 4])
numpy_reshape = a.reshape([6, 5, 4])

1.3 PyTorch 变量

  • PyTorch 张量的简单封装
  • 帮助建立计算图
  • Autograd(自动微分库)的必要部分
  • 将关于这些变量的梯度保存在 .grad 中

结构图:

计算图和变量:在 PyTorch 中,神经网络会使用相互连接的变量作为计算图来表示。PyTorch 允许通过代码构建计算图来构建网络模型;之后 PyTorch 会简化估计模型权重的流程,例如通过自动计算梯度的方式。

举例来说,假设我们想构建两层模型,那么首先要为

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值