从零开始深度学习0521——keras基本知识+GAP理解

2023-11-12

Keras 中经常可以看到

K.image_data_format() == 'channels_first' 

https://img-blog.csdnimg.cn/20181121112301750.png

 

 

 

 

深度学习中 Flatten层 的作用 <  GAP

 

Flatten层的实现在Keras.layers.core.Flatten()类中。

作用:

Flatten层用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。Flatten不影响batch的大小。

 

from keras.models import Sequential

from keras.layers.core import Flatten

from keras.layers.convolutional import Convolution2D

from keras.utils.vis_utils import plot_model

 

model = Sequential()

model.add(Convolution2D(64,3,3,border_mode="same",input_shape=(3,32,32)))

model.add(Flatten())

plot_model(model, to_file='Flatten.png', show_shapes=True)

 

为了更好的理解Flatten层作用,我把这个神经网络进行可视化如下图:

https://img-blog.csdn.net/2018062910431435?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Byb2dyYW1fZGV2ZWxvcGVy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

 

 flatten层用来扁平参数用,一般用在卷积层与全链接层之间,可以从vgg16网络中可以看出,但是在后来的网络中用GlobalAveragePooling2D代替了flatten层,可以从vgg16与inceptionV3网络对比看出。从参数的对比可以看出,显然这种改进大大的减少了参数的使用量,避免了过拟合现象。

 

 

GlobalAveragePooling2D 层 全局池化层 还可以不在乎输入图像的大小

 

一般在全连接后会有激活函数来做分类,假设这个激活函数是一个多分类softmax,那么全连接网络的作用就是将最后一层卷积得到的feature map stretch成向量,对这个向量做乘法,最终降低其维度,然后输入到softmax层中得到对应的每个类别的得分。全连接层如此的重要,以至于全连接层过多的参数重要到会造成过拟合

 

在最后一个卷积层后,加上GAP 不管前面输出是多少  通过GAP后都变成了1*1*chinnal

所以就可以不在乎原始图像输入是多少,然后继续接下往下做

 

去掉fc层 换成GAP 我们叫全卷积神经网络  fully convlation network

 

在卷积层之后,用GAP替代FC全连接层。有两个有点:一是GAP在特征图与最终的分类间转换更加简单自然;二是不像FC层需要大量训练调优的参数,降低了空间参数会使模型更加健壮,抗过拟合效果更佳。

 

假设卷积层的最后输出是h × w × d 的三维特征图,具体大小为6 × 6 × 3,经过GAP转换后,变成了大小为 1 × 1 × 3 的输出值,也就是每一层 h × w 会被平均化成一个值。

 

GAP的使用一般在卷积层之后,输出层之前:

 

GAP GMP Flatten 对比

https://www.cnblogs.com/hutao722/p/10008581.html

 

对GAP的解释

https://www.jianshu.com/p/510072fc9c62

结论:

从本实验看出,在数据集有限的情况下,采用经典模型进行迁移学习时,GMP表现不太稳定,FC层由于训练参数过多,更易导致过拟合现象的发生,而GAP则表现稳定,优于FC层。当然具体情况具体分析,我们拿到数据集后,可以在几种方式中多训练测试,以寻求最优解决方案。

 

 

 

Tensorflow 写法

 

# detach original VGG fc layers and
# reconstruct your own fc layers serve for your own purpose

