tensorflow中常用的变量初始化方法_tensorflow 创建一个初始为均匀分布的变量-程序员宅基地

技术标签: tensorflow  变量初始化方法  深度学习  initializer  

1. 初始化为常量

tf.constant_initializer

 

__init__(
    value=0,            #指定的常量
    dtype=tf.float32,    #数据类型
    verify_shape=False    #是否可以调整tensor的形状,默认可以调整
)
#常量初始化
#tf.constant_initializer
value=[0,1,2,3,4,5,6,7]
print('fitting shape:')
with tf.Session():
    x=tf.get_variable('x',shape=[2,4],initializer=tf.constant_initializer(value))
    x.initializer.run()
    print(x.eval())

#output:
#[ 0.  1.  2.  3.  4.  5.  6.  7.]

tf提供了 tf.zeros_initializer() 和 tf.ones_initializer() 类,分别用来初始化全0和全1的tensor对象:

tf.initializers.zeros

__init__(dtype=tf.float32)

 tf.initializers.ones

__init__(dtype=tf.float32)
with tf.Session() as sess:
 
  x = tf.get_variable('x', shape=[8], initializer=tf.zeros_initializer())
  y = tf.get_variable('y', shape=[8], initializer=tf.ones_initializer)
  x.initializer.run()
  y.initializer.run()
  print(x.eval())
  print(y.eval())
 
#output:
# [ 0.  0.  0.  0.  0.  0.  0.  0.]
# [ 1.  1.  1.  1.  1.  1.  1.  1.]

 2. 初始化为均匀分布

tf.random_uniform_initializer

__init__(
    minval=0,  
    maxval=None,
    seed=None,
    dtype=tf.float32
)
  • minval: A python scalar or a scalar tensor. 生成随机值范围的下限
  • maxval: A python scalar or a scalar tensor. 要生成的随机值范围的上限。浮点类型默认为1。
  • seed: A Python integer. Used to create random seeds. See tf.set_random_seed for behavior.
  • dtype: The data type.

均匀分布生成的随机数并不是从小到大或者从大到小均匀分布的,这里均匀分布的意义是每次从一组服从均匀分布的数里边随机抽取一个数 

tf.uniform_unit_scaling_initializer

__init__(
    factor=1.0,
    seed=None,
    dtype=tf.float32
)

 tf.uniform_unit_scaling_initializer 跟 tf.random_uniform_initializer 不同的地方是前者不需要指定最大最小值,是通过公式计算出来的:

max_val = math.sqrt(3 / input_size) * factor
min_val = -max_val

input_size是生成数据的维度,factor是系数。 

#均匀分布初始化
#tf.random_uniform_initializer
#tf.uniform_unit_scaling_initializer

init_uniform = tf.random_uniform_initializer(minval=0, maxval=10, seed=None, dtype=tf.float32)
init_uniform_unit = tf.uniform_unit_scaling_initializer(factor=1.0, seed=None, dtype=tf.float32)

with tf.Session() as sess:
    x_uni = tf.get_variable('x_uni', shape=[10], initializer=init_uniform)
    x_uni_scale=tf.get_variable('x_uni_scale', shape=[10], initializer=init_uniform_unit)
    x_uni.initializer.run()
    x_uni_scale.initializer.run()
    print(x_uni.eval())
    print(x_uni_scale.eval())

#output:
#[5.804309  7.8211856 4.7346306 6.652793  7.749939  5.932355  5.0870695
# 5.6576195 2.7801192 8.98697  ]
#output:
#[ 1.5332981   0.16584563  1.4062299  -0.3267752  -0.8763422   0.8975915
# -1.3831029   0.573007    0.01714456 -0.43182337]

3. 初始化为正态分布

tf.random_normal_initializer​​​​​​

生成一组符合标准正太分布的tensor

__init__(
    mean=0.0,
    stddev=1.0,
    seed=None,
    dtype=tf.float32
)
  • mean: a python scalar or a scalar tensor. 要生成的随机值的平均值
  • stddev: a python scalar or a scalar tensor. 要生成的随机值的标准差
  • seed: A Python integer. Used to create random seeds. See tf.set_random_seed for behavior.
  • dtype: The data type. 仅支持浮点类型

