name_scope,variable_scope作用、tf.truncated_normal()--tensorflow 基础知识

1、首先清楚tf. get_variable()和tf.variable()。因为如果使用Variable 的话每次都会新建变量,但是大多数时候我们是希望一些变量重用的,所以就用到了get_variable()。它会去搜索变量名,然后没有就新建,有就直接用。用到变量名了,就涉及到了名字域的概念。通过不同的域来区别变量名,毕竟让我们给所有变量都直接取不同名字还是有点辛苦的。所以为什么会有scope 的概念;name_scope 作用于操作,variable_scope 可以通过设置reuse 标志以及初始化方式来影响域下的变量。

2、在 tf.name_scope下时,tf.get_variable()创建的变量名不受 name_scope 的影响,而且在未指定共享变量时,如果重名会报错,tf.Variable()会自动检测有没有变量重名,如果有则会自行处理。

 
import tensorflow as tf
with tf.name_scope("hello") as name_scope:
     arr1=tf.get_variable("arr1",shape=[2,10],dtype=tf.float32)
     print(name_scope)
     print(arr1.name)
     print("scope_name:%s"% tf.get_variable_scope().original_name_scope)
运行结果:

hello/
arr1:0
scope_name:

name_scope对get_variable()创建的变量不会有任何影响;

with tf.variable_scope("hello") as variable_scope:
     arr2=tf.get_variable("arr2",shape=[2,10],dtype=tf.float32)
     print(variable_scope)
     print(variable_scope.name)
     print(arr2.name)
     print("variable_name:%s"% tf.get_variable_scope().original_name_scope)
运行结果:

<tensorflow.python.ops.variable_scope.VariableScope object at 0x000000000D9D8780>
hello
hello/arr2:0
variable_name:hello_1/

利用 variable_scope实现对get_variable()创建的变量名字加前缀

3、tf.truncated_normal()表示从截断的正态分布中输出随机值

   参数含义

mean:一个python标量或一个标量张量。要生成的随机值的均值。
stddev:一个python标量或一个标量张量。要生成的随机值的标准偏差。
seed:一个Python整数。用于创建随机种子。查看 tf.set_random_seed 行为。
dtype:数据类型。只支持浮点类型

4、

l2_loss函数

tf.nn.l2_loss(t, name=None)

解释:这个函数的作用是利用 L2 范数来计算张量的误差值,但是没有开方并且只取 L2 范数的值的一半,具体如下:

output = sum(t ** 2) / 2

tensorflow实现

import tensorflow as tf

a=tf.constant([1,2,3],dtype=tf.float32)
b=tf.constant([[1,1],[2,2],[3,3]],dtype=tf.float32)

with tf.Session() as sess:
    print('a:')
    print(sess.run(tf.nn.l2_loss(a)))
    print('b:')
    print(sess.run(tf.nn.l2_loss(b)))
    sess.close()
结果a=7#(1+4+9)/2=7
b=28 #(2+8+18)/2=14(求解为距离原点的欧式距离)

 5、tf.add_to_collection()

import tensorflow as tf

v1 = tf.get_variable('v1', shape=[1], initializer=tf.ones_initializer())
v2 = tf.get_variable('v2', shape=[1], initializer=tf.zeros_initializer())

tf.add_to_collection('vc', v1)
tf.add_to_collection('vc', v2)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    vc = tf.get_collection('vc')
    print(vc)
    for i in vc:
        print(i)
        print(sess.run(i))
[<tf.Variable 'v1:0' shape=(1,) dtype=float32_ref>, <tf.Variable 'v2:0' shape=(1,) dtype=float32_ref>]
<tf.Variable 'v1:0' shape=(1,) dtype=float32_ref>
[ 1.]
<tf.Variable 'v2:0' shape=(1,) dtype=float32_ref>
[ 0.]

 6、tf.nn.conv2d是TensorFlow里面实现卷积的函数,

  参考 http://www.cnblogs.com/welhzh/p/6607581.html 非常详细

posted @ 2018-04-11 10:45  zjkl_欧了  阅读(941)  评论(0编辑  收藏  举报