Pytorch

2020-05-12  本文已影响0人  SunJi_

视频教程:
莫烦B站Pytorch动态神经网络

参考教程:
PyTorch 深度学习:60分钟快速入门
torch.autograd官方文档

1. 基础知识

1.1 Tensor的基本用法

#torch的一些函数
torch.Tensor
torch.rand
torch.add  
.cuda
torch.FloatTensor
Variable()
.backward
y.add_(x)

#array to tensor
b = torch.from_numpy(a)
#tensor to array
b = a.numpy()
#tensor移到GPU上
if torch.cuda.is_avaiable():
        prrint('succ')
        x = x.cuda()
        y = y.cuda()
        x + y


1.2 autograd 自动求梯度

autograd包为张量上的所有操作提供了自动求导,反向传播是根据代码如何运行来定义,并且每次迭代可以不同。autograd.Variable跟autograd.Function一起构建了非循环图,完成了前向传播的计算.

Variable

Variable结构图

Function

1.3 搭建神经网络

神经网络的典型训练过程如下:

  1. 定义神经网络模型,一些可学习的参数(如权重)
  2. 数据集输入
  3. 对输入进行处理,网络的向前传播
  4. 计算loss function(输出结果和正确值的差距大小)
  5. 反向传播求梯度
  6. 根据梯度更新网络的参数,最简单的更新方法:
    weight = weight - learning_rate * gradient
#搭建神经网络的一个例子
import torch
from torch.autograd import Variable
import torch.nn as nn
import torch.nn.functional as F

class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__()

        self.conv1 = nn.Conv2d(1,6,5)
        self.conv2 = nn.Conv2d(6,16,5)

        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84,10)

    def forward(self,x):
        x = F.max_pool2d(F.relu(self.conv1(x)), (2,2))
        x = F.max_pool2d(F.relu(self.conv2(x)), 2)
        x - x.vew(-1,self.num_flat_features(x))
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

    def num_flat_features(self,x):
        size = x.size()[1:]
        num_features = 1
        for s in size:
            num_features *= s
        return num_features
net = Net()
print(net)

#结果输出
Net(
  (conv1): Conv2d(1, 6, kernel_size=(5, 5), stride=(1, 1))
  (conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))
  (fc1): Linear(in_features=400, out_features=120, bias=True)
  (fc2): Linear(in_features=120, out_features=84, bias=True)
  (fc3): Linear(in_features=84, out_features=10, bias=True)
)

2. torch函数部分介绍

nn.Conv2d()

nn.Conv2d(self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True))
参数:
  in_channel: 输入数据的通道数,例RGB图片通道数为3;
  out_channel: 输出数据的通道数,这个根据模型调整;
  kennel_size: 卷积核大小,可以是int,或tuple;kennel_size=2,意味着卷积大小2, kennel_size=(2,3),意味着卷积在第一维度大小为2,在第二维度大小为3;
  stride:步长,默认为1,与kennel_size类似,stride=2,意味在所有维度步长为2, stride=(2,3),意味着在第一维度步长为2,意味着在第二维度步长为3;
  padding: 零填充

nn.Linear()


上一篇下一篇

猜你喜欢

热点阅读