tf.truncated_normal_initializer

生成一组符合截断正太分布的tensor

__init__(
    mean=0.0,
    stddev=1.0,
    seed=None,
    dtype=tf.float32
)

 

init_random = tf.random_normal_initializer(mean=0.0, stddev=1.0, seed=None, dtype=tf.float32)
init_truncated = tf.truncated_normal_initializer(mean=0.0, stddev=1.0, seed=None, dtype=tf.float32)
 
 
with tf.Session() as sess:
 
  x = tf.get_variable('x', shape=[10], initializer=init_random)
  y = tf.get_variable('y', shape=[10], initializer=init_truncated)
  x.initializer.run()
  y.initializer.run()
 
  print(x.eval())
  print(y.eval())
 
 
#output:
# [-0.40236568 -0.35864913 -0.94253045 -0.40153521  0.1552504   1.16989613
#   0.43091929 -0.31410623  0.70080078 -0.9620409 ]
# [ 0.18356581 -0.06860946 -0.55245203  1.08850253 -1.13627422 -0.1006074
#   0.65564936  0.03948414  0.86558545 -0.4964745 ]

 4. 初始化为变尺度正太、均匀分布

tf.variance_scaling_initializer()

可以生成截断正太分布和均匀分布的tensor,增加了更多的控制参数

__init__(
    scale=1.0,
    mode='fan_in',
    distribution='truncated_normal',
    seed=None,
    dtype=tf.float32
)
  • scale: 缩放尺度(positive float).
  • mode: 有3个值可选:"fan_in", "fan_out", "fan_avg",用于控制计算标准差 stddev的值
  • distribution: 2个值可选: One of "normal", "uniform",定义生成的tensor的分布是截断正太分布还是均匀分布
  • seed: A Python integer. Used to create random seeds. See tf.set_random_seed for behavior.
  • dtype: The data type. 仅支持浮点类型

distribution选‘normal’的时候,生成的是截断正太分布,标准差 stddev = sqrt(scale / n), n的取值根据mode的不同设置而不同:

  • mode = "fan_in", n为输入单元的结点数;         
  • mode = "fan_out",n为输出单元的结点数;
  • mode = "fan_avg",n为输入和输出单元结点数的平均值;

distribution选 ‘uniform’,生成均匀分布的随机数tensor,最大值 max_value和 最小值 min_value 的计算公式:

max_value = sqrt(3 * scale / n)
min_value = -max_value

 

#初始化为变尺度正太、均匀分布
init_variance_scaling_normal = tf.variance_scaling_initializer(scale=1.0,mode="fan_in",
                                                        distribution="normal",seed=None,dtype=tf.float32)
init_variance_scaling_uniform = tf.variance_scaling_initializer(scale=1.0,mode="fan_in",
                                                        distribution="uniform",seed=None,dtype=tf.float32)
 
with tf.Session() as sess:
    x_var_nor = tf.get_variable('x_var_nor', shape=[10], initializer=init_variance_scaling_normal)
    y_var_uni = tf.get_variable('y_var_uni', shape=[10], initializer=init_variance_scaling_uniform)
    x_var_nor.initializer.run()
    y_var_uni.initializer.run()

    print(x_var_nor.eval())
    print(y_var_uni.eval())

#output:
[-0.47120634 -0.12735353 -0.21091501 -0.4237936   0.22056238  0.53884083
  0.03047677 -0.11111113 -0.12246209 -0.27407783]
[-0.5104643  -0.14123923 -0.5194504   0.43422425 -0.1864321  -0.49164253
 -0.03280574 -0.1064662   0.5060091   0.3518808 ]

5. 其他初始化方式

tf.orthogonal_initializer

初始化为正交矩阵的随机数,形状最少需要是二维的

__init__(
    gain=1.0,
    seed=None,
    dtype=tf.float32
)
  • gain: 应用于正交矩阵的乘法因子
  • seed: A Python integer. Used to create random seeds. See tf.set_random_seed for behavior.
  • dtype: The data type.

