科普知识
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之再探深度之谜),从下面的代码中,大家应该能够看到每一个层的维度变换,实在看不懂的,我相信只要大家认真的调试一定没问题,建议打印每一行代码的维度信息,一遍清楚的知道特征图在网络中是如何一步步变化的。
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
结语
本期分享结束了,模块很简单,希望同学们也多去联系联系哦,另外,本次我们新增了人脸表情数据集,需要的同学可以后台咨询哦。
编辑:玥怡居士|审核:小圈圈居士