【tensorflow】tf.Variable、tf.Variable、tf.Variable

  张量(Tensor)是TensorFlow的核心数据单位。一个张量由一组形成阵列(任意维数)的原始值组成。张量的阶是它的维数,而它的形状是一个整数元组,指定了阵列每个维度的长度。
下面会介绍 Tensorflow 中几个特殊张量:
- tf.Variable
- tf.constant
- tf.placeholder

tf.Variable

  Tensorflow 变量是表示程序处理的共享持久状态的最佳方法。

创建变量

  创建变量的最佳方式是调用 tf.get_variable函数。此函数需要指定变量的名字与形状。

# 创建名为‘variable_a’,形状为[1,2,3]的3维张量
variable_a = tf.get_variable("a",shape=[1,2,3])

  tf.get_variable还可以指定数据类型(默认的是 tf.float32)和初始化器。Tensorflow 提供了许多方便的初始化器,比如

  • tf.zeros_initializer

    初始化为0

    variable_b = tf.get_variable("b", shape=[1, 2, 3], dtype=tf.float32,
                                 initializer=tf.zeros_initializer)
  • tf.constant_initializer

    初始化为常量

    value = np.array([0, 1, 2, 3, 4, 5, 6, 7])
    variable_c = tf.get_variable("c", dtype=tf.float32, shape=value.shape,
                                 initializer=tf.constant_initializer(value))
  • tf.truncated_normal_initializer

    随机初始化

    variable_d = tf.get_variable('d', dtype=tf.float32, shape=[4, 3, 4], initializer=tf.truncated_normal_initializer)
    
  • tf.contrib.layers.xavier_initializer

    随机初始化

    variable_e = tf.get_variable('e', dtype=tf.float32, shape=[4, 3, 4], initializer=xavier_initializer())
    

      此处介绍几种常见的初始化器,其中在初始化方面使用比较多的是后两种,建议使用xavier_initializer初始化器,之前在用 lstm模型进行文本分类过程中,使用truncated_normal_initializer进行初始化,发现在训练过程中,lstm 模型执行少数batch后就收敛,致使模型在训练集和测试集上的准确率都很低。当然,这个也不绝对,具体还是要根据自己的模型而定。

初始化变量

  变量必须先初始化后才可使用。在低级别的编程中,需要明确初始化,高级别框架下是自动初始化的。此处介绍下低级别编程中初始化的问题。

  • 指定初始化某个变量

    sess=tf.Session()
    sess.run(tf.initialize_variables([variable_c]))
    

    在变量比较少的模型中,使用上述方法是很 ok 的,但是在变量比较多的情况下,使用上述方法可能会很不爽,至少对我是这样的。

  • 初始化全部变量

    sess.run(tf.initialize_all_variables())

tf.constant

  使用tf.constant来创建一个常量。

```
# 创建0维常量
tf.constant(0.2,name='a')
# 创建1维常量
tf.constant([1,2,3,4],name='b')
tf.constant(-1.0, shape=[2, 3], name='b')
```

tf.placeholder

  此函数的作用可以作为 java 方法中的形参,用于定义过程,在方法执行时再赋予具体的值。

a = tf.placeholder(dtype=tf.float32, shape=None, name='a')
b = tf.placeholder(dtype=tf.float32, shape=None, name='b')
with tf.Session() as sess:
    print(sess.run(a + b, feed_dict={a: 1, b: 2}))

猜你喜欢

转载自blog.csdn.net/lionel_fengj/article/details/80486901