tf.glorot_uniform_initializer()

也称之为Xavier uniform initializer,生成与输入输出节点数相关的均匀分布随机数

__init__(
    seed=None,
    dtype=tf.float32
)

假设均匀分布的区间是[-limit, limit],则 limit=sqrt(6 / (fan_in + fan_out))

tf.glorot_normal_initializer

也称之为 Xavier normal initializer. 生成与输入输出节点数相关的截断正太分布随机数

__init__(
    seed=None,
    dtype=tf.float32
)

stddev = sqrt(2 / (fan_in + fan_out)),其中的fan_in和fan_out分别表示输入单元的结点数和输出单元的结点数。

init_orthogonal = tf.orthogonal_initializer(gain=1.0, seed=None, dtype=tf.float32)
init_glorot_uniform = tf.glorot_uniform_initializer()
init_glorot_normal = tf.glorot_normal_initializer()
 
with tf.Session() as sess:
    x_orth = tf.get_variable('x_orth', shape=[4,4], initializer=init_orthogonal)
    y_glo_uni = tf.get_variable('y_glo_uni', shape=[10], initializer=init_glorot_uniform)
    z_glo_nor = tf.get_variable('z_glo_nor', shape=[10], initializer=init_glorot_normal)

    x_orth.initializer.run()
    y_glo_uni.initializer.run()
    z_glo_nor.initializer.run()

    print(x_orth.eval())
    print(y_glo_uni.eval())
    print(z_glo_nor.eval())

#output:
[[-0.23597395  0.66629636  0.70593053 -0.04502723]
 [-0.5642902   0.04045057 -0.27636054 -0.77689457]
 [ 0.16582792 -0.64549994  0.64033526 -0.38183987]
 [-0.7735592  -0.37113696  0.12352219  0.49860382]]
[ 0.09983057  0.2719695  -0.44999748 -0.15994337 -0.51829576  0.0245778
 -0.09081429 -0.05701229 -0.51071364  0.07084149]
[ 0.10609829  0.15208444  0.5383526  -0.42126465  0.0384669   0.37158582
  0.07740056 -0.40733275  0.09609934 -0.08710001]

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/gefeng1209/article/details/89786628

智能推荐

图像噪声的概念与理论分析_图像噪音-程序员宅基地

文章浏览阅读1k次,点赞28次,收藏22次。图像噪声是图像在摄取或传输时所受的随机信号干扰,是图像中各种妨碍人们对其信息接受的因素。很多时候将图像噪声看成是多维随机过程,因而描述噪声的方法完全可以借用随机过程的描述,即用其概率分布函数和概率密度分布函数。图像噪声是多种多样的,其性质也千差万别,所以了解噪声的分类是很有必要的。_图像噪音

c++关联容器详细介绍_c++的关联容器-程序员宅基地

文章浏览阅读1.3k次,点赞45次,收藏22次。关联容器是C++标准库的一部分,用于存储和管理具有键值对的数据元素。与顺序容器(如vector和list)不同,关联容器的主要特点是它们能够快速查找特定键的值。这是因为关联容器内部使用了高效的数据结构(如二叉树或哈希表)来组织数据。std::set:一个集合,包含唯一元素,按特定顺序排序。std::map:一个映射,包含键值对,其中键是唯一的。std::multiset和std::multimap:类似于set和map,但允许键的重复。_c++的关联容器

el-select下拉框选项的样式修改(背景色、hover、字体等)_el-select hover-程序员宅基地

文章浏览阅读5.5w次,点赞30次,收藏144次。一:如何修改el-select下拉框中选项的样式,网上的方法一般有两种:1.找到下拉框的类名,写一个全局的样式。2.通过/deep/来修改.el-select-dropdown__item的样式内容3.通过popper-class设置的类名添加样式以上几种方式中,第二种和第三种是无法生效的,而第一种形式虽然可以,但是会造成样式污染,在打包上传到服务器的时候,其他地方的样式可能会因此发生改变。二:问题分析上图中显示的是当选中el-select的选项时页面的结构,选项的容器并不在挂载的div#ap_el-select hover

