keras实践(一): multi-label神经网络
来源:互联网 发布:c语言输入学生成绩 编辑:程序博客网 时间:2024/05/21 20:22
前沿
本篇记录一下自己项目中用到的keras相关的部分。由于本项目既有涉及multi-class(多类分类),也有涉及multi-label(多标记分类)的部分,multi-class分类网上已经很多相关的文章了。这里就说一说multi-label的搭建网络的部分。之后如果有时间的时候,再说一说cross validation(交叉验证)和在epoch的callback函数中处理一些多标签度量metric的问题。
multi-label多标记监督学习
其实我个人比较喜欢把label翻译为标签。那可能学术上翻译multi-label多翻译为多标记。其实和多标签一个意思。
multi-class 和 multi-label的区别
multi-class是相对于binary二分类来说的,意思是需要分类的东西不止有两个类别,可能是3个类别取一个(如iris分类),或者是10个类别取一个(如手写数字识别mnist)。
而multi-label是更加general的一种情况了,它说为什么一个sample的标签只能有1个呢。为什么一张图片不是猫就是狗呢?难道我不能训练一个人工智能,它能告诉我这张图片既有猫又有狗呢?
其实关于多标签学习的研究,已经有很多成果了。
主要解法是
* 不扩展基础分类器的本来算法,只通过转换原始问题来解决多标签问题。如BR, LP等。
* 扩展基础分类器的本来算法来适配多标签问题。如ML-kNN, BP-MLL等。
这里不展开了。有兴趣的同学可以自己去研究一下。
keras的multi-label
废话不多说,直接上代码。这里假设大家是有keras的基础知识的,所以关键代码之外的代码请大家自行脑补。
def __create_model(self): from keras.models import Sequential from keras.layers import Dense model = Sequential() print("create model. feature_dim = %s, label_dim = %s" % (self.feature_dim, self.label_dim)) model.add(Dense(500, activation='relu', input_dim=self.feature_dim)) model.add(Dense(100, activation='relu')) model.add(Dense(self.label_dim, activation='sigmoid')) model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) return model
稍微解说一下:
* 整个网络是fully connected全连接网络。
* 网络结构是输入层=你的特征的维度
* 隐藏层是500*100,激励函数都是relu。隐藏层的节点数量和深度请根据自己的数量来自行调整,这里只是举例。
* 输出层是你的label的维度。使用sigmoid作为激励,使输出值介于0-1之间。
* 训练数据的label请用0和1的向量来表示。0代表这条数据没有这个位的label,1代表这条数据有这个位的label。假设3个label的向量[天空,人,大海]的向量值是[1,1,0]的编码的意思是这张图片有天空,有人,但是没有大海。
* 使用binary_crossentropy来进行损失函数的评价,从而在训练过程中不断降低交叉商。实际变相的使1的label的节点的输出值更靠近1,0的label的节点的输出值更靠近0。
结语
有了这个结构,就可以run起来一个multi label的神经网络了。这个只是基础中的基础,关于multi-label的度量代码才是我们研究一个机器学习问题的核心。
- keras实践(一): multi-label神经网络
- Multi-Label Learning(一)之A Review on Multi-Label Learning Algorithms
- 在keras 上实践,通过keras例子来理解lastm循环神经网络
- [译]在keras 上实践,通过keras例子来理解lastm循环神经网络
- multi-label datasets
- SVM - multi label
- [神经网络]keras中的层
- keras 实现BP神经网络
- Keras实现卷积神经网络
- # Keras:2.1 回归神经网络
- 【Keras】DNN神经网络模型
- keras multi gpu 分布式训练
- Keras:2.3 keras实现卷积神经网络
- CNN: Single-label to Multi-label
- CNN: single-label to multi-label总结
- CNN: Single-label to Multi-label
- multi-class 和 multi-label 分类
- Multi-label learning 第一周
- 安卓UI学习笔记
- 30分钟掌握ES6/ES2015核心内容(上)
- java获取状态码的值
- php文章中的图片修改思路
- Qt+VS多个版本切换
- keras实践(一): multi-label神经网络
- 安卓四大组件之广播
- 通过pid杀死进程,然后重启服务(tomcat重启)
- 史上最简单的SpringCloud教程 | 第四篇:断路器(Hystrix)
- IT科技企业逻辑思维面试题
- RESTful的理解
- P3467【2015多校联训1】统计
- Eclipse初始化myeclipse.ini
- 用Redis做小型Asp.net网站的性能优化