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]

eval() 的用法相关推荐

  1. javascript 之----eval的用法

    语法:eval(expr)        功能:1)eval函数可以把一个字符串当作一个javascript表达式一样去执行,返回执行完以后的值.       2)参数expr是一个被求值的字符串参数 ...

  2. model.train()与model.eval()的用法、Dropout原理、relu,sigmiod,tanh激活函数、nn.Linear浅析

    转载:原文地址-传送门 1.model.train()与model.eval()的用法 看别人的面经时,浏览到一题,问的就是这个.自己刚接触pytorch时套用别人的框架,会在训练开始之前写上mode ...

  3. tensorflow中的eval的用法

    tensorflow中eval()的用法 做人工智能实验的过程中遇到这样一段代码不是很明白是什么意思: 查阅资料后明白了tensorflow中eval的用法: with tf.Session() as ...

  4. eval 函数 java_[Java教程]eval()函数用法详解

    [Java教程]eval()函数用法详解 0 2015-12-14 11:00:26 eval()函数用法详解: 此函数可能使用的频率并不是太高,但是在某些情况下具有很大的作用,下面就介绍一下eval ...

  5. DataBinder.Eval 的用法细则

    DataBinder.Eval 的用法细则 <%# Bind("Subject") %> //绑定字段 <%# Container.DataItemIndex + ...

  6. python中eval的用法?

    python中eval函数用法如下: 1.计算字符串中有效的表达式,并返回结果. 2.将字符串转成相应的对象(如list.tuple.dict和string之间的转换). 3.将利用反引号转换的字符串 ...

  7. 特殊命令eval的用法两例

    原问题来自:http://ask.oldboyedu.com/?q-24.html 如何使用变量作为数组名? 比如i=1,array1=(a b c);我如何才能得到 ${array$i[@]}的结果 ...

  8. linux命令eval的用法

    eval用法 功能说明:告知shell取出eval的参数,重新运算求出参数的内容. 语 法:eval [参数] 补充说明:eval可读取一连串的参数,然后再依参数本身的特性来执行. 参 数:参数不限数 ...

  9. 【干货】eval函数用法解释及对开发者的便利讲解

    个人见解,有选择阅读,欢迎评论指正 Python中,默认有个函数名为eval.这个函数在诸多像我一样的菜鸡圈子里,是很少用的.我也一直以为这个没什么特别大的作用.直到今天,我在读一个源代码的时候,突然 ...

  10. Python eval的用法及注意事项

    eval是Python的一个内置函数,这个函数的作用是,返回传入字符串的表达式的结果.想象一下变量赋值时,将等号右边的表达式写成字符串的格式,将这个字符串作为eval的参数,eval的返回值就是这个表 ...

最新文章

  1. url主机域名可以省略_网站迁移虚拟主机怎么样能不影响网站优化
  2. G面经prepare: Reorder String to make duplicates not consecutive
  3. python3编译器怎么下载_Python编译器及Sublime Text3安装及开发环境配置
  4. java bloomfilter_爬虫技术之——bloom filter(含java代码)
  5. 我最开始学dancing link的HTML5的时候
  6. 有关 vSphere 6.X 的证书及升级问题 (转)-影响等级(重要)
  7. 杭电 1060 Leftmost Digit
  8. python插入数据查询不出结果问题
  9. 全网首发:分析及解决com.jogamp.opengl.GLException: J3D-Renderer-1: createImpl ARB n/a but required
  10. 工业铝型材与钢铁之间的区别
  11. 抖音自拍特效如何java实现_抖音特效在 Web 端的实现
  12. 微生物组学大数据:如何挖掘与利用?
  13. 网络工程师之网络规划
  14. java缓存击穿_对缓存击穿的一点思考
  15. K8S 污点和容忍度
  16. Hadoop入门——初识Hadoop
  17. 导入导出excel表格EasyExcel操作
  18. OSChina 周日乱弹 —— 生活就像巧克力
  19. Dynamic Programming?老牛吃药
  20. 手把手教你用数据分析帮女神学姐选婚房

热门文章

  1. HTML+CSS实现按钮手风琴效果 | 青训营笔记
  2. bind dlz mysql rpm_BIND+DLZ+MYSQL | 学步园
  3. with dlz mysql 条件_BIND+DLZ+MYSQL实现区域记录动态更新
  4. 游戏开发unity编辑器扩展知识系列:进度条显示EditorUtility.ProgressBar
  5. Esac代表什么意义?
  6. Linux中update和upgrade的区别
  7. 解决电脑端微信浏览器不支持vue、axios等问题
  8. 传统 + 十六进制 色
  9. (二十四)资本资产定价模型
  10. Maltab GUI课程设计——LSTM长短期记忆网络回归预测