CDH配置hive.exec.dynamic.partition.mode_cdh hive.exec.dynamic.partition.mode-程序员宅基地

文章浏览阅读904次。cdh配置hive.exec.dynamic.partition.mode看图说话,我是用的server2,所以根据自己情况配置_cdh hive.exec.dynamic.partition.mode

matlab print用法,使用Matlab:错误使用 mprint (line 231) Wrong # rnames in mprint,怎么解决...-程序员宅基地

文章浏览阅读813次。请问大牛们:在使用Matlab:错误使用 mprint (line 231) Wrong # rnames in mprint,怎么解决?程序如下:T=12;N=10;W=normw(W1);y=A(:,[23]);x=A(:,[17:22]);for t=1:Tt1=(t-1)*N+1;t2=t*N;wx(t1:t2,:)=W*x(t1:t2,:);endxconstant=ones(N*T,1..._matlab print报错

Java substring用法_java substring的用法-程序员宅基地

文章浏览阅读467次。public String substring(int beginIndex, int endIndex)返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,一直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。示例: "ham_java substring的用法

随便推点

npm install vuex --save时报错解决 vue下载vuex插件报错_npm n install vuex --save unknown command: "n-程序员宅基地

文章浏览阅读4.9k次。npm install --save vuexnpm ERR! code ENOSELF原因:创建项目时命名成了vuex,npm 安装的包不能将自身作为依赖。解决办法:package.json中name=‘vuex’ 改成 name=‘vuextest’或者另外的名字试试看。_npm n install vuex --save unknown command: "n

用Docker Compose搭建WordPress时出现The designated data directory /var/lib/mysql/ is unusable的错误-程序员宅基地

文章浏览阅读3k次。用Docker Compose搭建WordPress时出现The designated data directory /var/lib/mysql/ is unusable的错误_the designated data directory /var/lib/mysql/ is unusable. you can remove al

信息系统项目管理(五)信息系统安全技术_信息系统的准确性,完整性,可靠性,稳定性-程序员宅基地

文章浏览阅读7.3k次,点赞5次,收藏30次。信息系统安全技术知识梳理_信息系统的准确性,完整性,可靠性,稳定性

Spring Cloud-Feign丢失Cookie和Header信息的问题(Finchley.RC2版本)_自动运行的feign丢失cookie-程序员宅基地

文章浏览阅读2k次。最近在做项目的时候发现,微服务使用feign相互之间调用时,存在session丢失的问题。例如,使用Feign调用某个远程API,这个远程API需要传递一个鉴权信息,我们可以把cookie里面的session信息放到Header里面,这个Header是动态的,跟你的HttpRequest相关,我们选择编写一个拦截器来实现Header的传递,也就是需要实现RequestInterceptor接口,具体代码如下:@Configuration @EnableFeignClients(basePackag_自动运行的feign丢失cookie

javascript复选框_使用javascript动态添加带有复选框的表格行-程序员宅基地

文章浏览阅读1k次。javascript复选框 标题:使用JavaScript动态添加带有复选框的表格行 作者:Vivek Kapile 电子邮件:已快照 语言:JavaScript 平台:ASP.net中JavaScript 技术:用于ASP.net 级别:初学者 介绍 此代码将为想要学习的初学者提供帮助,帮助他们了解如何通过JavaScript在表中动态创建复选框。 我已经介..._js动态向td添加复选框

React vscode 创建 react 项目流程【超详细】-程序员宅基地

文章浏览阅读1.7w次,点赞27次,收藏116次。文章目录一、安装node二、配置淘宝镜像三、配置 vscode(win10)四、全局安装脚手架五、创建项目一、安装node请在官网下载安装:https://nodejs.org/zh-cn/vscode 中 点击 ( ctrl + `) 调出终端输入指令node -v,能显示版本号,说明 node 已经装好了输入指令npm -v,能显示版本号,说明 npm 可以使用了点击链接查看图文教程https://blog.csdn.net/qq_45677671/article/detail_react vscode

推荐文章

热门文章

相关标签