关于tensorflow的几种参数初始化方法小结

yipeiwu_com5年前Python基础

在tensorflow中,经常会遇到参数初始化问题,比如在训练自己的词向量时,需要对原始的embeddigs矩阵进行初始化,更一般的,在全连接神经网络中,每层的权值w也需要进行初始化。

tensorlfow中应该有一下几种初始化方法

1. tf.constant_initializer() 常数初始化
2. tf.ones_initializer() 全1初始化
3. tf.zeros_initializer() 全0初始化
4. tf.random_uniform_initializer() 均匀分布初始化
5. tf.random_normal_initializer() 正态分布初始化
6. tf.truncated_normal_initializer() 截断正态分布初始化
7. tf.uniform_unit_scaling_initializer() 这种方法输入方差是常数
8. tf.variance_scaling_initializer() 自适应初始化
9. tf.orthogonal_initializer() 生成正交矩阵

具体的

1、tf.constant_initializer(),它的简写是tf.Constant()

#coding:utf-8
import numpy as np 
import tensorflow as tf 
train_inputs = [[1,2],[1,4],[3,2]]
with tf.variable_scope("embedding-layer"):
  val = np.array([[1,2,3,4,5,6,7],[1,3,4,5,2,1,9],[0,12,3,4,5,7,8],[2,3,5,5,6,8,9],[3,1,6,1,2,3,5]])
  const_init = tf.constant_initializer(val)
  embeddings = tf.get_variable("embed",shape=[5,7],dtype=tf.float32,initializer=const_init)
  embed = tf.nn.embedding_lookup(embeddings, train_inputs)             #在embedding中查找train_input所对应的表示
  print("embed",embed)
  sum_embed = tf.reduce_mean(embed,1)
initall = tf.global_variables_initializer()
with tf.Session() as sess:
  sess.run(initall)
  print(sess.run(embed))
  print(sess.run(tf.shape(embed)))
  print(sess.run(sum_embed))

4、random_uniform_initializer = RandomUniform()

可简写为tf.RandomUniform()

生成均匀分布的随机数,参数有四个(minval=0, maxval=None, seed=None, dtype=dtypes.float32),分别用于指定最小值,最大值,随机数种子和类型。

6、tf.truncated_normal_initializer()

可简写tf.TruncatedNormal()

生成截断正态分布的随机数,这个初始化方法在tf中用得比较多。

它有四个参数(mean=0.0, stddev=1.0, seed=None, dtype=dtypes.float32),分别用于指定均值、标准差、随机数种子和随机数的数据类型,一般只需要设置stddev这一个参数就可以了。

8、tf.variance_scaling_initializer()

可简写为tf.VarianceScaling()

参数为(scale=1.0,mode="fan_in",distribution="normal",seed=None,dtype=dtypes.float32)

scale: 缩放尺度(正浮点数)

mode: "fan_in", "fan_out", "fan_avg"中的一个,用于计算标准差stddev的值。

distribution:分布类型,"normal"或“uniform"中的一个。

当 distribution="normal" 的时候,生成truncated normal distribution(截断正态分布) 的随机数,其中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)

以上这篇关于tensorflow的几种参数初始化方法小结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

用python处理图片实现图像中的像素访问

用python处理图片实现图像中的像素访问

前面的一些例子中,我们都是利用Image.open()来打开一幅图像,然后直接对这个PIL对象进行操作。如果只是简单的操作还可以,但是如果操作稍微复杂一些,就比较吃力了。因此,通常我们加...

python实现sublime3的less编译插件示例

利用http://tool.oschina.net/less 提供的接口,发送请求进行远程编译.再将编译好的less,保存为同名后缀为css的文件中.第一次使用python,代码也是拼拼...

Python3实现并发检验代理池地址的方法

本文实例讲述了Python3实现并发检验代理池地址的方法。分享给大家供大家参考,具体如下: #encoding=utf-8 #author: walker #date: 2016-0...

python 一篇文章搞懂装饰器所有用法(建议收藏)

python 一篇文章搞懂装饰器所有用法(建议收藏)

01. 装饰器语法糖 如果你接触 Python 有一段时间了的话,想必你对 @ 符号一定不陌生了,没错 @ 符号就是装饰器的语法糖。 它放在一个函数开始定义的地方,它就像一顶帽子一样戴...

Python引用传值概念与用法实例小结

本文实例讲述了Python引用传值概念与用法。分享给大家供大家参考,具体如下: Python函数的参数传值使用的是引用传值,也就是说传的是参数的内存地址值,因此在函数中改变参数的值,函数...