TensorFlow入门(二十四、初始化学习参数)
参数的初始化关系到网络能否训练出好的结果或者是以多快的速度收敛,对训练结果有着重要的影响。
初始化学习参数需要注意的规则
不可以将网络中的所有参数初始化为0,也不能全部初始化为同一个值。如果参数全部初始化为0或者是同一个值,会使得所有神经元的输出都是相同的,进而造成反向传播时,梯度和权重的变化相同,同一层内每个神经元的计算也相同。这显然是不正确的
尽量保证参数初始化的均值为0,正负交错,且正负参数在数量上大致相等
参数初始化的值不可以太大或是太小。初始值如果太大,会使得数据在每层间传递的过程中逐渐放大,导致梯度消失发散,训练失败;初始值如果太小,会使得特征值在每层间传递的过程中逐渐缩小,难以产生作用
TensorFlow中常用的参数初始化方法
TensorFlow提供了一些具有不同特性的初始化函数,如全零初始化(Zero Initialization)、随机初始化(Random Initialization)、Xavier初始化(Xavier Initialization)、He初始化(He Initialization)、迁移学习初始化(Pre-train Initialization)、数据敏感初始化等。
1.把参数初始化为常量的方法:
①tf.constant_initializer(value,dtype) : 可简写为tf.Constant(value,dtype),该方法将参数初始化为常数,通过常用于初始化偏置项(bias)。其中参数value为指定的常量,dtype为设置的数据类型
②tf.zeros_initializer(dtype) : 可简写为tf.Zeros(dtype),该方法生成一个初始值全为0的tensor对象
③tf.ones_initializer(dtype) : 可简写为tf.Ones(dtype),该方法生成一个初始值全为1的tensor对象
2.把参数初始化为正态分布的方法:
①tf.random_normal_initializer(mean,stddev,seed,dtype):可简写为tf.RandomNormal(...),该方法生成一组符合标准正态分布的tensor对象。参数mean为正态分布的均值,默认值是0;stddev为正态分布的标准差,默认值为1;seed为随机数种子,是一个整数,设置后,每次生成的随机数都为seed的值;dtype为设置的数据类型。
②tf.truncated_normal_initializer(mean,stddev,seed,dtype):可简写为tf.truncatedNormal(...),该方法生成一组符合截断正态分布的tensor对象。每个参数的含义与tf.random_normal_initializer方法的相同。由于该函数有截断功能,可以生成相对比较温和的初始值,在TensorFlow中经常使用该方法进行参数的初始化。
3.把参数初始化为均匀分布的方法:
①tf.random_uniform_initializer(minval.maxval,seed,dtype):可简写为tf.RandomUniform(...),该方法生成一组符合均匀分布的tensor对象,参数minval为指定的最小值,maxval为指定的最大值。使用该方法生成的随机数不是从小到大或者从大到小均匀分布的,而是每次从一组服从均匀分布的数里边随机抽取一个数。
②tf.uniform_unit_scaling_initializer(factor,seed,dtype):可简写为tf.UniformUnitScaling(...),该方法与tf.random_uniform_initializer()一样,生成一组符合均匀分布的tensor对象。不同的是,不需要指定最大值和最小值,而是通过公式计算。
max_val = math.sqrt(3/input_size)*factor
min_val = - max_val
其中input_size是生成数据的维度,factor是系数
4.初始化为变尺度正态、均匀分布的方法:
①tf.variance_scaling_initializer(scale,mode,distribution,seed,dtype):可简写为tf.VarianceScaling(...),该方法生成一组截断正态分布和均匀分布的tensor对象,增加了更多的控制参数。参数scale用于缩放尺度,为正浮点数。mode的值为"fan_in","fan_out","fan_avg"中的一个,用于计算标准差stddev的值。distribution是分布类型,值为"normal"或"uniform",当distribution = "normal"时,生成截断正态分布的随机数,其中stddev = sqrt(scale/n),n的计算与mode参数有关。如果mode = "fan_in",n为输入单元的节点数,如果mode = "fan_out",n为输出单元的节点数,如果mode = "fan_avg",n为输入和输出单元节点数的平均值。当distribution = "uniform"时,生成均匀分布的随机数,假设分布区间为[-limit,limit],则limit = sqrt(3*scale/n)。
5.正态矩阵初始化方法:
①tf.orthogonal_initializer(gain,dtype,seed):可简写为tf.Orthogonal(...),该方法生成正交矩阵的随机数,形状最少需要是2维的。如果要初始化的张量的形状是2维的,则用从均匀随机数矩阵的奇异值分解(SVD)得到的正交矩阵进行初始化;如果大于2维,则初始化形状为(shape[0] ... shape[n - 2],shape[n -1])的矩阵,其中n是形状向量的长度。随后对矩阵进行重新调整以给出所需形状的张量。参数gain为适用于正交矩阵的乘法因子。
6.Glorot初始化方法:
①Glorot正常初始化方法,即tf.glorot_normal_initializer(seed,dtype):也称之为Xavier正常初始化器,该方法可以生成与输入输出节点数相关的截断正态分布随机数。它从以0为中心的截断正态分布中抽取样本,计算公式为:
stddev = sqrt(2/(fan_in + fan_out))
其中fan_in是权重张量中的输入单元数,fan_out是权重张量中的输出单元数。
②Glorot均匀初始化方法,即tf.glorot_uniform_initializer(seed,dtype):也称之为Xavier均匀初始化器。该方法可以生成与输入输出节点数相关的均匀分布随机数。它从一个均匀分布的[-limit,limit]区间中抽取样本,其中limit的计算公式为:
stddev = sqrt(6/(fan_in + fan_out))
fan_in和fan_out与Glorot正常初始化方法中的相同。
相关文章:
TensorFlow入门(二十四、初始化学习参数)
参数的初始化关系到网络能否训练出好的结果或者是以多快的速度收敛,对训练结果有着重要的影响。 初始化学习参数需要注意的规则 不可以将网络中的所有参数初始化为0,也不能全部初始化为同一个值。如果参数全部初始化为0或者是同一个值,会使得所有神经元的输出都是相同的,进而造…...
工厂WMS系统货架位管理:优化仓储效率
货架位管理作为WMS系统中的重要环节,对于提高工厂的仓储效率和精确库存管理至关重要。本文将从多个角度全方位介绍工厂的WMS系统货架位管理,探讨其重要性以及如何优化、应用该系统,提升工厂的仓储效率和运营水平。 1. 优化仓库空间利用&…...
[C++随想录] 继承
继承 继承的引言基类和子类的赋值转换继承中的作用域派生类中的默认成员函数继承与友元继承与静态成员多继承的结构棱形继承的结构棱形虚拟继承的结构继承与组合 继承的引言 概念 继承(inheritance)机制是面向对象程序设计使代码可以 复用的最重要的手段,它允许程序…...
ARM-day9
按键控制小灯、蜂鸣器、风扇,按一次启动,第二次关闭 key_it.c #include "key_it.h"//按键3的配置 void key3_it_config() {//RCC使能GPIOF时钟RCC->MP_AHB4ENSETR | (0x1<<5);GPIOF->MODER & (~(0x3<<16));EXTI->E…...
2386: [余姚2015] 幸运数字(luck)
目录 题目描述 输入 输出 样例输入 样例输出 提示 来源: 代码: 题目描述 今年圣诞节,小明收到了很多礼物,每个礼物上都有一个数字,表示对小明的祝福。可是小明有自己的想法,对小明来说,4或者7的倍数…...
【JUC系列-13】深入理解DelayQueue延迟队列的底层原理
JUC系列整体栏目 内容链接地址【一】深入理解JMM内存模型的底层实现原理https://zhenghuisheng.blog.csdn.net/article/details/132400429【二】深入理解CAS底层原理和基本使用https://blog.csdn.net/zhenghuishengq/article/details/132478786【三】熟练掌握Atomic原子系列基本…...
Leetcode---365周赛
题目列表 2873. 有序三元组中的最大值 I 2874. 有序三元组中的最大值 II 2875. 无限数组的最短子数组 2876. 有向图访问计数 一、有序三元组中的最大值I 看一眼该题的数据范围,直接三层for循环暴力枚举,时间复杂度O(n^3),代码如下 class…...
Java使用opencv实现人脸识别、人脸比对
1. opencv概述 OpenCV是一个开源的计算机视觉库,它提供了一系列丰富的图像处理和计算机视觉算法,包括图像读取、显示、滤波、特征检测、目标跟踪等功能。 opencv官网:https://opencv.org/ opencv官网文档:https://docs.opencv.or…...
Redis HyperLogLog的使用
Redis HyperLogLog知识总结 一、简介二、使用 一、简介 Redis HyperLogLog是一种数据结构,用于高效地计算基数(集合中唯一元素的数量)。它的主要作用是用于在内存中高效地存储和计算大量数据的基数,而无需完全存储所有的数据。Hy…...
Apisix-Ingress服务发现详解
apisix Apache APISIX 是一个基于微服务 API 网关,其不仅可以处理南北向的流量,也可以处理东西向的流量即服务之间的流量。Apache APISIX 集成了控制面板和数据面,与其他 API 网关相比,Apache APISIX 的上游、路由、插件全是动态的…...
spring6-事务
文章目录 1、JdbcTemplate1.1、简介1.2、准备工作1.3、实现CURD①装配 JdbcTemplate②测试增删改功能③查询数据返回对象④查询数据返回list集合⑤查询返回单个的值 2、声明式事务概念2.1、事务基本概念①什么是事务②事务的特性 2.2、编程式事务2.3、声明式事务 3、基于注解的…...
JavaFx学习问题2--音频、视频播放失败情况
文章目录 一、路径注意事项:① 用相对路径的时候别忘了前面的斜杠② uri问题 二、播放不了的问题① 获取的媒体文件路径本身就是不对的② 必须是uri③ 特殊情况 额外收获: 一、路径注意事项: 完整代码如下: import javafx.application.Application; im…...
第55节—— redux-toolkit中的createReducer——了解
一、概念 当我们使用 Redux 开发应用程序时,一个非常重要的概念就是 reducer。一个 reducer 是一个纯函数,它接受先前的状态和一个动作,然后返回一个新状态。每个动作都会引起状态的变化,从而使应用程序状态管理更加清晰和可控。…...
JUC并发编程——JUC并发编程概述及Lock锁(重点)(基于狂神说的学习笔记)
基于bilibili狂神说JUC并发编程视频所做笔记 概述 什么是JUC JUC时java.util工具包中的三个包的简称 java.util.concurrent java.util.concurrent.atomic java.util.concurrent.locks 业务:普通的线程代码中,我们常使用Runnable接口 但Runnable没有返…...
深入了解 Java 中的时间信息定义、转换、比较和操作
1. 简介 在过去的传统Java日期处理中,经常面临着一些问题。比如,java.util.Date和java.util.Calendar在表示日期和时间时存在着一些奇怪的行为,如月份从0开始计数、对日期进行格式化的方式繁琐不直观等。这些问题给开发带来了一定的困扰。 …...
2023年中国智能矿山发展历程及趋势分析:智能矿山健康有序发展[图]
智能矿山系统对矿山生产提质增效的效果已经开始显现:对不合规、有风险的行动进行及时预警,减少安全事故发生概率,避免因停产整顿产生的巨额亏损;精细化管理整个生产流程,避免过往传统粗放的流程导致的浪费,…...
acwing算法基础之基础算法--整数离散化算法
目录 1 知识点2 模板 1 知识点 整个范围很大,但存在的数据点很少。比如从 − 1 0 9 -10^9 −109到 1 0 9 10^9 109,但总共只有 1 0 6 10^6 106个数。 可以采用离散化的思想来做,即将离散的大数值映射成连续的小数值(一般是 1 , …...
基于SSM框架的安全教育平台
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...
Kafka生产者使用案例
1.生产者发送消息的过程 首先介绍一下 Kafka 生产者发送消息的过程: 1)Kafka 会将发送消息包装为 ProducerRecord 对象, ProducerRecord 对象包含了目标主题和要发送的内容,同时还可以指定键和分区。在发送 ProducerRecord 对象前,…...
EasyX图形库实现贪吃蛇游戏
⭐大家好,我是Dark Falme Masker,学习了动画制作及键盘交互之后,我们就可以开动利用图形库写一个简单的贪吃蛇小游戏,增加学习乐趣。 ⭐专栏:EasyX部分小游戏实现详细讲解 最终效果如下 首先包含头文件 #include<stdio.h> #…...
深度解析:Performance-Fish如何通过四级缓存架构实现《环世界》400%性能优化
深度解析:Performance-Fish如何通过四级缓存架构实现《环世界》400%性能优化 【免费下载链接】Performance-Fish Performance Mod for RimWorld 项目地址: https://gitcode.com/gh_mirrors/pe/Performance-Fish Performance-Fish是《环世界》(Rim…...
猫抓扩展完整指南:三步掌握浏览器视频嗅探与下载技巧
猫抓扩展完整指南:三步掌握浏览器视频嗅探与下载技巧 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓(Cat-Catch&#…...
JetBrains IDE 30天试用重置:一键解决方案的完整实践指南
JetBrains IDE 30天试用重置:一键解决方案的完整实践指南 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 当您正专注于代码调试时,IDE突然弹出"评估期已结束"的红色警告…...
Mantic.sh:Bash脚本实现的终端命令自动化与效率提升工具
1. 项目概述:一个为开发者打造的终端效率工具如果你和我一样,每天有超过一半的工作时间是在终端(Terminal)里度过的,那你肯定对效率工具有着近乎偏执的追求。从cd到ls,从grep到awk,我们依赖这些…...
ESP32-S2 Reverse TFT Feather开发板深度解析:从核心硬件到物联网项目实战
1. 项目概述:为什么选择ESP32-S2 Reverse TFT Feather?如果你正在寻找一款能让你快速搭建物联网设备原型,尤其是那些需要一块漂亮屏幕来交互或显示信息的项目,那么ESP32-S2 Reverse TFT Feather绝对是一个值得你花时间研究的开发板…...
从零部署开源语音助手:OpenClaw项目实战与二次开发指南
1. 项目概述:从开源代码到可用的语音助手看到leilei926524-tech/openclaw-voice-assistant这个项目标题,我的第一反应是:又一个基于开源代码的语音助手项目。在GitHub上,类似的项目多如牛毛,但真正能让一个普通开发者&…...
轻量级Web框架Oli:从核心原理到生产实践
1. 项目概述:一个轻量级、可扩展的Web应用框架最近在梳理手头几个小项目的技术栈时,我又把amrit110/oli这个仓库翻了出来。这是一个在GitHub上由开发者amrit110创建并维护的名为oli的项目。乍一看标题,你可能会有点懵,oli是什么&a…...
CC2530与ESP8266物联网网关:ZigBee转Wi-Fi通信协议转换实战
1. 项目概述:当ZigBee遇上Wi-Fi最近在折腾一个智能家居的传感器节点,核心是TI的CC2530 ZigBee芯片。这玩意儿功耗低、组网方便,是很多低功耗传感网络的绝佳选择。但问题来了,ZigBee网络的数据最终怎么方便地送到我们手机上去看呢&…...
开源UI组件库深度解析:从设计系统到工程实践
1. 项目概述:一个开源UI组件库的诞生与价值如果你是一名前端开发者,或者正在负责一个需要快速搭建现代化界面的项目,那么你大概率听说过或者用过一些知名的UI组件库。今天我想深入聊聊一个在GitHub上拥有超过1.5万星标,被许多开发…...
奥里亚语语音合成准确率骤降?揭秘ElevenLabs最新v4.2模型在Odisha方言中的5大发音偏差与3步校准法
更多请点击: https://intelliparadigm.com 第一章:奥里亚语语音合成准确率骤降现象全景透视 近期多个基于深度学习的奥里亚语(Odia)TTS系统在部署后出现显著性能退化:词级发音准确率从92.4%骤降至73.1%,尤…...
