keras分类猫狗数据(番外篇)深度学习CNN连接SVM分类

2023-11-07

承接上文,
keras分类猫狗数据(上)数据预处理
keras分类猫狗数据(中)使用CNN分类模型
keras分类猫狗数据(下)迁移学习
keras分类猫狗数据(番外篇)深度学习CNN连接SVM分类


2019年2月23日补充:
(引用回复biyandong)这个是我初学时的代码,有关误解还请见谅。 完整的讲,cnn+svm指的是cnn提取特征,然后由svm再训练,可以看作两步。cnn提取特征可以由Model构建“半截”并输出。这个“半截”从原始图像输入到哪由你来定(调参,玄学)。Svm的输入是这个“半截”cnn的输出。
个人认为svm不能直接加到cnn参与反向传播,一个是梯度问题,或者还有收敛问题(前期的特征不够健壮)。 目前而言,这种拼接普遍是分步进行的。不当之处,敬请指正。以下代码是找到的我的一个实验提取特征部分供参考:

"""
@Time    : 2018/8/27 10:18
@Author  : Lishihang
@File    : exc_feather.py
@Software: PyCharm
@desc: 
"""
from keras import models,Model
import lastExp.Integrate_432_321 as lig
import numpy as np
import pandas as pd

cnn_model=models.load_model("model.h5")
cnn_model.trainable=False
# cnn_model.summary()
#
dense1_layer_model = Model(inputs=cnn_model.input,outputs=cnn_model.get_layer(name='dense_3').input)
dense1_layer_model.trainable=False
dense1_layer_model.summary()

tiffgen=lig.Tiff(fea_src="../data/train_pos_label.txt",size=15).get_one_beatch(batch_size=50)

# while tiffgen.nex

feas=np.zeros(shape=(0,512))
ls=[]
i=0
while True:
    try:
        img, label = tiffgen.__next__()


        res = dense1_layer_model.predict(img)
        feas = np.concatenate((feas, res), axis=0)
        label = np.array(label)
        ls=np.hstack((np.argmax(label,axis=1),ls))
        i+=1
        if i%10==0:
            print("step_i: ",i)
    except StopIteration:
        break
# print(feas.shape)

ls=np.array(ls,dtype=np.int).reshape(-1,1)
feasls=np.concatenate((feas,ls),axis=1)
feasls=pd.DataFrame(feasls)
print(feasls.shape)
# print(feasls.head())
feasls.to_csv("output/train_feasls.csv",index=None,header=None,sep='\t')

如下为原文:

本文使用深度学习的CNN进行特征提取,并使用机器学习经典算法(使用pca降维?)svm在此基础上进行分类。模型参数使用上文迁移学习第一部分训练结果。

from keras.applications import VGG16
from keras.models import Sequential,Model
from keras.layers import Flatten,Dense
from sklearn.decomposition import PCA

########### 加载原模型 ###############
conv_base=VGG16(weights='imagenet',include_top=False,input_shape=(128,128,3))

model = Sequential()
model.add(conv_base)
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

model.trainable=False
model.summary()

model.load_weights('outputs/weights_vgg16_use.h5')

###构建cnn_svm模型,并完成训练#############

def predict_cnnsvm(k,pca=None):#测试批数,共用数据32*k
    s,al=0,0
    for i in range(k):
        res=mp.test_flow.next()
        x,y=res[0],res[1]
        x_temp=dense1_layer_model.predict(x)
        if pca!=None:
            y_temp=clf.predict(pca.transform(x_temp))
        else:
            y_temp = clf.predict(x_temp)
        s+=np.sum(y_temp==y)
        al+=len(y)
    return s*1.0/al

import catvsdogs.morph as mp
dense1_layer_model = Model(inputs=model.input,outputs=model.layers[-2].output)

from sklearn.svm import SVC
import numpy as np
clf=SVC()

X=np.ones((0,256))#原特征维度个数256
Y=np.array([])
for i in range(100): #共用数据100*32个
    res=mp.train_flow.next()
    x,y=res[0],res[1]
    x_temp=dense1_layer_model.predict(x)
    X=np.row_stack((X,x_temp))
    Y=np.append(Y,y)
    print("%d inserted!"%(i*32+32))
print(X.shape)
print(Y.shape)

print("no use pca:")
clf.fit(X,Y)
for _ in range(5):
    pre=predict_cnnsvm(20)
    print("correct_rate:%.3f"%(pre))

