CNN中使用SVM进行分类(keras的实现)
来源:互联网 发布:商城二次开发 php 编辑:程序博客网 时间:2024/05/15 05:07
相关理论可以看这篇文章 Deep Learning using Linear Support Vector Machines,ICML 2013
主要使用的是SVM的hinge loss形式的损失函数
原始的SVM的损失:(公式图片截取自开头的论文)
SVM的hinge loss形式的损失:(公式图片截取自开头的论文)
这里解决的是二分类问题,多分类的话和softmax一样,简单说明如下:(公式图片截取自开头的论文)
观察那个损失函数可以知道,它其实可以看做是一个 hinge loss 加上一个L2 regularization,前面的1/2就是L2正则项的系数lambda,这在CNN中很容易实现
使用CNN进行多分类的时候,最后一层的神经元个数是类别数目
使用softmax分类时,最后一层的激活函数设置为softmax就好
现在不用激活函数,或者激活函数设置为'linear',即即f(x)=x
prediction = Dense(7,activation='linear', #或者不适用激活函数? kernel_regularizer=regularizers.l2(0.5), name=name+'FC_linear')(x)
然后在keras后端添加一个自定义损失(在源代码的losses.py中)
def categorical_squared_hinge(y_true, y_pred): """ hinge with 0.5*W^2 ,SVM """ y_true = 2. * y_true - 1 # trans [0,1] to [-1,1],注意这个,svm类别标签是-1和1 vvvv = K.maximum(1. - y_true * y_pred, 0.) # hinge loss,参考keras自带的hinge loss# vvv = K.square(vvvv) # 文章《Deep Learning using Linear Support Vector Machines》有进行平方 vv = K.sum(vvvv, 1, keepdims=False) #axis=len(y_true.get_shape()) - 1 v = K.mean(vv, axis=-1) return v最后,在编译模型的时候使用自定义损失,名字就是函数的名字了
model.compile( optimizer=adm, loss=['categorical_squared_hinge'], metrics=['accuracy'] )
0 0
- CNN中使用SVM进行分类(keras的实现)
- [深度学习框架] Keras上使用CNN进行mnist分类
- Keras实现一个简单的CNN的分类例子
- 使用Keras进行图像分类
- keras 实现CNN 进行手写字符识别
- keras 构建CNN进行小样本集图像分类
- keras中Convolution1D的使用(CNN情感分析yoom例子四) && Keras 1D,2D,3D卷积
- 使用CNN进行文本分类
- Keras(2):使用Keras构建神经网络进行Mnist手写字体分类,并定性分析各种超参数的影响
- keras中Convolution1D的使用(CNN情感分析yoom例子四)
- 整理使用SVM实现分类的步骤
- CNN 简史与 Keras 增量实现(一)—— Softmax 分类器
- Scikit-learn中使用SVM对文本进行分类
- 基于Keras实现CNN
- 基于深度学习框架Keras的CNN分类Mnist
- SVM+HOG对图像进行分类(MATLAB实现)
- SVM+HOG对图像进行多分类(OpenCV实现)
- 采用线性SVM对线性不可分的数据进行分类(含matlab实现)
- Android应用开发入门经典学习笔记07--activity和fragment
- IKAnalyzer配置扩展词库经验总结
- “音之国度”游戏UI界面分析(一级界面)
- 学习笔记| AS入门(三) 布局篇
- 特种兵数据库手抄
- CNN中使用SVM进行分类(keras的实现)
- Unity MMO游戏架构设计之角色设计二
- 数据挖掘包
- 树莓派学习-I2c通信
- 代理模式
- 第31课:彻底解密Spark 2.1.X中Shuffle中内存管理源码解密:StaticMemory和UnifiedMemory
- 1059
- 控制朋友圈好友状态可见性(Python+redis实现)
- 华为机试专辑【11-15题】