Tensorflow2.0之输出层设计

深度学习图像-半自动和自动标注工具 Tensorflow和Caffe等深度学习中,监督学习的数据标注是一件非常繁琐和耗时的工作,目前大多数公司都采用外包给标注公司进行处理,或者购买现有的数据集,使得进行深度学习研究的成本异常高。本文介绍一种以人工智能解决数据标注的思路和方法。 一、思路 步骤: 1、以一个初步模型对小批量待标注数据进行检测,这里的初步模型可以是自己用少批量数据集训练出来的,也可以用网上公布的; 2、对检测出来的结果进行人为干预纠正; 3、把纠正后的数据训练新的模型; 4、用新模型对中等批量待测数据进行检测; 5、 阅读详情

Tensorflow2.0之输出层设计

我们来特别地讨论网络的最后一层的设计,它除了和所有的隐藏层一样,完维度变换、特征提取的功能,还作为输出层使用,需要根据具体的任务场景来定是否使用激活函数,以及使用什么类型的激活函数。

1. 普通实数空间

这一类问题比较普遍,像正弦函数曲线预测、年龄的预测、股票走势的预测等都属于整个或者部分连续的实数空间,输出层可以不加激活函数。误差计算直接基于最后一层的输出𝒐和真实值y 进行计算,如采用均方差误差函数量输出值𝒐与真实值𝒚之间的距离:
ℒ = 𝑔(𝒐, 𝒚)
其中𝑔代表了某个具体的误差计算函数

2.[0,1]区间

