好文档 - 专业文书写作范文服务资料分享网站

Pytorch深度学习者必备技能教程(二)

天下 分享 时间: 加入收藏 我要投稿 点赞

一.Pytorch包介绍:

安装pytorch时,注意到还安装了一个pytorchvision的包,如下图所示,我们可以看到pytorch与pytorchvision会做不同的事情。pytorch主要是提供Numpy风格的Tensor、变量自动求导的BP算法、以及一些高级封装过的神经网络与损失函数等接口,主要来搭建神经网络。torchvision它主要是配合pytorch的独立计算机视觉数据集的一个工具库,可以对自带的数据集进行进一步处理,让神经网络运行起来更加方便、快速。

二.Pytorch内部接口介绍

Pytorch框架为搭建神经网络提供了许多高级的API接口,下面就从四个方面分别来介绍一下常用的接口功能。 Numpy形式的Tensor数据

Tensor是神经网络框架中重要的基础数据类型,可以简单理解为N维数组的容器对象,tensor之间的通过运算进行连接。

1).Torch 定义了七种 CPU tensor 类型和八种 GPU tensor 类型。默认Tensor类型为FloatTensor。

2).Numpy与Tensor数据格式之间相互转换 import torch

import numpy as np

“”“from_numpy(): 将numpy的ndarray数据格式转化为torch的LongTensor数据格式

numpy(): 将torch的LongTensor数据格式转化为numpy的ndarray数据格式”“”

np_data = np.arange(6).reshape(2, 3)

np_to_torch_data = torch.from_numpy(np_data_1) torch_to_np_data = np_to_torch_data.numpy()

# 运行之后,得到的结果如下: np_data:创建的Numpy格式数据 [[0 1 2] [3 4 5]]

np_to_torch_data: Numpy转化为Tensor格式数据: 0 1 2 3 4 5

[torch.LongTensor of size 2x3]

torch_to_np_data: Tensor转化为Numpy数据格式 [[0 1 2] [3 4 5]]

2).Tensor运算才是神经网络的重点(此处只演示常用的乘法和内积运算) import torch

import numpy as np

list_data_1 = [-2, -5, 2, 4] list_data_2 = [[1, 2], [3, 4]]

# 矩阵乘法

torch_data = torch.FloatTensor(list_data_2)

np_mm_data = np.matmul(list_data_2, list_data_2) torch_mm_data = torch.mm(torch_data, torch_data)

# dot:内积运算

np_dot_data = np.dot(list_data_2, list_data_2) # 会将乘积的每一项求和输出一维数据

torch_dot_data = torch.dot(torch_data, torch_data)

# 运行结果如下:

np_mm_data:Numpy格式数据相乘 [[ 7 10] [15 22]]

torch_mm_data:Tensor格式数据相乘 7 10 15 22

[torch.FloatTensor of size 2x2] np_dot_data:Numpy格式数据内积 [[ 7 10] [15 22]]

torch_dot_data:Tensor格式数据内积 30.0

变量Variable以及梯度

Torch里面的Variable是用来构建一个计算图,但是这张图与Tensorlow或Theano中的静态图相比是动态的。因此,Torch是没有占位符的,只能将变量传递给计算图。Variable将所有的计算步骤 (节点) 都连接起来, 最后进行误差反向传递的时候, 一次性将所有 variable 里面的修改幅度 (梯度) 都计算出来, 而 tensor 就没有这个能力。 from torch.autograd import Variable import torch

torch_tensor = torch.FloatTensor([[1, 2], [3, 4]]) # 构建Tensor

torch_var = Variable(torch_tensor, requires_grad=True) # 构建一个Variable

torch_var_out = torch.mean(torch_var * torch_var) #构建一个正向传递函数

torch_var_out.backward() # 进行反向传播

torch_grad = torch_var.grad # 初始化梯度值

torch_var_data = torch_var.data # 获取tensor类型数据

torch_var_data_to_numpy = torch_var_data.numpy() # 将Tensor格式数据转化为numpy格式数据

# 运行结果如下:

torch_tensor: Tensor数据类型 1 2 3 4

[torch.FloatTensor of size 2x2]

torch_var: Variable containing: 将Tensor数据放到Variable 1 2 3 4

[torch.FloatTensor of size 2x2]

torch_var_out: Variable containing: # 正向传递函数值 7.5000

[torch.FloatTensor of size 1]

torch_grad: Variable containing: # 获取到的初始化梯度值 0.5000 1.0000 1.5000 2.0000

[torch.FloatTensor of size 2x2]

torch_var_data: # 获取开始输入的Tensor数据 1 2 3 4

[torch.FloatTensor of size 2x2]

torch_var_data_to_numpy: # 将Tensor格式数据转化为numpy格式数据 [[1. 2.] [3. 4.]]

神经网络结构

网络层的接口都在torch.nn模块中,torch.nn.Module是所有网络的基类,一般网络都会继承它。

现在我们先让大家看一下怎么使用torch是构建一个简单的Linear神经网络,后边的教程会通过具体案例搭建不同结构的神经网络。

from torch.nn import Linear

from torch.nn import functional as F import torch

class Net(torch.nn.Module):

def __init__(self, n_feature, n_hidden, n_output): super(Net, self).__init__()

self.hidden = Linear(n_feature, n_hidden) self.predict = Linear(n_hidden, n_output)

def forward(self, x):

x = F.relu(self.hidden(x)) x = self.predict(x) return x

net = Net(n_feature=1, n_hidden=10, n_output=1) # 定义一个linear类型的神经网络

print(net)

# 显示结果: Net (

(hidden): Linear (1 -> 10)

(predict): Linear (10 -> 1) )

torch.nn.Module中实现的都是一个特殊的类,可以去查阅,他们都是以class xxx 来定义的,会自动提取可学习的参数 ,所以一般有超参数的网络层,就需要去调用此接口里面的函数。

torch.nn.functional中的函数,更像是纯函数,由

def function()定义,只是进行简单的数学运算而已,没有超参数学习的就可以调用functional里面的函数。

Pytorch深度学习者必备技能教程(二)

一.Pytorch包介绍:安装pytorch时,注意到还安装了一个pytorchvision的包,如下图所示,我们可以看到pytorch与pytorchvision会做不同的事情。pytorch主要是提供Numpy风格的Tensor、变量自动求导的BP算法、以及一些高级封装过的神经网络与损失函数等接口,主要来搭建神经网络。torchvision它主要是配合pytorch的独
推荐度:
点击下载文档文档为doc格式
6j9318vlet2xn8u9whcj4n25q6ny0j004ja
领取福利

微信扫码领取福利

微信扫码分享