一、Dropout的概念
二、Dropout的使用
实际使用有:torchvision自带的alexnet模型
一、Dropout概念
随机失活。随机是指:有一定的概率让神经元失去活性。失活:权重等于0.
看如下示意图:
左边是正常的全连接神经网络。右边是加了dropout,打×的是失活了。
这就可以让神经元学习到更鲁棒的特征,减轻过度的依赖性,从而缓解了过拟合,降低方差,达到正则化的效果。
这个操作也会使得我们的模型更加多样化,因为每一次进行前向传播,神经元都是随机失活,所训练的模型都是不一样的。
为什么可以得到正则化的效果呢?可以从两个角度进行思考。
1. 从依赖性角度。一个神经元可以接受上层的输出,如果特别它特别依赖与某个特征,它可能会给这个的权值很大,而其他的权重很小。加了dropout之后,就不知道上一层哪些神经元会出现,所以就不会对某些神经元过度依赖。这时候就需要把经历平均地放到前面的神经元上。
2. 从数值的角度考虑。所有的权重在数值上是差不多大小的。这样就实现了权重的约束。
二、Dropout的使用
1. 注意事项
使用过程中,需要注意:
在测试的时候,需要乘以一个系数。
我的理解是,比如我跟张三一起做一个项目。今天我来了,张三不来,我干的很好。明天,我不来,张三来了,他也干的很好。干了很多天之后,最后结果就是我和张三都能单独的做项目。突然有一天我俩一起来了。。。我俩一起干半天估计就能把一天的活干完。
2. pytorch中dropout的使用
我们来看一下pytorch提供的dropout层:
例1:dropout的使用
#dropout_regularization.py
# -*- coding:utf-8 -*-
"""
@file name : dropout_regularization.py
@brief : dropout 使用实验
"""
import torch
import torch.nn as nn
import matplotlib.pyplot as plt
import sys, os
hello_pytorch_DIR = os.path.abspath(os.path.dirnam