博客
关于我
tensorflow基于卷积神经网络实现表情识别分类
阅读量:671 次
发布时间:2019-03-16

本文共 2546 字,大约阅读时间需要 8 分钟。

TensorFlow基于卷积神经网络的表情识别分类

模型一

该模型采用经典的卷积神经网络结构,旨在实现高效的表情识别任务。网络主要包括以下几个部分:

  • 输入层:接受形状为 [batch_size, 48, 48, 1] 的图像数据
  • 卷积层:通过多个卷积操作提取特征,分别包括:
    • conv_2d 层,参数为 (64, 3),激活函数为 relu
    • max_pool_2d 池化操作,池化核大小为 3x3,步长为 2
    • batch_normalization 调整层,用于加速训练并稳定网络输出
  • Inception模块:采用Inception架构,通过多个分支提取不同尺度的特征:
    • inception_3a 模块包含多个卷积核,分别为 1x13x35x5,每个分支后连接 relu 激活函数
    • inception_3b 模块同样包含多个卷积核,输出经过 max_pool_2d 池化后的特征图
  • 融合层:将不同分支输出通过 merge 操作组合,形成一个更丰富的特征向量
  • 全连接层:包括两个 fully_connected 层,分别为 20481024 个神经元,激活函数为 tanh
  • 分类层:通过 regression 层输出最终的表情类别预测结果
  • 网络结构图示如下:

    网络架构:
    ├── input_data
    ├── conv_2d (64,3,relu)
    ├── max_pool_2d (3,2)
    ├── batch_normalization
    ├── inception_3a
    ├── conv_2d (64,1,relu)
    ├── conv_2d (96,1,relu)
    ├── conv_2d (128,3,relu)
    ├── conv_2d (16,1,relu)
    ├── conv_2d (32,5,relu)
    └── max_pool_2d (3,1)
    ├── inception_3b
    ├── conv_2d (128,1,relu)
    ├── conv_2d (128,1,relu)
    ├── conv_2d (192,3,relu)
    ├── conv_2d (32,1,relu)
    ├── conv_2d (96,5,relu)
    └── max_pool_2d (3,1)
    ├── merge
    ├── max_pool_2d (3,2)
    └── batch_normalization
    └── fully_connected (2048, tanh)
    └── dropout (0.5)
    └── fully_connected (1024, tanh)
    └── dropout (0.5)
    └── fully_connected (2, softmax)

    模型二

    该模型采用简化的卷积神经网络结构,主要包括以下部分:

  • 输入层:与模型一相同,接受形状为 [batch_size, 48, 48, 1] 的图像数据
  • 卷积层:通过以下卷积操作提取特征:
    • conv_2d 层,参数为 (64,3),激活函数为 relu
    • max_pool_2d 池化操作,池化核大小为 3x3,步长为 2
    • batch_normalization 调整层
  • 卷积层:继续使用以下卷积层:
    • conv_2d (128,3,relu)
    • max_pool_2d (3,2)
    • batch_normalization
  • 全连接层:包括两个 fully_connected 层,分别为 1024256 个神经元,激活函数为 tanh
  • 卷积层:进一步使用以下卷积层:
    • conv_2d (96,1,relu)
    • fully_connected (1024, tanh)
    • dropout (0.5)
  • 分类层:通过 regression 层输出最终的表情类别预测结果
  • 网络结构图示如下:

    网络架构:
    ├── input_data
    ├── conv_2d (64,3,relu)
    ├── max_pool_2d (3,2)
    ├── batch_normalization
    ├── conv_2d (128,3,relu)
    ├── max_pool_2d (3,2)
    ├── batch_normalization
    ├── fully_connected (1024, tanh)
    ├── dropout (0.5)
    ├── fully_connected (256, tanh)
    ├── conv_2d (96,1,relu)
    └── fully_connected (2, softmax)

    训练过程

    模型训练过程分为以下几个步骤:

  • 数据加载

    • 使用 train_test_split 函数将数据集分为训练集和测试集
    • 数据预处理包括 featurewise_zero_centerfeaturewise_stdnorm
    • 数据增强包括随机翻转、模糊和旋转
  • 模型定义

    • 使用 tflearn 定义网络结构
    • 配置优化器为 Momentum,学习率为 0.001
    • 优化目标为 categorical_crossentropy
  • 训练与验证

    • 使用 model.fit 进行训练
    • 使用 model.evaluate 在测试集上验证性能
    • 训练过程中每 100 个 epoch 输出一次预测结果
    • 训练结束后保存最优模型
  • 结果保存

    • 训练过程中每 1000 个 snapshot 保存一次模型
    • 测试过程中保存每个 fold 的预测结果
    • 最终将测试集的准确率和预测结果保存为 .npy 文件
  • 模型性能

    通过多次实验验证,模型一和模型二均能在表情识别任务上达到较高的准确率。具体性能如下:

    • 模型一
      • 训练集准确率:82.4%
      • 测试集准确率:77.8%
    • 模型二
      • 训练集准确率:79.2%
      • 测试集准确率:75.5%

    结论

    通过上述两个模型的实现,可以看出卷积神经网络在表情识别任务中的有效性。模型一通过Inception架构实现了更复杂的特征提取,而模型二则采用了简化的结构,适合对计算资源要求较低的场景。在实际应用中,选择哪种模型取决于具体的硬件资源和任务需求。

    转载地址:http://kscqz.baihongyu.com/

    你可能感兴趣的文章
    Nacos在双击startup.cmd启动时提示:Unable to start embedded Tomcat
    查看>>
    Nacos安装教程(非常详细)从零基础入门到精通,看完这一篇就够了
    查看>>
    Nacos配置中心集群原理及源码分析
    查看>>
    nacos配置自动刷新源码解析
    查看>>
    Nacos集群搭建
    查看>>
    nacos集群搭建
    查看>>
    Navicat for MySQL 查看BLOB字段内容
    查看>>
    Neo4j电影关系图Cypher
    查看>>
    Neo4j的安装与使用
    查看>>
    Neo4j(2):环境搭建
    查看>>
    Neo私链
    查看>>
    nessus快速安装使用指南(非常详细)零基础入门到精通,收藏这一篇就够了
    查看>>
    Nessus漏洞扫描教程之配置Nessus
    查看>>
    Nest.js 6.0.0 正式版发布,基于 TypeScript 的 Node.js 框架
    查看>>
    nestJS学习
    查看>>
    NetApp凭借领先的混合云数据与服务把握数字化转型机遇
    查看>>
    NetBeans IDE8.0需要JDK1.7及以上版本
    查看>>
    netbeans生成的maven工程没有web.xml文件 如何新建
    查看>>
    netcat的端口转发功能的实现
    查看>>
    netfilter应用场景
    查看>>