美文网首页
第二次打卡Task03、Task04、Task05

第二次打卡Task03、Task04、Task05

作者: supermanwasd | 来源:发表于2020-02-19 21:49 被阅读0次

过拟合、欠拟合及其解决方案

训练误差和泛化误差

训练误差和泛化误差

模型选择:model selection

模型选择:model selection

在比赛中一般采用5折的交叉验证,这样线下分数与线上分数差异不大,与训练集与测试集数据分布有关系,当分布不同是K折交叉验证效果一般较好

欠拟合和过拟合

欠拟合和过拟合

梯度消失、梯度爆炸

这个问题出现在神经网络层数较多的情况下。


梯度消失、梯度爆炸

在深层网络中尽量避免选择sigmoid和tanh激活函数,原因是这两个激活函数会把元素转换到[0, 1]和[-1, 1]之间,会加剧梯度消失的现象。

协变量偏移、标签偏移、概念偏移

1.协变量偏移和标签偏移可能同时发生.
2.标签偏移可以简单理解为测试时出现了训练时没有的标签。
3.概念偏移可以根据其缓慢变化的特点缓解。
4.如果数据量足够的情况下,确保训练数据集和测试集中的数据取自同一个数据集,可以防止协变量偏移和标签偏移是正确的。如果数据量很少,少到测试集中存在训练集中未包含的标签,就会发生标签偏移。

卷积神经网络进阶

深度卷积神经网络(AlexNet)

首次证明了学习到的特征可以超越⼿⼯设计的特征,从而⼀举打破计算机视觉研究的前状。


深度卷积神经网络
import time
import torch
from torch import nn, optim
import torchvision
import numpy as np
import sys
sys.path.append("/home/kesci/input/") 
import d2lzh1981 as d2l
import os
import torch.nn.functional as F

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

class AlexNet(nn.Module):
    def __init__(self):
        super(AlexNet, self).__init__()
        self.conv = nn.Sequential(
            nn.Conv2d(1, 96, 11, 4), # in_channels, out_channels, kernel_size, stride, padding
            nn.ReLU(),
            nn.MaxPool2d(3, 2), # kernel_size, stride
            # 减小卷积窗口,使用填充为2来使得输入与输出的高和宽一致,且增大输出通道数
            nn.Conv2d(96, 256, 5, 1, 2),
            nn.ReLU(),
            nn.MaxPool2d(3, 2),
            # 连续3个卷积层,且使用更小的卷积窗口。除了最后的卷积层外,进一步增大了输出通道数。
            # 前两个卷积层后不使用池化层来减小输入的高和宽
            nn.Conv2d(256, 384, 3, 1, 1),
            nn.ReLU(),
            nn.Conv2d(384, 384, 3, 1, 1),
            nn.ReLU(),
            nn.Conv2d(384, 256, 3, 1, 1),
            nn.ReLU(),
            nn.MaxPool2d(3, 2)
        )
         # 这里全连接层的输出个数比LeNet中的大数倍。使用丢弃层来缓解过拟合
        self.fc = nn.Sequential(
            nn.Linear(256*5*5, 4096),
            nn.ReLU(),
            nn.Dropout(0.5),
            #由于使用CPU镜像,精简网络,若为GPU镜像可添加该层
            #nn.Linear(4096, 4096),
            #nn.ReLU(),
            #nn.Dropout(0.5),

            # 输出层。由于这里使用Fashion-MNIST,所以用类别数为10,而非论文中的1000
            nn.Linear(4096, 10),
        )

    def forward(self, img):

        feature = self.conv(img)
        output = self.fc(feature.view(img.shape[0], -1))
        return output

使用重复元素的网络(VGG)

VGG:通过重复使⽤简单的基础块来构建深度模型。


