当前位置: 首页 > news >正文

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

按键控制小灯、蜂鸣器、风扇&#xff0c;按一次启动&#xff0c;第二次关闭 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)

目录 题目描述 输入 输出 样例输入 样例输出 提示 来源: 代码&#xff1a; 题目描述 今年圣诞节&#xff0c;小明收到了很多礼物&#xff0c;每个礼物上都有一个数字&#xff0c;表示对小明的祝福。可是小明有自己的想法&#xff0c;对小明来说&#xff0c;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 看一眼该题的数据范围&#xff0c;直接三层for循环暴力枚举&#xff0c;时间复杂度O(n^3)&#xff0c;代码如下 class…...

Java使用opencv实现人脸识别、人脸比对

1. opencv概述 OpenCV是一个开源的计算机视觉库&#xff0c;它提供了一系列丰富的图像处理和计算机视觉算法&#xff0c;包括图像读取、显示、滤波、特征检测、目标跟踪等功能。 opencv官网&#xff1a;https://opencv.org/ opencv官网文档&#xff1a;https://docs.opencv.or…...

Redis HyperLogLog的使用

Redis HyperLogLog知识总结 一、简介二、使用 一、简介 Redis HyperLogLog是一种数据结构&#xff0c;用于高效地计算基数&#xff08;集合中唯一元素的数量&#xff09;。它的主要作用是用于在内存中高效地存储和计算大量数据的基数&#xff0c;而无需完全存储所有的数据。Hy…...

Apisix-Ingress服务发现详解

apisix Apache APISIX 是一个基于微服务 API 网关&#xff0c;其不仅可以处理南北向的流量&#xff0c;也可以处理东西向的流量即服务之间的流量。Apache APISIX 集成了控制面板和数据面&#xff0c;与其他 API 网关相比&#xff0c;Apache APISIX 的上游、路由、插件全是动态的…...

spring6-事务

文章目录 1、JdbcTemplate1.1、简介1.2、准备工作1.3、实现CURD①装配 JdbcTemplate②测试增删改功能③查询数据返回对象④查询数据返回list集合⑤查询返回单个的值 2、声明式事务概念2.1、事务基本概念①什么是事务②事务的特性 2.2、编程式事务2.3、声明式事务 3、基于注解的…...

JavaFx学习问题2--音频、视频播放失败情况

文章目录 一、路径注意事项&#xff1a;① 用相对路径的时候别忘了前面的斜杠② uri问题 二、播放不了的问题① 获取的媒体文件路径本身就是不对的② 必须是uri③ 特殊情况 额外收获: 一、路径注意事项&#xff1a; 完整代码如下: import javafx.application.Application; im…...

第55节—— redux-toolkit中的createReducer——了解

一、概念 当我们使用 Redux 开发应用程序时&#xff0c;一个非常重要的概念就是 reducer。一个 reducer 是一个纯函数&#xff0c;它接受先前的状态和一个动作&#xff0c;然后返回一个新状态。每个动作都会引起状态的变化&#xff0c;从而使应用程序状态管理更加清晰和可控。…...

JUC并发编程——JUC并发编程概述及Lock锁(重点)(基于狂神说的学习笔记)

基于bilibili狂神说JUC并发编程视频所做笔记 概述 什么是JUC JUC时java.util工具包中的三个包的简称 java.util.concurrent java.util.concurrent.atomic java.util.concurrent.locks 业务&#xff1a;普通的线程代码中&#xff0c;我们常使用Runnable接口 但Runnable没有返…...

深入了解 Java 中的时间信息定义、转换、比较和操作

1. 简介 在过去的传统Java日期处理中&#xff0c;经常面临着一些问题。比如&#xff0c;java.util.Date和java.util.Calendar在表示日期和时间时存在着一些奇怪的行为&#xff0c;如月份从0开始计数、对日期进行格式化的方式繁琐不直观等。这些问题给开发带来了一定的困扰。 …...

2023年中国智能矿山发展历程及趋势分析:智能矿山健康有序发展[图]

智能矿山系统对矿山生产提质增效的效果已经开始显现&#xff1a;对不合规、有风险的行动进行及时预警&#xff0c;减少安全事故发生概率&#xff0c;避免因停产整顿产生的巨额亏损&#xff1b;精细化管理整个生产流程&#xff0c;避免过往传统粗放的流程导致的浪费&#xff0c;…...

acwing算法基础之基础算法--整数离散化算法

目录 1 知识点2 模板 1 知识点 整个范围很大&#xff0c;但存在的数据点很少。比如从 − 1 0 9 -10^9 −109到 1 0 9 10^9 109&#xff0c;但总共只有 1 0 6 10^6 106个数。 可以采用离散化的思想来做&#xff0c;即将离散的大数值映射成连续的小数值&#xff08;一般是 1 , …...

基于SSM框架的安全教育平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…...

Kafka生产者使用案例

1.生产者发送消息的过程 首先介绍一下 Kafka 生产者发送消息的过程&#xff1a; 1)Kafka 会将发送消息包装为 ProducerRecord 对象&#xff0c; ProducerRecord 对象包含了目标主题和要发送的内容&#xff0c;同时还可以指定键和分区。在发送 ProducerRecord 对象前&#xff0c…...

EasyX图形库实现贪吃蛇游戏

⭐大家好&#xff0c;我是Dark Falme Masker,学习了动画制作及键盘交互之后&#xff0c;我们就可以开动利用图形库写一个简单的贪吃蛇小游戏&#xff0c;增加学习乐趣。 ⭐专栏&#xff1a;EasyX部分小游戏实现详细讲解 最终效果如下 首先包含头文件 #include<stdio.h> #…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...