self.flatten = tf.reshape(pool5, [-1, 7*7*512])
self.fc6 = tf.layers.dense(self.flatten, 256, tf.nn.relu, name='fc6'#tf.layers.dense 可以一步建立最普通的隐藏层
self.out = tf.layers.dense(self.fc6, 1, name='out')

 

 

 

 

 

Dense层 == Fc

Dense即全连接层,逻辑上等价于这样一个函数:

权重W为m*n的矩阵.

输入x为n维向量.

激活函数Activation.

偏置bias.

输出向量out为m维向量.

out=Activation(Wx+bias).

即一个线性变化加一个非线性变化产生输出.

 

 

为什么卷积层池化层玩需要将向量进行压缩,扁平

把分布式特征 representation 映射到样本标记空间

就是它把特征representation整合到一起,输出为一个值。

这样做,有一个什么好处?

就是大大减少特征位置对分类带来的影响。

 

举个简单的例子

 

从上图我们可以看出,猫在不同的位置,输出的 feature 值相同,但是位置不同。对于电脑来说,特征值相同,但是特征值位置不同,那分类结果也可能不一样,而这时全连接层 filter 的作用就相当于

喵在哪我不管    我只要喵

于是我让filter去把这个喵找到,实际就是把 feature map 整合成一个值:这个值大,哦,有喵;这个值小,那就可能没喵,和这个喵在哪关系不大了有没有,鲁棒性有大大增强了

因为空间结构特性被忽略了,所以全连接层不适合用于在方位上找 Pattern 的任务,比如 segmentation。

 

 

一些CNN网络最后为什么要有2个全连接层

 

写的太好了,生动,容易理解

https://blog.csdn.net/weixin_40903337/article/details/100074878

泰勒公式都知道吧,意思就是用多项式函数去拟合光滑函数。我们这里的全连接层中一层的一个神经元就可以看成一个多项式,我们用许多神经元去拟合数据分布,但是只用一层 fully-connected layer 有时候没法解决非线性问题,而如果有两层或以上 fully-connected layer 就可以很好地解决非线性问题了。

 

我们都知道,全连接层之前的作用是提取特征,全连接层的作用是分类

 

 

 

random.seed()

seed()方法改变随机数生成器的种子

 

seed()没有参数时,每次生成的随机数是不一样的,而当seed()有参数时,每次生成的随机数是一样的,同时选择不同的参数生成的随机数也不一样

 

做图片分类任务时使用img_to_array

 

image = cv2.imread(imagePath)

image = cv2.resize(image, (norm_size, norm_size))

image = img_to_array(image)

data.append(image)

 

img_to_array是keras下的一个方法,主要作用就是把numpy矩阵中的整数转换成浮点数。

训练和预测时Keras对图片读取处理方式不同,加入img_to_array会降低差距

网络性能影响挺大的,使用了以后val_acc与val_loss更加接近训练acc与loss

 

 

 

 

to_categorical()

 

# convert the labels from integers to vectors

labels = to_categorical(labels, num_classes=CLASS_NUM) 
 

to_categorical就是将类别向量转换为二进制(只有0和1)的矩阵类型表示。其表现为将原有的类别向量转换为独热编码的形式

 

to_categorical最为keras中提供的一个工具方法,从以上代码运行可以看出,将原来类别向量中的每个值都转换为矩阵里的一个行向量,从左到右依次是0,1,2,...8个类别。2表示为[0. 0. 1. 0. 0. 0. 0. 0. 0.],只有第3个为1,作为有效位,其余全部为0。

 

 

 

为什么要用one-hot编码

将离散型特征使用one-hot编码,确实会让特征之间的距离计算更加合理

one-hot编码,是为了更合理地计算欧式距离

 

比如,有一个离散型特征,代表工作类型,该离散型特征,共有三个取值,不使用one-hot编码,其表示分别是x_1 = (1), x_2 = (2), x_3 = (3)。两个工作之间的距离是,(x_1, x_2) = 1, d(x_2, x_3) = 1, d(x_1, x_3) = 2。那么x_1和x_3工作之间就越不相似吗?显然这样的表示,计算出来的特征的距离是不合理。那如果使用one-hot编码,则得到x_1 = (1, 0, 0), x_2 = (0, 1, 0), x_3 = (0, 0, 1),那么两个工作之间的距离就都是sqrt(2).即每两个工作之间的距离是一样的,显得更合理

 

使用onehot的直接原因是现在多分类cnn网络的输出通常是softmax层,而它的输出是一个概率分布,从而要求输入的标签也以概率分布的形式出现,进而算交叉熵之类。

 

对于离散型特征,基于树的方法是不需要使用one-hot编码的,例如随机森林等。基于距离的模型,都是要使用one-hot编码,例如神经网络等。

 

 

在keras中model.fit_generator()和model.fit()有什么区别

 

https://blog.csdn.net/Hodors/article/details/97500808

首先Keras中的fit()函数传入的x_train和y_train是被完整的加载进内存的,当然用起来很方便,但是如果我们数据量很大,那么是不可能将所有数据载入内存的,必将导致内存泄漏,这时候我们可以用fit_generator函数来进行训练。

 

 

 

详细理解全连接层

 

  

这一步卷积一个非常重要的作用

就是把分布式特征representation映射到样本标记空间

就是它把特征representation整合到一起,输出为一个值

这样做,有一个什么好处?

就是大大减少特征位置对分类带来的影响

 

为什么全连接层可以实现分类

https://www.cnblogs.com/inception6-lxc/p/9939691.html

 

 

 

运行python3程序 出现如下错误

ModuleNotFoundError: No module named '__main__.model'; '__main__' is not a p

 

不知道原因

直接使用相对路径会出现问题

解决办法是不使用当前路径的  .

from automationtest_frame.output.logger import Logger

同时

1、把automationtest_frame 的上级路径放到系统path里

2、把autimation_frame的上级目录作为工程目录打开

 

 

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

从零开始深度学习0521——keras基本知识+GAP理解 的相关文章

  • 软件自动化实现的原理

    1 软件自动化实现的原理和方法 直接对代码进行静态和动态分析 测试过程的捕获和回放 测试脚本技术 自动比较技术 虚拟用户技术和测试管理技术 2 自动化实现过程 动态测试主要通过特定的程序来模拟软件的操作过程或操作行为 然后对软件所做出的反应
  • Flutter 插件数据回调

    在编写Flutter插件时 涉及到结果回调 进度回调的时候 可以选择使用PlatformChannel BlockCallback或FlutterEventChannel 下面简单说一下他们的使用场景 1 PlatformChannel P
  • 数据链路层协议

    一 数据链路层概述 1 数据链路层的功能 1 链路管理 负责数据链路的建立 维持和释放 主要用于面向连接的服务 2 帧同步 接收方确定收到的比特流中一帧的开始位置和结束位置 3 差错控制 用于使接收方确定接收到的数据就由发送方发送的数据 4
  • 程序员升级打怪之路

    程序员升级打怪之路 新手阶段 中级阶段 高级阶段 写这篇文章的目的是为了让自己在迷茫的时候 看看 自己有哪些不足之处 最重要的是在目前这个时间2020年11月3日 我还是处在中级阶段 新手阶段 那么 入门的新手 要达到一个什么水平才能找到工
  • 学习率的选择

    学会画图去看学习率是否符合 梯度下降算法收敛所需要的迭代次数根据模型的不同而不同 我们不能提前预知 我们可以绘制迭代次数和代价函数的值的图表来观测算法在何时趋于收敛 自动测试方法 也有一些自动测试是否收敛的方法 例如将代价函数的变化值与某个
  • Datart使用说明

    Datart使用说明 Datart安装记录 Refer 安装问题 前端源码编译 java 程序包datart data provider calcite parser impl不存在 启动基础步骤 Datart安装记录 Refer 最近在学
  • 只需2步,轻松解决高校“双非”网站问题

    什么是高校 双非 信息系统问题 高校 双非 信息系统 网站 问题是指 大部分高校网站都是教育网公网地址 互联网可以直接访问 但是 有些高校网站存在下面两种情况 第一种 学校拥有一个教育网地址A 在公网上又有一个非法域名 也对应学校的公网地址
  • SpringBoot报错Unable to start embedded container; nested exception is java.lang.NoSuchMethodError

    SpringBoot启动报错如下 Unable to start embedded container nested exception is java lang NoSuchMethodError org apache tomcat ut
  • CloudCompare和PCL体素滤波:优化点云数据处理

    CloudCompare和PCL体素滤波 优化点云数据处理 介绍 点云数据处理在计算机视觉和机器人领域扮演着重要角色 然而 原始的点云数据可能包含噪声 离群点和冗余信息 这可能对后续的分析和应用造成负面影响 为了解决这些问题 我们可以使用体
  • [BJDCTF2020]Mark loves cat(解决githack无法下载源码&&githack无法获取文件)

    写在前面 考察知识点 1 git泄露 点击这里下载 选择安装路径后 在该文件夹下路径输入cmd 在命令行中输入 python Githack py 127 0 0 1 git 你的网址后面有 git就行 2 变量覆盖 这里有一题比较简单的变
  • 2022数模国赛C题思路详解-古代玻璃制品的成分分析与鉴别

    完整作品 含代码 文献 数据集 分类答案 正在为您运送作品详情 题目定位 数据分析题 数据量少 维度较多 参考往年题目 2021年国赛B题 一 题目背景分析 这几段主要是交代题目的背景 讲解了古代玻璃制品的特征 解释了其化学成分含量的差异性
  • 手动配置树莓派wifi联网连接热点手机热点

    手动配置树莓派wifi联网连接热点 修改wifi配置文件 运行命令 sudo nano etc wpa supplicant wpa supplicant conf 在文件中添加无线网配置信息 ctrl interface DIR var
  • 使用 Clang Tools —— ClangFormat

    ClangFormat 1 独立的工具 2 Vim 集成 3 Emacs 集成 4 BBEdit 集成 5 CLion 集成 6 Visual Studio 集成 7 用于补丁重新格式化的脚本 Script for patch reform
  • JavaScript中获取对象属性的不同方法

    JavaScript中获取对象属性的不同方法 文章目录 JavaScript中获取对象属性的不同方法 一 点记法 二 方括号记法 三 Object keys 方法 四 Object values 方法 五 Object entries 方法
  • uniapp路由传多个参数_VUE全局路由前置守卫:路由拦截登录校验

    点击右上方红色按钮关注 web秀 让你真正秀起来 前言 在任何一个平台中 如果需要增加用户黏度 除了用户需要的基本内容外 用户登录注册提交信息也是非常重要的一环 可以了解用户基本信息 用户喜欢等 抛出前后端混合开发外 vue可以轻松的实现路
  • Hyperf中RabbitMQ的使用

    1 简单的使用可以参照官方文档的AMQP组件 https hyperf wiki 2 1 zh cn amqp 2 安装过程参照 https www linuxprobe com install rabbitmq on centos 7 h
  • Qt实现点击按钮弹出(关闭)窗口,点击窗口外其他位置关闭窗口

    Qt实现点击按钮弹出 关闭 窗口 点击窗口外其他位置关闭窗口 方法一 在窗口实现类的构造函数中添加如下代码 this gt setWindowFlags Qt Popup 参数Qt Popup 表示 当点击窗口以外就关闭窗口 方法二 直接在
  • python 图片、文件 通过 request header 多线程下载

    写爬虫过程中发现图片下载比较慢 遂使用多线程下载来提速 import threading import requests class MulThreadDownload threading Thread def init self url

随机推荐

  • select回显注意问题

    span style font size 18px js代码 span span style font size 18px var roleName entity roleId 5 roleId val roleName span span
  • 网络安全应急响应预案培训

    应急响应预案的培训是为了更好地应对网络突发状况 实施演 练计划所做的每一项工作 其培训过程主要针对应急预案涉及的相 关内容进行培训学习 做好应急预案的培训工作能使各级人员明确 自身职责 是做好应急响应工作的基础与前提 应急响应预案的培 训分
  • 2024年java面试--mysql(3)

    系列文章目录 2024年java面试 一 spring篇 2024年java面试 二 spring篇 2024年java面试 三 spring篇 2024年java面试 四 spring篇 2024年java面试 集合篇 2024年java
  • Photoshop 之利用 "调整边缘" 抠图

    目录 1 首先 看如下图像 人物图像包含很多头发 2 利用魔棒工具 选中选区 并选择 反向 选中人物图像 3 选择选项栏中的 调整边缘 或者菜单栏中的选择 调整边缘 4 利用调整边缘 修复毛发中的空白部分扣除 5 通过拷贝的图层 将图像抠出
  • 如何安装和使用Android夜神模拟器

    夜神模拟器 是全新一代的安卓模拟器 能够让你在电脑上畅玩手机游戏 与传统安卓模拟器相比 基于Android7 1内核 同时向下兼容Android5 1内核以及X86 AMD 具备极高的兼容性和稳定性 加上超高帧率模式 能够在电脑上运行高性能
  • Antd的Upload+fetch+FormData上传Excel文件请求方式?

    let formData new FormData formData append file fileList 0 fetch 接口名称 method POST headers Content Type multipart form dat
  • 平均年薪60.8万,程序员拿下这个证书有多吃香?!

    互联网行业竞争一年比一年严峻 随着互联网的发展和进步 很多人都是想要进军到编程行业中去 作为工程师的我们唯有不停地学习 不断的提升自己才能保证自己的核心竞争力 打破内卷 从而拿到更好的薪水 进入心仪的企业 前些天 我的程序员哥们和我说 他转
  • Pycharm关闭项目卡住怎么办?

    突然有一天创建新项目的时候 Pycharm卡在了关闭项目上 通过网上查阅资料 不断试探 我最终这样解决了 1 在设置中的自然语言中添加了中文 2 更新了Pycharm由2023 1到2023 4 3 在文件中关闭项目 然后等待了较长时间后
  • Sentinel分布式系统的流量防卫兵

    Sentinel 是什么 官网 https github com alibaba Sentinel wiki 介绍 随着微服务的流行 服务和服务之间的稳定性变得越来越重要 Sentinel 以流量为切入点 从流量控制 熔断降级 系统负载保护
  • ae2020不支持的视频驱动程序_AE 2020版本安装提示系统兼容性报告怎么解决?

    AE 2020版本安装提示系统兼容性报告怎么解决 很多设计师朋友会遇到这样的问题 安装完AE2020版本之后 打开软件 提示这样的信息显示系统兼容性报告可这样解决 快进来学习吧 系统是WIN10的 64位 点击不理会 可以打开软件 但是作为
  • ​LeetCode刷题实战26:删除排序数组中的重复项

    算法的重要性 我就不多说了吧 想去大厂 就必须要经过基础知识和业务逻辑面试 算法面试 所以 为了提高大家的算法能力 这个公众号后续每天带大家做一道算法题 题目就从LeetCode上面选 今天和大家聊的问题叫做 删除排序数组中的重复项 我们先
  • vite 配置自动补全文件的后缀名

    vite 不建议自动补全 文件的后缀名的 const Home gt import views Home vue 文件是必须要加上 vue 的后缀名的 如果 想要像 webpack 一样的不用写 可以在vite config js中配置如下
  • windows server 2012 R2 安装mysql(一)

    windows server 2012 R2 安装mysql 一 最近遇到一个要做app的朋友 朋友想要做一个简单的线上APP app 的功能久不介绍了 笔者决定采用windows server 2012 r2 做应用服务器 数据库采用my
  • 疫情防控数据可视化平台的设计与实现 计算机专业毕业设计源码87063

    摘要 信息化社会内需要与之针对性的信息获取途径 但是途径的扩展基本上为人们所努力的方向 由于站在的角度存在偏差 人们经常能够获得不同类型信息 这也是技术最为难以攻克的课题 针对疫情防控数据可视化平台等问题 对如何通过计算机疫情防控数据可视化
  • 在Qt创建的UI中放一个显示点云的窗口(PCL+QT5)

    1 首先在Qt Designer创建UI后 拖一个Widget窗口出来 2 在对象查看器中右击该Widget 选择提升窗口部件 如下操作 3 把UI转出来放在VS项目中 其中你的UI代码头文件会自带QVTKOpenGLNativeWidge
  • 非常实用: 2.4G天线设计指南(赛普拉斯工程师力作)

    前言 为了方便查看博客 特意申请了一个公众号 附上二维码 有兴趣的朋友可以关注 和我一起讨论学习 一起享受技术 一起成长 转载自 gt 非常实用 2 4G天线设计指南 赛普拉斯工程师力作 微信公众号 lt lt 射频百花潭 gt gt 本文
  • 分享 7 个 AI 优质开源项目!文本生成、自动化数据搜集...

    项目一 nanodet 超快速轻量级无锚物体检测模型 项目地址 https github com RangiLyu nanodet 项目特点 超轻量 模型文件只有 980KB INT8 或 1 8MB FP16 超快 在移动 ARM CPU
  • npm 实现原理

    输入 npm install 命令并敲下回车后 会经历如下几个阶段 以 npm 5 5 1 为例 1 执行工程自身 preinstall 当前 npm 工程如果定义了 preinstall 钩子此时会被执行 2 确定首层依赖模块 首先需要做
  • 基于STM32的脉搏心率检测仪(OLED可以实时显示脉冲波形)

    设计完整 功能可全部实现 有完整报告文档说明 程序以及pcb文件 可作为 课程设计 STM32实践学习 电子制作等 禁止转载 以及用于其他商业用途 B站对应讲解心率传感器项目链接 设计所实现的功能 利用STM32的AD采集功能实时采集心率传
  • 从零开始深度学习0521——keras基本知识+GAP理解

    Keras 中经常可以看到 K image data format channels first 深度学习中 Flatten层 的作用 lt GAP Flatten层的实现在Keras layers core Flatten 类中 作用 F