CNN+SVM实现多分类

1. 本文目的

使用SVM代替CNN网络的全连接层,即CNN提取特征后利用SVM进行分类。(注:仍使用完整CNN网络进行训练获取卷积层参数,SVM参数单独训练获得,后续会对此进行详细说明。)

2. 实验流程:

  1. 对样本数据进行处理
  2. 建立完整的卷积神经网络(CNN)
  3. 利用训练数据进行训练,获取卷积层权重参数
  4. 将卷积层输出转换为SVM输入特征向量
  5. 利用上一步特征向量对SVM进行训练
  6. 利用测试数据进行准确率测试。

3. 网络结构

在这里插入图片描述
CNN有两个卷积层,两个全连接层,其中卷积层卷积核大小为5 * 5,步长为1,池化层卷积核大小为2 * 2,第一个全连接层输出h_fc1转化为特征向量输入SVM。
feature map大小变化如表所示:

Conv1 Pooling1 Conv2 Pooling2 Full_Connectin1 SVM
input size 16*16 16*16 8*8 8*8 4 * 4 * 64 1* 256
filter 5*5 2*2 5*5 2*2 - -
output size 16 * 16 8*8 8*8 4*4 256 -

4. 核心代码

# coding=utf8
import random
import numpy as np
import tensorflow as tf
from sklearn import svm

for file_num in range(10):
    # 在十个随机生成的不相干数据集上进行测试,将结果综合
    print('testing NO.%d dataset.......' % file_num)
    f1 = open('digit_train_' + file_num.__str__() + '.data')
    lines1 = f1.readlines()
    # 训练数据
    X_train = []
    y_train = []
    y_train_temp = []
    y_train_transform = []
    for i in range(len(lines1)):
        X_train.append(list(map(int, map(float, lines1[i].split(' ')[:256]))))
        y_train.append(list(map(int, lines1[i].split(' ')[256:266])))
        y_train_transform.append(np.argmax(list(map(int, lines1[i].split(' ')[256:266]))))
    f1.close()

    f2 = open
评论 48
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值