图像情感分析模型是基于卷积神经网络建立的,卷积神经网络的构建用了keras库,具体代码实现以及代码运行在下一篇贴出。

模型包括3个卷积层、2个池化层、4个激活函数层、2个Dropout层、2个全连接层、1个Flatten层和最终分类层。

图片初始化是100*100大小,卷积层卷积核的个数都是32个,大小是13*13,经过三层卷积和两层池化,每张图片处理为4*4大小,经Flatten层压扁成一维进入全连接层,第一个全连接层指定了128个神经元,进入Dropout层,目的是为了防止过拟合,当然在Flatten层之前还有一个Dropout层,最后是一个全连接层和一个分类层,激活函数层伴随着每一个卷积层之后和第一个全连接层之后。模型训练迭代次数选择13次。

具体实现过程如图1所示:

图1 图像情感分析模型

建立模型

卷积层:主要是Convolution2D()函数。2D代表这是一个2维卷积,其功能为对2维输入进行卷积计算。我们的图像数据尺寸为100 * 100,所以在这里需要使用2维卷积函数计算卷积。所谓的卷积计算,其实就是利用卷积核逐个像素、顺序进行计算,简化过程如图2:

图2 卷积计算

上图中事例是保留边界像素算法,也就是卷积过后和原图像大小一致,处理边界值过程中,如果部分区域越界,就可以用0进行填充。计算过程中,将卷积核中心对准图像第一个像素,在这里就是像素值为237的那个像素。卷积核覆盖的区域,其下所有像素取均值然后相加:

C(1)= 0 * 0.5 + 0 * 0.5 + 0 * 0.5 + 0 *0.5 + 237 * 0.5 + 203 * 0.5 + 0 * 0.5 + 123 * 0.5 + 112 * 0.5

通过类似的计算,将计算结果作为原来像素点处的特征学习值,接着学习下一个卷积核中心覆盖的像素点,直到所有像素点都被学习完。在这个过程中,卷积核依次覆盖所有像素点,最终结果还是得到一个二维矩阵,是学习过的图像。二维矩阵可以和原矩阵大小相同,也可以不相同,这取决于是否保留边界,保留边界的话会得到一个大小相同的矩阵图像,若丢掉边界像素,那么在卷积过程中就会以卷积核覆盖区域不越界的像素开始计算。如图3.8所示,如果选择丢掉图像边界特征,卷积核就会从(2,2)像素点开始卷积计算,到(3,3)像素点结束计算,这样得到的是一个2 * 2的矩阵表示的图像。在本次毕设的模型中,卷积层采用丢掉边界特征的方式来处理图像边界:

第一个卷积层包含32个卷积核,每个卷积核大小为13 * 13, 值为“same”意味着我们采用保留边界特征的方式进行卷积计算,而值“valid”则代表丢掉边界像素。图像经过第一层卷积层,大小变为32* 88 * 88大小。

激活函数层:以relu(Rectified Linear Units,修正线性单元)函数为例,它的数学形式如下:

f(x)=max(0,x)

这个函数非常简单,小于0的输入,输出全部为0,大于0的则输出与输入相等。该函数的优点是收敛速度快,对于不同的需求,我们可以选择不同的激活函数,一般的激活函数包括:softplus、softsign、tanh、sigmoid、hard_sigmoid、linear,激活函数层属于人工神经元的一部分,所以我们可以在构造层对象时通过传递activation参数设置。

池化层:可以缩小输入的特征图,简化网络计算复杂度,而且能够进行特征压缩,突出主要特征。我们通过调用MaxPooling2D()函数建立池化层,这个函数采用最大值池化法,这个方法选取覆盖区域的最大值作为区域主要特征组成新的缩小后的特征图,具体过程简化后如图3所示:

图3 池化过程

池化层最重要的地方是可以降低维度,因为它是将最大值作为此学习范围的输出,所以能够保留住此范围里的显著特征,虽然只能知道显著特征是什么,却得不到显著特征的发生位置,但很多问题不需要我们得到具体位置,只需要知道这一区域学习的最大特征。由此池化层能够为图像识别提供平移和旋转不变性。即使图像平移或旋转几个像素,得到的输出值也基本一样,因为每次最大值运算得到的结果总是一样的。经过第一层池化层,图片数据变为32* 44 * 44。采用maxpooling,poolsize为(2,2)。代码如下:

Dropout 层:随机断开一定百分比的输入神经元连接,以防止过拟合。过拟合意思是训练数据预测准确率很高,测试数据预测准确率很低,用图形表示就是拟合曲线较尖,不平滑。导致这种现象的原因是模型的参数很多,但训练样本太少,导致模型拟合过度。为了解决这个问题,Dropout 层将随机减少模型参数,让模型变得简单,而越简单的模型越不容易产生过拟合。代码中Dropout ()函数只有一个输入参数,即指定抛弃比率,范围为0~1之间的浮点数,其实就是百分比。这个参数亦是一个可调参数,我们可以根据训练结果调整它以达到更好的模型成熟度。本次模型中,比率选择是0.5。

Flatten层:截止到Flatten层之前,在网络中流动的数据还是多维的(对于我们的程序就是2维的),经过多次的卷积、池化、 之后,到了这里就可以进入全连接层做最后的处理了。全连接层要求输入的数据必须是一维的,因此,我们必须把输入数据“压扁”成一维后才能进入全连接层,Flatten层的作用即在于此。