print("use pca:")
pca = PCA(n_components=10)
pca.fit(X)
X_new = pca.transform(X)
clf.fit(X_new,Y)
for _ in range(5):
    pre=predict_cnnsvm(20,pca)
    print("correct_rate:%.3f"%(pre))
    

这里写图片描述

这里写图片描述

可以看出,VGG16_SVM(no pca)正确率比之之前的VGG16特征提取全连接层(约88%)有轻微提高,VGG16_SVM(use pca)正确率下降。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

keras分类猫狗数据(番外篇)深度学习CNN连接SVM分类 的相关文章

  • 小程序常见的面试题

    小程序常见的面试题 1 简单描述下微信 程序的相关 件类型 答 微信 程序项 结构主要有四个 件类型 如下 WXML 是框架设计的 套标签语 结合基础组件 事件系统 可以构建出 的结构 内部主要是微信 定义的 套组件 WXSS WeiXin
  • Linux操作系统之进程间通讯—共享内存与消息队列

    文章目录 一 共享内存 1 共享内存的原理 2 共享内存的实现 三 消息队列 1 消息队列原理 2 消息队列实现 一 共享内存 1 共享内存的原理 共享内存为多个进程之间共享和传递数据提供了一种有效的方式 共享内存是先在物理内存上申请一块空
  • 2.linux git显示分支名

    linux git显示分支名 linux git显示分支名 解决linux里面git不会显示分支名 1 在 bash profile 里面添加 display the git branch name function git branch
  • 视觉SLAM理论与实践第四节课习题

    4 矩阵微分 2 分 约 1 5 小时 在优化中经常会遇到矩阵微分的问题 例如 当 变量为向量 x 求标量函数 u x 对 x 的导数时 即 为矩阵微分 通常线性代数教材不会深 探讨此事 这往往是矩阵论的内容 我在 ppt 录下为你准备了
  • ubuntu18一直紫屏,无法进入图形界面

    ubuntu18一直紫屏 无法进入图形界面 一直紫屏的原因 解决方法 首先进入想办法进入桌面环境 第一种方法 第二种方法 然后修改一些配置文件 一直紫屏的原因 使用apt upgrade更新系统后 出现桌面卡死 很是纳闷 也重装了两次系统
  • ChatGPT研究分享:机器第一次开始理解人类世界

    0 为什么会对ChatGPT感兴趣 一开始 我对ChatGPT是没什么关注的 无非就是有更大的数据集 完成了更大规模的计算 所以能够回答更多的问题 但后来了解到几个案例 开始觉得这个事情并不简单 我先分别列举出来 具体解读在文末说明 1 C
  • ChatGPT简单介绍

    div class markdown views div
  • Git Extensions的安装与使用

    一 介绍 Git Extensions是一个工具包 旨在使Windows下的Git更直观 功能 Git的Windows资源管理器集成 功能丰富的Git用户界面 32位和64位支持 二 安装 csdn下载地址 GitExtensionhttp
  • 新唐NUC980使用记录:访问以太网(LAN8720A) & 启用SSH

    文章目录 目的 修改内核以访问以太网 制作根文件系统并启用SSH 总结 目的 这篇文章主要测试访问以太网 PHY为LAN8720A 以及启用SSH 这篇文章中内容均在下面的开发板上进行测试 新唐NUC980使用记录 自制开发板 基于NUC9
  • 为什么一定要使用二级指针,而一级为什么就不行呢??

    为什么一定要使用二级指针 而一级为什么就不行呢 不是说函数中传递指针 在函数中改变指针的值 就是在改变 实参中的数据信息嘛 额 其实吧 上边说的也对 可问题就在这块了 问题是 在建立二叉树的过程中 不是改变了形参的值 而是 改变了形参的指向
  • Docker: network nat is ambigous

    初次使用docker投入开发使用 感觉不要太爽 强烈推荐入坑docker 但docker国内相关资料偏少 无论是学习或是排查问题 都不是很方便 入门学习推荐微信公众号magiccodes的 Docker最全教程 系列文章 有兴趣可自行查找
  • Kubernetes部署redis主从集群

    目标 部署Redis leader节点 部署两个follower节点 一 部署 leader节点 redis leader yaml apiVersion v1 kind Service metadata name redis leader
  • IDEA创建Web Project图解

    截图方式全程演示如何使用IntelliJ IDEA创建一个Web Project 以及如何部署到Tomcat 如何打成war包 详细请看截图 虽然没多少文字全是截图 但该有的文字说明截图上也有 如果还有什么疑问 请加裙交流
  • bfs 解决最短路问题

    前提 边权都一样时 才能用bfs求最短路 问题 给定一个 n mn m 的二维整数数组 用来表示一个迷宫 数组中只包含 00 或 11 其中 00 表示可以走的路 11 表示不可通过的墙壁 最初 有一个人位于左上角 1 1 1 1 处 已知
  • C\C++_构造函数和析构函数

    文章目录 1 系统提供构造函数规则 1 1 代码示例 2 默认构造函数 3 拷贝构造函数 3 1 深拷贝和浅拷贝 3 2 调用拷贝构造的时机 4 带参构造函数 4 1 带单个参数 5 不使用拷贝构造和拷贝赋值运算符 5 1 方法一 5 2
  • 基础算法题——德邦国王(dfs、剪枝)

    德邦国王 题目还算中规中矩 就是剪枝比较麻烦 解题思路 dfs 剪枝 移动次数不超过设定值 M 若有解 则后面的步骤不可大于该解的值 不断查询完美矩阵与当前矩阵不同的个数 t t 1 为最快可将当前矩阵移动成完美矩阵的步数 若 t 1 已经
  • 【STM32】以太网DMA描述符

    武汉加油 中国加油 1 什么是以太网DMA 学过STM32的同学都应该知道DMA就是不需要CPU的参与就能够实现内存和外设之间的数据交换 同样的 对于STM32互联型单片机的以太网DMA的作用也是如此 它的作用就是在不需要CPU的参与下 实
  • Redis从入门到精通(四:持久化)

    持久化简介 什么是持久化 利用永久性存储介质将数据进行保存 在特定的时间将保存的数据进行恢复的工作机制称为持久化 持久化用于防止数据的意外丢失 确保数据安全性 为什么持久化 redis是将数据存储在内存上的 一旦断电 或者因为机器故障使re

