深度学习实战篇之 ( 十五) -- TensorFlow之GoogLeNet

2022-06-01 20:15:55 浏览数 (1)

科普知识

AAAI的英文全称是 the Association for the Advance of Artificial Intelligence,中文意思是国际先进人工智能协会。

国际先进人工智能协会(American Association for Artificial Intelligence)国际先进人工智能协会是人工智能领域的主要学术组织之一。该协会主办的年会(AAAI, The National Conference on Artificial Intelligence)是一个主要的人工智能学术会议。

# 前言

SEP.

理论篇上一期文章我们学习了GoogLeNet网络,其核心的是Inception模块,通过该模块可以将神经网络设计的得很深,今天我们将通过TensorFlow进行Inception模块的实战,希望大家喜欢。

TensorFlow之Inception实战

本期实战,我们采用人脸表情数据集进行训练,模型主要是Inception模块,由于只是展示demo,我们只设计简单的一层就好,代码将会开源到gitee.

1.数据准备

本次数据采用RAFDB人脸表情数据集,包含七个分类:平和,开心,悲伤,

惊讶,厌恶,愤怒,害怕。与之前的数据集类似,该人脸表情数据集也包含

训练集合测试集,每个集中没别包含7个文件夹(表情)。与之前的数据集

一样,该数据集包含训练集与测试集,每个集包含七个文件夹(表情)

一些样本展示

2.网络结构

网络结构如上,由于改模块很简单,我们就不仔细分析网络的参数了,具体的参数可以从上一期文章中看到哦(深度学习理论篇之 ( 十六) -- GoogLeNet之再探深度之谜),从下面的代码中,大家应该能够看到每一个层的维度变换,实在看不懂的,我相信只要大家认真的调试一定没问题,建议打印每一行代码的维度信息,一遍清楚的知道特征图在网络中是如何一步步变化的。

代码语言:javascript复制
def inference(images, batch_size, n_classes,drop_rate):
    
    #左1x1 conv
    conv1 = Conv_layer(names = 'conv_block1', input = images , w_shape = [1, 1, 3, 128], b_shape = [128], strid = [1, 1])
    # print("******** conv1 {} ".format(conv1.shape))

    #1x1 conv
    conv2 = Conv_layer(names = 'conv_block2', input = images , w_shape = [1, 1, 3, 64], b_shape = [64], strid = [1, 1])
    # 第二层卷积1
    conv2_1 = Conv_layer(names = 'conv_block2_1', input = conv2 , w_shape = [3, 3, 64, 192], b_shape = [192], strid = [1, 1])
    # print("******** conv2_1 {} ".format(conv2_1.shape))

    #1x1 conv
    conv3 = Conv_layer(names = 'conv_block3', input = images , w_shape = [1, 1, 3, 64], b_shape = [64], strid = [1, 1])
    # 第二层卷积2
    conv3_1 = Conv_layer(names = 'conv_block3_1', input = conv3 , w_shape = [5, 5, 64, 96], b_shape = [96], strid = [1, 1])
    # print("******** conv3_1 {} ".format(conv3_1.shape))

    #3x3 max pooling
    pool_1 = Max_pool_lrn(names = 'pooling1', input = images , ksize = [1, 3, 3, 1], is_lrn = False)
    # 第二层卷积2
    conv4 = Conv_layer(names = 'conv_block4', input = pool_1 , w_shape = [1, 1, 3, 64], b_shape = [64], strid = [1, 1])
    print("******** conv4 {} ".format(conv4.shape))

    concat_op = tf.concat([conv1, conv2_1, conv3_1, conv4],3)
    conv5 = Conv_layer(names = 'conv_block5', input = concat_op , w_shape = [1, 1, 480, 64], b_shape = [64], strid = [1, 1])
    # print("******** concat_op {} ".format(concat_op.shape))

如果仔细查看网络结构,我在输出的最后一层添加了一层1x1卷积,目的是为啥呢,

当然是家里没矿,只能降低维度了。

3.训练过程

源码获取:https://gitee.com/fengyuxiexie/inception

END

结语

本期分享结束了,模块很简单,希望同学们也多去联系联系哦,另外,本次我们新增了人脸表情数据集,需要的同学可以后台咨询哦。

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

0 人点赞