全连接层 :全连接层的作用就是用于分类或回归,对于我们来说就是分类。keras将全连接层定义为Dense层,其含义就是这里的神经元连接非常“稠密”。我们通过Dense()函数来定义全连接层。这个函数的一个必填参数就是神经元个数,其实就是指定该层有多少个输出。在我们的代码中,第一个全连接层指定了512个神经元,也就是保留了512个特征输出到下一层。添加512节点的全连接并且进行激活,激活函数用relu。再经过一层Dropout层,防止过拟合。添加输出2个节点,经过softmax层,进行输出。

图片情感分析(2):图像情感分析模型相关推荐

  1. DL之CNN:利用CNN算法实现对句子分类+进行情感分析(预测句子情感)

    DL之CNN:利用CNN算法实现对句子分类+进行情感分析(预测句子情感) 目录 CNN算法设计思路 代码实现 CNN算法设计思路 b 代码实现 后期更新--

  2. NLP之TEA之CNN:利用CNN算法实现对句子分类+进行情感分析(预测句子情感)

    NLP之TEA之CNN:利用CNN算法实现对句子分类+进行情感分析(预测句子情感) 目录 CNN算法设计思路 代码实现 CNN算法设计思路 b 代码实现 后期更新--

  3. python 情感分析实例_情感分析实例

    以下的样本代码用Pyhton写成,主要使用了scrapy, sklearn两个库. 所以,什么是情感分析(Sentiment Analysis)? 情感分析又叫意见挖掘(Opinion Mining) ...

  4. 情感分析中的情感分析机器人:基于语音识别的方法

    作者:禅与计算机程序设计艺术 <情感分析中的情感分析机器人:基于语音识别的方法> 引言 1.1. 背景介绍 随着人工智能技术的快速发展,自然语言处理(Natural Language Pr ...

  5. 武汉大学计算机学院 情感分析,跨语言情感分析方法研究

    跨语言情感分析方法研究 [摘要]:近些年来,随着自然语言处理技术和机器学习技术的发展,单语文本的情感分析已得到深入的研究和发展,各种关于词级.超词级.句子级.篇章级的情感分析研究已逐渐趋于成熟.然而, ...

  6. python情感分析算法_Python 情感分析

    今天修改了情感分析的程序发现之前有一些不足.这个最简单的实现一个string情感分析的小函数,加载了积极词典,消极词典,程度词典,以及一些反转词等的词典.这里我没有做符号的分析和判断,因为的东西暂时用 ...

  7. [转载] python字符串情感分析_python进行情感分析

    参考链接: 在Python中从字符串中删除停用词stop word python进行情感分析 发布时间:2018-02-10 09:57, 浏览次数:549 , 标签: python 一.数据获取 在 ...

  8. java 情感分析_Alink中文情感分析示例(Java版本)

    Alink是基于Flink的机器学习算法平台,欢迎访问Alink的github获取下载链接及更多信息.alibaba/Alink​github.com 也欢迎加入钉钉群进行交流. 情感分析是对带有情感 ...

  9. 基于python的情感分析案例-基于情感词典的python情感分析

    Python Python开发 Python语言 基于情感词典的python情感分析 近期老师给我们安排了一个大作业,要求根据情感词典对微博语料进行情感分析.于是在网上狂找资料,看相关书籍,终于搞出了 ...

  10. 【自然语言处理】【细粒度情感分析】细粒度情感分析:了解文本情感的What、How、Why

    细粒度情感分析:了解文本情感的What.How.Why Knowing What,How and Way:A Near Complete Solution for Aspect-based Senti ...

最新文章

  1. java b2b2c开源商城系统源码
  2. android:activity的生命周期及它们之间的传值
  3. opencv 2d人脸姿态计算
  4. vue 记录滚动位置_vue 路由跳转记住滚动位置,返回时回到上次滚动位置
  5. 使用隐式Intent打开系统浏览器的百度网页
  6. python各种推导式详解
  7. linux c socket通信
  8. 操作系统02进程管理Process_Description_and_Control
  9. nginx proxy_pass 使用变量报错_nginx自定义变量与内置预定义变量
  10. wpf 深度复制控件,打印控件
  11. (转载)MyEclipse 9.1配置ADT(Link方式配置Android开发环境)
  12. Android之TextView属性大全
  13. win10 -- 增加新建 TXT 文档快捷键
  14. 项目经理应该知道的五种项目管理工具
  15. JavaScript实现的放大镜放大图片效果
  16. 拼多多的“最初一公里”战事
  17. C++后端开发面试题精选
  18. SQL Server 非对称秘钥管理
  19. 数据库日常之修改MySQL数据库密码的方法
  20. opencv创建和显示窗口

热门文章

  1. GoDaddy获取的ssl证书,在nginx环境下部署问题
  2. dell-precision-7730笔记本工作站安装centos7操作系统办法
  3. 左神数据结构与算法(中级提升)——02
  4. [附源码]Python计算机毕业设计SSM基于Java的健身房管理系统(程序+LW)
  5. 通过定时器Timer方式实现时间的精准控制
  6. 【机器学习】Pandas入门
  7. Go cobra 库学习
  8. Java word 转 pdf jacob方法
  9. 编译原理 —— DFA的化简
  10. 2017年终总结(小巫)