机器学习/深度学习入门:AlexNet模型实现

本文介绍了AlexNet模型,它是ILSVRC2012年的冠军。AlexNet引入了ReLU激活函数,Dropout策略,重叠最大池化和LRN层,以及多GPU训练和数据增强技术,有效防止过拟合并提升模型性能。同时,文章提供了TensorFlow和Pytorch的实现代码。

AlexNet:ILSVRC2012年冠军

改进

(1)成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。虽然ReLU激活函数在很久之前就被提出了,但是直到AlexNet的出现才将其发扬光大。

(2)训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合。Dropout虽有单独的论文论述,但是AlexNet将其实用化,通过实践证实了它的效果。在AlexNet中主要是最后几个全连接层使用了Dropout。

(3)在CNN中使用重叠的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。

(4)提出了LRN层(Local Response Normalization局部响应归一化),对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力

(5)多GPU训练(两个GPU,每个GPU显存中存储一半的神经元参数)和数据增强(降低过拟合)

输入层:227*227*3===》C1(relu)、lrn1、pool1(最大池化)===》C2(relu)、lrn2、pool2(最大池化)===》C3(relu)===》C4(relu)===》C5(relu)===》F6、Dropou6===》F7、Dropout7===》F8(输出层)

TensorFlow实现

网络结构如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/7/23 9:53
# @Author  : HJH
# @Site    : 
# @File    : AlexNet.py
# @Software: PyCharm


import tensorflow as tf
import numpy as np


class AlexNet(object):

    def __init__(self, x, keep_prob, num_classes, skip_layer,
                 weights_path='DEFAULT'):
        self.X = x
        self.NUM_CLASSES = num_classes
        self.KEEP_PROB = keep_prob
        self.SKIP_LAYER = skip_layer
        if weights_path == 'DEFAULT':
            self.WEIGHTS_PATH = '../bvlc_alexnet.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值