输出值属于[0, 1]区间也比较常见,比如图片的生成,二分类问题等。在机学习中,一般会将图片的像素值归一化到[0,1]区间,如果直接使用输出层的值,像素的值范围会分布在整个实数空间。为了让像素的值范围映射到[0,1的有效实数空间,需要在输出层后添加某个合适的激活函数𝜎,其中Sigmoid 函数刚好具有此功能。

同样的,对于二分类问题,如硬币的正反面的预测,输出层可以只需要一节点,表示某个事件A 发生的概率P(𝐴|𝑥)。如果我们把网络的输出o表示正面事件出现的概率,那么反面事件出现的概率即为1 − 𝑜,网络结构如图 所示。

P(正面|𝑥) = 𝑜
P(反面|𝑥) = 1 − 𝑜

在这里插入图片描述
只需要在输出层的净活性值z 后添加Sigmoid 函数即可将输出转译为概率值。
对于二分类问题,除了可以使用单个输出节点表示事件A 发生的概率P(𝐴|𝑥)外,还可以分别预测P(𝐴|𝑥)和P(𝑛𝑜𝑡 𝐴|𝑥),并满足约束

P(𝐴|𝑥) + P(𝑛𝑜𝑡 𝐴|𝑥) = 1
如图 6.14 所示,二分类网络的输出层设置为2 个节点,第一个节点的输出值表示为事件A发生的概率P(𝐴|𝑥),第二个节点的输出值表示非A 即B 事件发生的概率P(𝑛𝑜𝑡 𝐴|𝑥),考虑到Sigmoid 函数只能将单个值压缩到[0,1]区间,并不会考虑2 个节点值之间的关系。我们希望除了满足𝑜𝑖 ∈ [0,1]之外,还希望他们能满足概率之和为1 的约束:

∑ i = 1 o i = 1 \sum\limits_{i=1} o_i =1 i=1∑​oi​=1
这种情况就是下面要介绍的问题设定:

3.[0,1]区间,和为1

输出值𝑜𝑖 ∈ [0,1],所有输出值之和为1,这种设定以多分类问题最为常见。输出层的每个输出节点代表了一种类别,图中网络结构用于处理3 分类任务,3 个节点的输出值分布代表了当前样本属于类别A,类别B,类别C 的概率P(A|x), P(B|x), P(C|x),考虑多分类问题中的样本只可能属于所有类别中的某一种,因此满足所有类别概率之和为1 的约束。

如何实现此约束逻辑呢?可以通过在输出层添加Softmax 函数实现Softmax 函数定义为:
在这里插入图片描述
Softmax 函数不仅可以将输出值映射到[0,1]区间,还满足所有的输出值之和为1 的特性。如图中的例子,输出层的输出为[2. ,1. ,0.1],经过Softmax 函数计算后,得到输出为[0.7,0.2,0.1],可以看到每个值代表了当前样本属于每个类别的概率,概率值之和为1。通过Softmax 函数可以将输出层的输出转译为类别概率,在分类问题中使用的非常频繁。

在这里插入图片描述

在这里插入图片描述
在 TensorFlow 中,可以通过tf.nn.softmax 实现Softmax 函数:

In [12]:z = tf.constant([2.,1.,0.1])
tf.nn.softmax(z) # 通过Softmax 函数
Out[12]:
<tf.Tensor: id=19, shape=(3,), dtype=float32, numpy=array([0.6590012,
0.242433 , 0.0985659], dtype=float32)>

与Dense 层类似,Softmax 函数也可以作为网络层类使用,通过类layers.Softmax(axis=-1)可以方便添加Softmax 层,其中axis 参数指定需要进行计算的维度。

在 Softmax 函数的数值计算过程中,容易因输入值偏大发生数值溢出现象;在计算交叉熵时,也会出现数值溢出的问题。为了数值计算的稳定性,TensorFlow 中提供了一个统一的接口,将Softmax 与交叉熵损失函数同时实现,同时也处理了数值不稳定的异常,一般推荐使用,避免单独使用Softmax 函数与交叉熵损失函数。函数式接口为
tf.keras.losses.categorical_crossentropy(y_true, y_pred, from_logits=False)
其中y_true 代表了one-hot 编码后的真实标签,y_pred 表示网络的预测值,当from_logits 设置为True 时,y_pred 表示须为未经过Softmax 函数的变量z;当from_logits 设置为False 时,y_pred 表示为经过Softmax 函数的输出。

In [13]:
z = tf.random.normal([2,10]) # 构造输出层的输出
y_onehot = tf.constant([1,3]) # 构造真实值
y_onehot = tf.one_hot(y_onehot, depth=10) # one-hot 编码
# 输出层未使用Softmax 函数,故from_logits 设置为True
loss = keras.losses.categorical_crossentropy(y_onehot,z,from_logits=True)
loss = tf.reduce_mean(loss) # 计算平均交叉熵损失
loss
Out[13]:
<tf.Tensor: id=210, shape=(), dtype=float32, numpy= 2.4201946>

也可以利用losses.CategoricalCrossentropy(from_logits)类方式同时实现Softmax 与交叉熵损失函数的计算:

In [14]: # 创建Softmax 与交叉熵计算类,输出层的输出z 未使用softmax
criteon = keras.losses.CategoricalCrossentropy(from_logits=True)
loss = criteon(y_onehot,z) # 计算损失
loss
Out[14]:
<tf.Tensor: id=258, shape=(), dtype=float32, numpy= 2.4201946>

4.[-1,1]

如果希望输出值的范围分布在[−1, 1],可以简单地使用tanh 激活函数,实现如下:

In [15]:
x = tf.linspace(-6.,6.,10)
tf.tanh(x) # tanh 激活函数
Out[15]:
<tf.Tensor: id=264, shape=(10,), dtype=float32, numpy=
array([-0.9999877 , -0.99982315, -0.997458 , -0.9640276 , -0.58278286,
0.5827831 , 0.9640276 , 0.997458 , 0.99982315, 0.9999877 ],
dtype=float32)>

输出层的设计具有一定的灵活性,可以根据实际的应用场景自行设计

tensorflow2.0教程- Keras 快速入门 tensorflow.keras 快速入门 完整tensorflow2.0教程代码请看tensorflow2,0:中文教程tensorflow2_tutorials_chinese(欢迎star) Keras 是一个用于构建和训练深度学习模型的高阶 API。它可用于快速设计原型、高级研究和生产。 keras的3个优点: 方便用户使用、模块化和可组合、易于扩展 1.导入tf.keras tens... 阅读详情

相关推荐

Tensorflow 2.0 教程-Windows10安装tensorflow2.0

Windows10安装tensorflow2.0(GPU、CPU) 完整tensorflow2.0教程代码请看github:中文教程tensorflow2_tutorials_chinese(欢迎star) 更多TensorFlow2.0 入门教程请持续关注本博客:https://blog.csdn.net/qq_31456593/article/details/88606284 1.安装anac...

知行_那片天 2万+

tensorflow 在 vue 项目中使用示例

【代码】tensorflow 在 vue 项目中使用示例。

不怕麻烦的鹿丸的博客 1237

〖TensorFlow2.0笔记23〗TensorFlow2.0学习笔记总结!

Tensorflow2.0全套课程学习笔记!

AI新视界 1万+

【懒惰就是生产力】目标检测数据集半自动标注

人工标注少量数据,基于PaddleDetection训练模型批量标注剩余数据集。labelme和labelImg标注工具皆可。

m0_63642362的博客 7437

simple-vue-tensorflow:使用Vue.js和Tensorflow.js的简单应用程序

简单Vue张量流 使用vue初始化drginm / tensorflow-js-vuejs-starter-template构建简单的vue-tensorflow Nuxt.js项目 构建设置 # install dependencies $ npm install # Or yarn install # serve with hot reload at localhost:3000 $ npm run dev # build for production and launch server $ npm run build $ npm start # generate static project $ npm run generate # generate static project inside a subfolder $ npm run generate:use-subfolde

ESP32-S3 USB下载模式深度解析:从UART0到TinyUSB的硬件设计与避坑指南

本文深度解析ESP32-S3的三种USB下载模式:UART0、Hardware CDC和基于TinyUSB的USB-OTG CDC。详细探讨各模式的硬件设计要点、电平异常问题、eFuse配置及避坑指南,帮助开发者优化设计,提升量产效率和系统稳定性。

gold的博客 1290

VoTT自定义SSD模型,实现自动标注,各种error踩坑过程

VoTT小白的部署建立过程,各种踩坑,希望可以帮助到其他人

qq_41158484的博客 2520

5G移动性管理实战:手把手教你配置NR小区重选参数(附避坑指南)

本文深入解析5G网络移动性管理中的小区重选参数配置实战。通过拆解小区选择与重选的核心机制,结合真实案例,手把手指导如何配置NR小区重选参数,并分享常见避坑指南,帮助工程师优化网络性能,提升用户移动体验。

weixin_29229261的博客 200

tensorflow2.0笔记(输出层设计)

输出层设计 输出层除了和所有的隐藏层一样,完成维度变 换、特征提取的功能,还作为输出层使用,需要根据具体的任务场景来决定是否使用激活 函数,以及使用什么类型的激活函数。 根据输出值的区间范围来分类讨论。常见的几种输出类型包括: ❑ ???? ∈ ???????? 输出属于整个实数空间,或者某段普通的实数空间,比如函数值趋势的预测, 年龄的预测问题等 ❑ ???? ∈ [0,1] 输出值特别地落在[0,1]的区间,如图片生...

wxl 1083

实用工具抓取youtube热门数据

YouTube作为全球第二大搜索引擎,2024年日均视频播放量突破50亿次,头部创作者单月广告分成可达百万美元量级。但对数据分析者而言,其反爬机制堪称业界最严: ‌反爬技术升级‌:Google部署的Botguard系统可检测异常流量,触发机制包括: 单IP每小时请求超过50次即封禁 检测Headless浏览器指纹(如Chrome的navigator.webdriver属性) 动态加载内容(如评论数据需滚动页面3次后加载) ‌数据价值维度‌:某MCN机构研究显示,前100热门视频的标题关键词复用率高达67%

26万+

ROS牛耕法全覆盖规划:从算法原理到清洁机器人实战解析

本文深入解析ROS牛耕法全覆盖规划算法在清洁机器人中的应用,从算法原理到实战优化技巧全面覆盖。详细介绍了地图预处理、区域分解和路径优化等关键步骤,并分享实际案例中的解决方案,帮助开发者提升机器人清扫效率和覆盖率。

weixin_27013291的博客 393

关于使用Tensorflow 2进行Fashion Mnist数据集识别提出的八个问题

关于使用Tensorflow进行Fashion Mnist数据集识别 目录关于使用Tensorflow进行Fashion Mnist数据集识别

choosetobehappy的博客 621

从CCD数据上报看wxHOOK的封号风险与规避

本文深入分析了微信CCD数据上报机制对wxHOOK的检测逻辑与封号风险,揭示了调试器路径暴露、非白名单DLL加载和内存校验失败等关键风险点。通过实战案例和规避方案,帮助开发者理解如何安全使用wxHOOK技术,避免封号风险,包括内存镜像欺骗、内核级隐蔽和硬件辅助方案等高级技巧。

weixin_27875131的博客 633

tensorflow v2.3.0 学习记录(全来自官网~)

1. tf.keras.layers.Concatenate 连接前面两个层的输出 x1 = tf.keras.layers.Dense(8)(np.arange(10).reshape(5, 2)) x2 = tf.keras.layers.Dense(8)(np.arange(10, 20).reshape(5, 2)) concatted = tf.keras.layers.Concatenate()([x1, x2]) # ()先进行了实例化,调用__init__()函数,只是没用参数,[x

qq_34775330的博客 187

SpringAi 通过大模型来实现调用自己的Api

摘要 本文介绍了如何利用Spring AI的Tools机制扩展大模型能力,实现业务系统集成。通过@Tool和@ToolParam注解定义工具方法,将订单查询和关闭功能暴露给大模型调用。关键实现包括:1)使用详细描述标注工具方法和参数;2)在ChatClient中注册工具服务;3)集成对话记忆保持上下文。该方法使AI具备操作业务系统的能力,形成"认知-决策-执行"闭环,大幅提升了模型在实际业务场景中的应用价值。

