keras实践(一): multi-label神经网络
2017-08-28 16:29
176 查看
前沿
本篇记录一下自己项目中用到的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的向量[天空,人,大
a2f3
海]的向量值是[1,1,0]的编码的意思是这张图片有天空,有人,但是没有大海。
* 使用binary_crossentropy来进行损失函数的评价,从而在训练过程中不断降低交叉商。实际变相的使1的label的节点的输出值更靠近1,0的label的节点的输出值更靠近0。
结语
有了这个结构,就可以run起来一个multi label的神经网络了。这个只是基础中的基础,关于multi-label的度量代码才是我们研究一个机器学习问题的核心。相关文章推荐
- 深度学习实践系列(3)- 使用Keras搭建notMNIST的神经网络
- 深度学习(莫烦 神经网络 lecture 3) Keras
- NLP任务中可参考的神经网络架构(Keras+TensorFlow)
- 【Python】keras神经网络识别mnist
- 多层神经网络Multi-layer networks
- ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程)
- 基于回归神经网络的中文语句模型实践(Python+Tensorflow+阿里云)
- cs231n一次课程实践,python实现softmax线性分类器和二层神经网络
- [深度学习框架] Keras上使用神经网络进行mnist分类
- Tensorflow实践:用神经网络训练分类器
- 深度学习之二:神经网络的实践与优化
- 深度学习算法实践7---前向神经网络算法原理
- 可视化Keras深度学习神经网络模型
- TensorFlow下构建高性能神经网络模型的最佳实践
- 【TensorFlow】神经网络优化MNIST数据最佳实践(十一)
- 基于回归神经网络的中文语句模型实践(Python+Tensorflow+阿里云)
- 法院项目实践随笔(2)——神经网络
- 各框架下(tensorflow, pytorch, theano, keras)实现几个基础结构神经网络(mlp, autoencoder, CNNs, recurrent, recursive)
- keras神经网络常见问题-mse, nmse
- [置顶] 【python keras实战】用keras搭建卷起神经网络训练模型