随机推荐

  • win10开机自动运行bat脚本

    windows10开机自动运行bat脚本 win r gpedit msc打开策略制 然后添加 如果你的bat文件的命令是启动其他文件 如下 启动其它程序 start xxx exe 启动vm虚拟机 chcp 65001 C Program
  • mysql left jion 优化_MySQL LEFT JOIN实例及优化分析

    摘要 在本教程中 我们将学习有关MySQL LEFT JOIN子句以及如何应用它来从两个或多个数据库表中查询数据 之后你将更深入的了解MySQL LEFT JOIN优化分析 MySQL LEFT JOIN MySQL的LEFT JOIN子句
  • linux squid 用户认证,如何在Linux中设置Squid的用户认证存取控制

    IT168 服务器学院 内核版本 Linux 2 2 Squid版本 Squid 2 3 stable2 http www squid cache org Versions v2 2 3 squid 2 3 STABLE2 src tar
  • Revit二次开发图例标注

    因为目前Revit并没有对用户开放图例创建的API 目前在做门窗大样图例时 只有通过复制已有的图例构件 Element 再修改它的族类型来实现 随后 想尝试做下自动标注 这个时候麻烦来了 首先这个图例构件 类型就是Element 并非Fam
  • 2021-02-07

    JSON解析教程 JSON 简介 对象格式 其他格式 数组格式 JSON主要解析方法 Gson FastJson JSON 简介 JSON JavaScript Object Notation JS对象简谱 是一种轻量级的数据交换格式 对象
  • 2.1Qt基础按钮控件

    第二章 基础控件 2 1按钮控件组 2 1 1QAbstractButton 类 2 1 2QPushButton 按钮 2 1 3 QRadioButton 按钮 2 1 4 checkBox 按钮 2 1 5 commandLinkBu
  • 【计算机毕设项目】基于大数据住房数据分析与可视化 - python

    文章目录 0 前言 分析展示 一 北上广租房房源分布可视化 二 北上广内区域租金分布可视化 三 房源距地铁口租金的关系可视化 四 房屋大小与租金关系可视化 结论 租个人房源好还是公寓好 北上广深租房时都看重什么 部分实现代码 0 前言 这两
  • loadrunner12使用问题总结

    以下只是针对我在使用中 问题对应的解决方案 可能不适用于所有 1 启动录制 浏览器卡着不动 原因1 浏览器版本过高 不兼容 官方文档的说明是支持ie11 firefox24 chrome30 我降低版本后firefox24正常了 chrom
  • Vue在页面和方法中分别通过遍历对象获取对象的键(key)和值(value)

    最近通过对象相关知识的深入学习 我发现对象的遍历主要分为两种情况 一种是在页面中遍历 另外一种是在方法中遍历对象 现在我们就从这两种情况分别来遍历对象获取对象的key和value 情况一 在页面中遍历对象获取对象的键和值 定义一个变量 ob
  • 一篇就够了——宝塔安装nextcloud以及一系列的软件(ocdownload,onlyoffice)安装,以及会遇到的一系列问题(持续更新)

    目录 前言 什么是宝塔 什么是nextcloud 为什么不用docker来安装nextcloud 下载 版本选择和下载链接 小提示 安装 选择数据库 下载ocdown 配置aira2c 安装onlyoffice 插件安装 目前出现的问题 持
  • 敏感字段加密,叶俊峰

    标题 敏感字段加密 时间限制 1秒 内存限制 262144K 语言限制 不限 敏感字段加密 给定一个由多个命令字组成的命令字符串 1 字符串长度小于等于127字节 只包含大小写字母 数字 下划线和偶数个双引号 2 命令字之间以一个或多个下划
  • 《微服务实战》 第三十章 分布式事务框架seata TCC模式

    系列文章目录 第三十章 分布式事务框架seata TCC模式 第二十九章 分布式事务框架seata AT模式 文章目录 系列文章目录 前言 1 TCC模式 1 1 AT 模式 参考链接 TBD 基于 支持本地 ACID 事务 的 关系型数据
  • stata 导出 相关系数表_【BBtime】戏说会计论文---stata简单实操

    Stata的优秀之处在于它是一个开放的平台 各位统计达人可以把自己做好的命令供大家使用 安装命令 ssc install 命令名称 注意 下文的P值就是软件中显示的 Prob 概率 数据处理 1 数据的合并 destring year re
  • 第二十一讲:神州路由器RIP路由的配置

    设备 端口 IP 子网掩码 网关 Router A F0 0 192 168 1 1 255 255 255 0 无 F0 3 192 168 10 1 255 255 255 0 无 Router B F0 0 192 168 1 2 2
  • 考研数二第十八讲 定积分的实际应用之求解旋转体积切面面积

    定积分的实际应用 1 求一段曲线与x 轴和任一直线 曲线围成的图形和极坐标下曲线围成的图形面积 求一块平面区域的面积 1 x 型区域 y 型区域介绍 极坐标 求一段曲线绕 x 轴 y轴和任一直线旋转得所得旋转体的体积 旋转曲面的表面积 设在
  • 李彦宏传

    以下内容摘自 李彦宏传 李彦宏 1968年出生山西省阳泉市的一个工人家庭 上面有三个姐姐 学霸类型 喜欢下棋 曲艺 文科功底深厚 理科也强 高二参加山西省计算机编程大赛 获取第二名 李彦宏父亲从小受过私塾教育 熟读四书五经 大姐考上大学 三
  • 【3D卡片切换】基于jquery实现3D堆叠卡片切换效果(附完整源码)

    文章目录 写在前面 涉及知识点 实现效果 1 搭建页面 1 1 创建ul li节点 1 2 丰富元素 Html代码所示 CSS代码所示 2 JS实现堆叠切换 3 源码分享 3 1 百度网盘 3 2 123云盘 3 3 邮箱留言 总结 写在前
  • 关于SoftMax函数的一些介绍

    前言 SoftMax函数是在机器学习中经常出现的 时常出现在输出层中 对于这个函数 大部分blog作者对于它介绍已经很完善了 包括如何玄学设计 如何使用等等 这里只是从数学来源上讨论下这个函数名字的来历 或者说数学的来源 为什么叫做Soft
  • Qt多个timer在一个线程里面

    ifndef MAINWINDOW H define MAINWINDOW H include
  • keras分类猫狗数据(番外篇)深度学习CNN连接SVM分类

    承接上文 keras分类猫狗数据 上 数据预处理 keras分类猫狗数据 中 使用CNN分类模型 keras分类猫狗数据 下 迁移学习 keras分类猫狗数据 番外篇 深度学习CNN连接SVM分类 2019年2月23日补充 引用回复biya