又要搬砖了 838

基于 Matlab 的亚像素边缘检测算法:Zernike 矩

Zernike 矩是一种基于正交多项式的特征提取算法,可以用于分析和描述数字图像中的形状和结构。Zernike 矩可以描述图像在不同方向、不同比例和旋转角度下的变化情况,因此具有很好的不变性和鲁棒性。在基于 Zernike 矩的亚像素边缘检测算法中,我们首先需要将原始图像转换为极坐标系下的图像。然后,对每个像素点,计算其在不同方向下的一阶导数和二阶导数,并将其转换为极坐标系下的形式。其中,“n”表示次数,“m”表示阶数,“rho”和“theta”分别表示极坐标系下的半径和角度。% 转换为极坐标系下的形式。

2301_79325339的博客 983

TensorFlow 2.0 教程

最全TensorFlow2.0教程-持续更新 Tensorflow 2.0 教程持续更新: TensorFlow 2.0 教程- Keras 快速入门 TensorFlow 2.0 教程-keras 函数api TensorFlow 2.0 教程-使用keras训练模型 TensorFlow 2.0 教程-用keras构建自己的网络层 TensorFlow 2.0 教程-keras模型保存和序列化...

知行_那片天 11万+

YOLO训练/写作脚本目录一览 | 涉及标签格式转换、数据扩充、热力图、感受野、精度曲线、数量统计等近百个脚本文件