VGG
def vgg(conv_arch, fc_features, fc_hidden_units=4096):
    net = nn.Sequential()
    # 卷积层部分
    for i, (num_convs, in_channels, out_channels) in enumerate(conv_arch):
        # 每经过一个vgg_block都会使宽高减半
        net.add_module("vgg_block_" + str(i+1), vgg_block(num_convs, in_channels, out_channels))
    # 全连接层部分
    net.add_module("fc", nn.Sequential(d2l.FlattenLayer(),
                                 nn.Linear(fc_features, fc_hidden_units),
                                 nn.ReLU(),
                                 nn.Dropout(0.5),
                                 nn.Linear(fc_hidden_units, fc_hidden_units),
                                 nn.ReLU(),
                                 nn.Dropout(0.5),
                                 nn.Linear(fc_hidden_units, 10)
                                ))
    return net

⽹络中的⽹络(NiN)

NiN:串联多个由卷积层和“全连接”层构成的小⽹络来构建⼀个深层⽹络。使⽤全局平均池化层对每个通道中所有元素求平均并直接⽤于分类。


NiN

GoogLeNet

1.由Inception基础块组成。
2.Inception块相当于⼀个有4条线路的⼦⽹络。
3.它通过不同窗口形状的卷积层和最⼤池化层来并⾏抽取信息,并使⽤1×1卷积层减少通道数从而降低模型复杂度。
4.可以⾃定义的超参数是每个层的输出通道数,我们以此来控制模型复杂度。


GoogLeNet

机器翻译及相关技术

机器翻译(MT):将一段文本从一种语言自动翻译为另一种语言,用神经网络解决这个问题通常称为神经机器翻译(NMT)。 主要特征:输出是单词序列而不是单个单词。 输出序列的长度可能与源序列的长度不同。

1.机器翻译和数据集
2.数据预处理
3.分词
4.载入数据集
5.模型

Encoder-Decoder
Encoder-Decoder
Sequence to Sequence模型
Sequence to Sequence模型
Beam Search
Beam Search

注意力机制与Seq2seq模型

注意力机制
Softmax屏蔽
超出2维矩阵的乘法
点积注意力
多层感知机注意力

Transformer

卷积神经网络基础

二维互相关运算

这个运算非常基础,发明他的人一定很有趣。通过这个运算能发现颜色的变换从而找到边缘。二维互相关(cross-correlation)运算的输入是一个二维输入数组和一个二维核(kernel)数组,输出也是一个二维数组,其中核数组通常称为卷积核或过滤器(filter)。卷积核的尺寸通常小于输入数组,卷积核在输入数组上滑动,在每个位置上,卷积核与该位置处的输入子数组按元素相乘并求和,得到输出数组中相应位置的元素。


二维互相关运算

代码实现

import torch 
import torch.nn as nn

def corr2d(X, K):
    H, W = X.shape
    h, w = K.shape
    Y = torch.zeros(H - h + 1, W - w + 1)
    for i in range(Y.shape[0]):
        for j in range(Y.shape[1]):
            Y[i, j] = (X[i: i + h, j: j + w] * K).sum()
    return Y

