当我们训练自己的神经网络的时候,无一例外的就是都会加上一句 sess.run(tf.global_variables_initializer()) ,这行代码的官方解释是 初始化模型的参数。那么,它到底做了些什么?

一步步看源代码:(代码在后面)

global_variables_initializer 返回一个用来初始化 计算图中 所有global variable的 op。
这个op 到底是啥,还不清楚。
函数中调用了 variable_initializer() 和 global_variables()
global_variables() 返回一个 Variable list ,里面保存的是 gloabal variables。
variable_initializer() 将 Variable list 中的所有 Variable 取出来,将其 variable.initializer 属性做成一个 op group。
然后看 Variable 类的源码可以发现, variable.initializer 就是一个 assign op。
所以: sess.run(tf.global_variables_initializer()) 就是 run了 所有global Variable 的 assign op,这就是初始化参数的本来面目。

def global_variables_initializer():
"""Returns an Op that initializes global variables.
Returns:
An Op that initializes global variables in the graph.
"""
return variables_initializer(global_variables())

def global_variables():
"""Returns global variables.
Returns:
A list of `Variable` objects.
"""
return ops.get_collection(ops.GraphKeys.GLOBAL_VARIABLES)

def variables_initializer(var_list, name="init"):
"""Returns an Op that initializes a list of variables.
Args:
var_list: List of `Variable` objects to initialize.
name: Optional name for the returned operation.

Returns:
An Op that run the initializers of all the specified variables.
"""
if var_list:
return control_flow_ops.group(*[v.initializer for v in var_list], name=name)
return control_flow_ops.no_op(name=name)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Variable(object):
def _init_from_args(self, ...):
self._initializer_op = state_ops.assign(
self._variable, self._initial_value,
validate_shape=validate_shape).op
@property
def initializer(self):
"""The initializer operation for this variable."""
return self._initializer_op
---------------------
作者:ke1th
来源:CSDN
原文:https://blog.csdn.net/u012436149/article/details/78291545
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. bzoj1103树状数组水题
  2. 2016shenyang-1002-HDU5893-List wants to travel-树链剖分+线段树维护不同区间段个数
  3. [Android Pro] 超能RecyclerView组件使用
  4. Jdk1.8+Eclipse+MySql+Tomcat开发Java应用的环境搭建
  5. esp8266烧写机智云固件方法
  6. 安装SQL Server 2012遇到“需要更新的以前的Visual Studio 2010实例.”
  7. MyEclipse过期激活方法
  8. AndroidGradle --多渠道打包配置(转发)
  9. C#基础知识-流程控制的应用(四)
  10. 《撸轮子系列》之LoadPE
  11. .NET 实现Base-64加密解密处理
  12. 【STM32H7教程】第2章 STM32H7的开发环境搭建
  13. 一些 NSArray 的基本操作代码例子
  14. HTTP协议是无状态的
  15. CodeForces 719A. Vitya in the Countryside
  16. [C#]GetFloat提示"指定的转换无效"
  17. 'git status'不显示untracked files
  18. Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem A. A + B
  19. DDMS调试信息
  20. ubuntu nginx本地局域网布署sever_name设置

热门文章

  1. Python中的进程池与线程池(包含代码)
  2. Unity3D研究院之为什么Inspector视图中脚本前面的勾选框没了
  3. linux系统命令配置文件
  4. 剑指offer 1-6
  5. 简单的requestAnimationFrame动画
  6. js表格拖拽
  7. Python小技巧整理
  8. oracle一些常见的问题
  9. [java]网上商城错误集锦 2016-05-08 21:49 499人阅读 评论(32) 收藏
  10. DLA SQL分析函数:SQL语句审计与分析的利器