在大家购买专栏后,便可获得全部的脚本文件。在获取到文件后,只需按照将程序放在个人项目中即可一键运行。

Limiiiing的博客 2377

dense层、激活函数、输出层设计

Tensorflow——tf.layers.dense dense:全连接层 相当于添加一个层,即初学的add_layer()函数 tf.layers.dense( inputs, units, activation=None, use_bias=True, kernel_initializer=None, bias_initializer=tf.zeros_initializer(), kernel_regularizer=None, bi

qq_34619572的博客 2万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TensorFlow:输出层设计

我们来特别地讨论网络的最后一层的设计,它除了和所有的隐藏层一样,完成维度变 换、特征提取的功能,还作为输出层使用,需要根据具体的任务场景来决定是否使用激活 函数,以及使用什么类型的激活函数。 我们将根据输出值的区间范围来分类讨论。常见的几种输出类型包括: 文章目录一、普通实数空间二、[0,1] 区间三、[0,1] 区间,和为 1四、[-1,1] 一、普通实数空间 这一类问题比较普遍,像正弦函数曲...

南淮北安的博客 1683

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Tensorflow2.0教程-自定义层

Tensorflow2.0教程-自定义层 最全Tensorflow 2.0 入门教程持续更新:https://blog.csdn.net/qq_31456593/article/details/88606284 完整tensorflow2.0教程代码请看https://github.com/czy36mengfei/tensorflow2_tutorials_chinese (欢迎star) 本...

知行_那片天 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Tensorflow2.0之BatchNorm层

Tensorflow2.0之BatchNorm层 简介: 卷积神经网络的出现,网络参数量大大减低,使得几十层的深层网络成为可能。然而,在残差网络出现之前,网络的加深使得网络训练变得非常不稳定,甚至出现网络长时间不更新甚至不收敛的现象,同时网络对超参数比较敏感,超参数的微量扰动也会导致网络的训练轨迹完全改变。 2015 年,Google 研究人员Sergey Ioffe 等提出了一种参数标准化(No...

python_LC_nohtyp的博客 3609

Tensorflow2.0如何在网络中规定多个输出

有时,我们需要使所建立的网络输出多个层的结果(例如神经风格迁移中)。这时,我们需要在网络中定义输出。下面用VGG19网络举例。 加载VGG19模型 vgg = tf.keras.applications.VGG19(include_top=False, weights='imagenet') vgg.trainable = False 对于迁移学习,可以参考:Tensorflow2.0之tf.k...

cocofisher的博客 6580

TensorFlow2.0 学习笔记(六):TensorFlow2.0 和 Keras 的纠葛

专栏——TensorFlow学习笔记 文章目录专栏——TensorFlow学习笔记一、TensorFlow 2.0 和 Keras 的关系二、Keras Sequential/Functional API 模式建立模型三、使用 Keras Model 方法训练和评估模型参考文章 一、TensorFlow 2.0 和 Keras 的关系 如果你学过 Keras 的话,就会发现上面的实例中均使用了 S...

种树最好的时间是10年前,其次是现在!!! 7840

Keras与Tensorflow2.0入门(7)层与自定义层

文章目录0.前言1. 层1.1 全连接层(Dense)2.自定义层 0.前言 之前我们简要介绍了Keras与Tensorflow的一些基本用法,主要是了解整个深度学习框架的执行,这样我们就可以复现出别人的模型,拿到别人的模型就可以跑了,甚至做一些简单的改动。但是,如果想有一些创新,不会自定义层可谓是巧妇难为无米之炊,没有趁手的武器,再高的武功也不行。 1. 层 我们都知道,深度学习曾经是计算图模型...

刘炫320的博客 5760
上一篇: Tensorflow2.0之Minist手写数字识别
下一篇: Tensorflow2.0之实战汽车油耗预测
AndSonder
博客等级 码龄7年 364粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值