X = torch.tensor([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
K = torch.tensor([[0, 1], [2, 3]])
Y = corr2d(X, K)
卷积神经网络基础

卷积层的简洁实现

X = torch.rand(4, 2, 3, 5)
print(X.shape)

conv2d = nn.Conv2d(in_channels=2, out_channels=3, kernel_size=(3, 5), stride=1, padding=(1, 2))
Y = conv2d(X)
print('Y.shape: ', Y.shape)
print('weight.shape: ', conv2d.weight.shape)
print('bias.shape: ', conv2d.bias.shape)
in_channels (python:int) – Number of channels in the input imag
out_channels (python:int) – Number of channels produced by the convolution
kernel_size (python:int or tuple) – Size of the convolving kernel
stride (python:int or tuple, optional) – Stride of the convolution. Default: 1
padding (python:int or tuple, optional) – Zero-padding added to both sides of the input. Default: 0
bias (bool, optional) – If True, adds a learnable bias to the output. Default: True
卷积层输出张量(图像)的大小

leNet

LeNet 模型
LeNet 模型

卷积层块里的基本单位是卷积层后接平均池化层:卷积层用来识别图像里的空间模式,如线条和物体局部,之后的平均池化层则用来降低卷积层对位置的敏感性。

卷积层块由两个这样的基本单位重复堆叠构成。在卷积层块中,每个卷积层都使用的5*5窗口,并在输出上使用sigmoid激活函数。第一个卷积层输出通道数为6,第二个卷积层输出通道数则增加到16。
全连接层块含3个全连接层。它们的输出个数分别是120、84和10,其中10为输出的类别个数。

#import
import sys
sys.path.append("/home/kesci/input")
import d2lzh1981 as d2l
import torch
import torch.nn as nn
import torch.optim as optim
import time

#net
class Flatten(torch.nn.Module):  #展平操作
    def forward(self, x):
        return x.view(x.shape[0], -1)

class Reshape(torch.nn.Module): #将图像大小重定型
    def forward(self, x):
        return x.view(-1,1,28,28)      #(B x C x H x W)
    
net = torch.nn.Sequential(     #Lelet                                                  
    Reshape(),
    nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5, padding=2), #b*1*28*28  =>b*6*28*28
    nn.Sigmoid(),                                                       
    nn.AvgPool2d(kernel_size=2, stride=2),                              #b*6*28*28  =>b*6*14*14
    nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5),           #b*6*14*14  =>b*16*10*10
    nn.Sigmoid(),
    nn.AvgPool2d(kernel_size=2, stride=2),                              #b*16*10*10  => b*16*5*5
    Flatten(),                                                          #b*16*5*5   => b*400
    nn.Linear(in_features=16*5*5, out_features=120),
    nn.Sigmoid(),
    nn.Linear(120, 84),
    nn.Sigmoid(),
    nn.Linear(84, 10)
)

X = torch.randn(size=(1,1,28,28), dtype = torch.float32)
for layer in net:
    X = layer(X)
    print(layer.__class__.__name__,'output shape: \t',X.shape)

相关文章

  • 第二次打卡Task03、Task04、Task05

    过拟合、欠拟合及其解决方案 训练误差和泛化误差 模型选择:model selection 在比赛中一般采用5折的交...

  • 《动手学深度学习》第三天2020-02-14

    2) 第二次打卡内容(2月15日-17日)截止打卡时间:2/17-22:00 Task03:过拟合、欠拟合及其解决...

  • 第二次打卡 Task04

    一、机器翻译及相关技术 机器翻译(MT):将一段文本从一种语言自动翻译为另一种语言,用神经网络解决这个问题通常称为...

  • 第二次打卡 Task05

    一、卷积神经网络基础 卷积层得名于卷积运算,但卷积层中用到的并非卷积运算而是互相关运算。我们将核数组上下翻转、左右...

  • 第二次打卡 Task03

    一、过拟合、欠拟合及其解决方案 训练误差(training error)和泛化误差(generalization ...

  • 2月10日【叶妈】组清单体打卡文

    欣然老师第二次打卡文 瑞秋老师第二次打卡文 小梁老师打卡文 木子老师第二次打卡文

  • 5月组队学习05:高维异常检测

    Task05:高维异常检测(3天)● 了解集成方法的思想● 理解feature bagging原理● 掌握孤立森林...

  • task05

    卷积神经网络基础 二维卷积层 二维互相关运算 二维互相关(cross-correlation)运算的输入是一个二维...

  • task04

    机器翻译及相关技术 机器翻译(MT):将一段文本从一种语言自动翻译为另一种语言,用神经网络解决这个问题通常称为神经...

  • Task05

    一 卷积神经网络基础 二维卷积层,常用于处理图像数据。 1 二维互相关运算 二维互相关(cross-correla...

网友评论

      本文标题:第二次打卡Task03、Task04、Task05

      本文链接:https://www.haomeiwen.com/subject/hqjzfhtx.html