深度学习实战篇之 ( 十三) -- TensorFlow之AlexNet

科普知识

在实践中,由于数据集不够大,很少有人从头开始训练网络。常见的做法是使用预训练的网络(例如在ImageNet上训练的分类1000类的网络)来重新fine-tuning(也叫微调),或者当做特征提取器。

  前言

粉丝老铁们,好久不见,不知道大家的深度学习到了什么程度呢?按照居士之家现在的规划是,两周分享一次文章,理论篇和实战篇交叉分享,本次分享,我们紧跟上次文章深度学习理论篇之 ( 十四) -- AlexNet之更上一楼来进行TensorFlow实战,希望大家仔细弄懂上一期文章才好进入今天的内容哦。

AlexNet之TensorFlow实战

1.数据准备

与上期文章不一样,我们换个数据集,本次采用五种类别的鲜花作为数据集,同样包含两个子集:训练集和验证集。

怎么样,鲜花好看吧!

另外,值得注意的是,由于是五分类,因此,我们的数据读取代码部分有了一点改变:

其余的代码跟第一次项目的一样的哦!

2.网络结构

# AlexNet 网络结构

# 输入:3*227*2227 代表三通道的彩色图像输入,图像大小为227*227

# 卷积层1:卷积核大小为11*11 卷积核个数:96,步长:4

# 最大池化1:采样区域:3*3, 步长:默认为1

# 卷积层2:积核大小为5*5 ,卷积核个数:256, 步长:1

# 最大池化2:采样区域:3*3, 步长:默认为1

# 卷积层3:积核大小为3*3 ,卷积核个数:384, 步长:1,采用padding。

# 卷积层4:积核大小为3*3 ,卷积核个数:384, 步长:1,采用padding。

# 卷积层5:积核大小为3*3 ,卷积核个数:256, 步长:1,采用padding。(在理论篇文章中遗漏了这一层,切记,注意)

# 最大池化3:采样区域:3*3, 步长:默认为1

# 全连接层1:输出84

# 全连接层2:输出5(五分类)

def inference(images, batch_size, n_classes,drop_rate):
    # 卷积层1:卷积核大小为11*11 卷积核个数:96,步长:4
    conv1 = Conv_layer(names = 'conv1_scope', input = images , w_shape = [11, 11, 3, 96], b_shape = [96], strid = [4, 4], is_padding = False)
    print("---------conv1:{}".format(conv1))
    # 最大池化1:采样区域:3*3, 步长:默认为1
    down_sample1 = Avg_pool_lrn(names = 'avg_pooling1', input = conv1 , ksize = [1, 2, 2, 1], is_lrn = False)
    print("---------down_sample1:{}".format(down_sample1))
    # 卷积层2:积核大小为5*5 ,卷积核个数:256, 步长:1
    conv2 = Conv_layer(names = 'conv2_scope', input = down_sample1 , w_shape = [5, 5, 96, 256], b_shape = [256], strid = [1, 1], is_padding = False)
    # 最大池化2:采样区域:3*3, 步长:默认为1
    down_sample2 = Avg_pool_lrn(names = 'avg_pooling2', input = conv2 , ksize = [1, 3, 3, 1], is_lrn = False)
    # 卷积层3:积核大小为3*3 ,卷积核个数:384, 步长:1,采用padding。
    conv3 = Conv_layer(names = 'conv3_scope', input = down_sample2 , w_shape = [3, 3, 256, 384], b_shape = [384], strid = [1, 1], is_padding = True)
    # 卷积层4:积核大小为3*3 ,卷积核个数:384, 步长:1,采用padding。
    conv4 = Conv_layer(names = 'conv4_scope', input = conv3 , w_shape = [3, 3, 384, 384], b_shape = [384], strid = [1, 1], is_padding = True)
    # 卷积层5:积核大小为3*3 ,卷积核个数:256, 步长:1,采用padding。(在理论篇文章中遗漏了这一层,切记,注意)
    conv5 = Conv_layer(names = 'conv4_scope', input = conv3 , w_shape = [3, 3, 384, 256], b_shape = [256], strid = [1, 1], is_padding = True)
    reshape = tf.reshape(conv3, shape=[batch_size, -1])
    dim = reshape.get_shape()[1].value
    # 全连接层1:输出84
    local_1 = local_layer(names = 'local1_scope', input = reshape , w_shape = [dim, 84], b_shape = [84])
     # 全连接层2:输出5
    local_2 = local_layer(names = 'local2_scope', input = local_1 , w_shape = [84, 5], b_shape = [5])
    print(local_2.shape)


    return local_2

3.训练过程

可能是数据集太小的原因,这个网络很快就拟合了,后期我们将会采用更大的数据集进行训练。

结语

今天的分享就到此结束了,网络层的构建也比较简单,比较注意的是最后的三个卷积层的输出和其输入的shape是一样的,老铁们可以自行print看看结果哦,此外由于数据集的类别发生了变化,因此相应的数据处理部分和网络的输出部分也做了改变,同时,不知道细心的老铁有没有发现,数据集处理部分似乎有点不合理,我是按照每个类别单独进行循环读取数据,那万一数据分类过多怎么办呢?因此,后期我们将会采用新的一种数据管道的读取方式,高效简洁,一起期待吧!

最后,我们的实战代码希望真心学习的你们一定下去自己实践哦,自己按照第一次项目的代码一步步改进哦,代码调试不通,可以私聊小编,通过自己一步步查找错误进行修正才是真正的学到知识哦!

编辑:玥怡居士|审核:小圈圈居士

往期精彩回顾

深度学习实战篇之 ( 十二) -- TensorFlow之LetNet-5

深度学习实战篇之 ( 十一) -- TensorFlow学习之路(八)

深度学习实战篇之 ( 十) -- TensorFlow学习之路(七)

过去的一年,我们都做了啥:

【年终总结】2021,辞旧迎新再出发

【年终总结】辞旧迎新,2020,我们再出发

IT进阶之旅

嗨,你还在看吗?

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值