专栏首页人工智能LeadAITensorflow教程: tf.Variable() 和tf.get_variable()

Tensorflow教程: tf.Variable() 和tf.get_variable()

正文共364个字,预计阅读时间8分钟。

一、简介

tf.Variable()

1tf.Variable(initial_value=None, trainable=True,    collections=None, validate_shape=True, 
2caching_device=None, name=None, variable_def=None, dtype=None, expected_shape=None, 
3import_scope=None)

tf.get_variable()

1tf.get_variable(name, shape=None, dtype=None, initializer=None, regularizer=None, 
2trainable=True, collections=None, caching_device=None, partitioner=None, validate_shape=True, 
3custom_getter=None)

2、区别

1、使用tf.Variable时,如果检测到命名冲突,系统会自己处理。使用tf.get_variable()时,系统不会处理冲突,而会报错

1import tensorflow as tf
2w_1 = tf.Variable(3,name="w_1")
3w_2 = tf.Variable(1,name="w_1")
4print w_1.name
5print w_2.name
6#输出
7#w_1:0
8#w_1_1:0
1import tensorflow as tf
2
3w_1 = tf.get_variable(name="w_1",initializer=1)
4w_2 = tf.get_variable(name="w_1",initializer=2)
5#错误信息
6#ValueError: Variable w_1 already exists, disallowed. Did
7#you mean to set reuse=True in VarScope?

2、基于这两个函数的特性,当我们需要共享变量的时候,需要使用tf.get_variable()。在其他情况下,这两个的用法是一样的

 1 import tensorflow as tf
 2
 3 with tf.variable_scope("scope1"):
 4 w1 = tf.get_variable("w1", shape=[])
 5 w2 = tf.Variable(0.0, name="w2")
 6 with tf.variable_scope("scope1", reuse=True):
 7 w1_p = tf.get_variable("w1", shape=[])
 8 w2_p = tf.Variable(1.0, name="w2")
 9
10 print(w1 is w1_p, w2 is w2_p)
11 #输出
12 #True  False

由于tf.Variable() 每次都在创建新对象,所有reuse=True 和它并没有什么关系。对于get_variable(),来说,如果已经创建的变量对象,就把那个对象返回,如果没有创建变量对象的话,就创建一个新的。

3、实例

 1import os
 2os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
 3
 4import tensorflow as tf
 5
 6x1 = tf.truncated_normal([200, 100], name='x1')
 7x2 = tf.truncated_normal([200, 100], name='x2')
 8
 9def two_hidden_layers_1(x):
10assert x.shape.as_list() == [200, 100]
11w1 = tf.Variable(tf.random_normal([100, 50]), name='h1_weights')
12b1 = tf.Variable(tf.zeros([50]), name='h1_biases')
13h1 = tf.matmul(x, w1) + b1
14assert h1.shape.as_list() == [200, 50]
15w2 = tf.Variable(tf.random_normal([50, 10]), name='h2_weights')
16b2 = tf.Variable(tf.zeros([10]), name='2_biases')
17logits = tf.matmul(h1, w2) + b2
18return logits
19
20def two_hidden_layers_2(x):
21assert x.shape.as_list() == [200, 100]
22w1 = tf.get_variable('h1_weights', [100, 50],  initializer=tf.random_normal_initializer())
23b1 = tf.get_variable('h1_biases', [50], initializer=tf.constant_initializer(0.0))
24h1 = tf.matmul(x, w1) + b1
25assert h1.shape.as_list() == [200, 50]
26w2 = tf.get_variable('h2_weights', [50, 10], initializer=tf.random_normal_initializer())
27b2 = tf.get_variable('h2_biases', [10], initializer=tf.constant_initializer(0.0))
28logits = tf.matmul(h1, w2) + b2
29return logits
30
31
32def fully_connected(x, output_dim, scope):
33with tf.variable_scope(scope, reuse=tf.AUTO_REUSE) as scope:
34w = tf.get_variable('weights', [x.shape[1], output_dim], initializer=tf.random_normal_initializer())
35b = tf.get_variable('biases', [output_dim], initializer=tf.constant_initializer(0.0))
36return tf.matmul(x, w) + b
37
38def two_hidden_layers_3(x):
39h1 = fully_connected(x, 50, 'h1')
40h2 = fully_connected(h1, 10, 'h2')
41return h2
42# with tf.variable_scope('two_layers') as scope:
43#     logits1 = two_hidden_layers_1(x1) 
44#     # scope.reuse_variables()
45#     logits2 = two_hidden_layers_1(x2)
46# 不会报错
47# ---------------
48
49# with tf.variable_scope('two_layers') as scope:
50#     logits1 = two_hidden_layers_2(x1)
51#     # scope.reuse_variables()
52#     logits2 = two_hidden_layers_2(x2)
53# 会报错
54# ---------------
55
56with tf.variable_scope('two_layers') as scope:
57logits1 = two_hidden_layers_3(x1)
58# scope.reuse_variables()
59logits2 = two_hidden_layers_3(x2)
60# 不会报错
61# -------
62writer = tf.summary.FileWriter('./graphs/cool_variables', tf.get_default_graph())
63writer.close()

原文链接:https://www.jianshu.com/p/2061b221cd8f

本文分享自微信公众号 - 人工智能LeadAI(atleadai)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-06-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 存储Tensorflow训练网络的参数

    训练一个神经网络的目的是啥?不就是有朝一日让它有用武之地吗?可是,在别处使用训练好的网络,得先把网络的参数(就是那些variables)保存下来,怎么保存呢?其...

    用户1332428
  • TensorFlow Tutorial-1

    1、Why TensorFlow? 网上有关介绍太多了,我就不多说了,这里主要注重使用。 ? Intro.PNG ? github.PNG 2、Programi...

    用户1332428
  • TensorFlow从1到2 | 第五章 非专家莫入!TensorFlow实现CNN

    当看到本篇时,根据TensorFlow官方标准《Deep MNIST for Experts》(https://tensorflow.google.cn/get...

    用户1332428
  • Tensorflow教程(十三) tf.Variable() 和tf.get_variable()1 简介2 区别3 实例

    致Great
  • tensorboard快速上手教程

    tensorboard可对网络和各种参数进行可视化,可以方便的进行网络结构调整和调参,尤其是应对复杂网路,下面用一个例子介绍tensorboard在Linux中...

    狼啸风云
  • Tensorflow tensor 数学运算和逻辑运算方式

    以上这篇Tensorflow tensor 数学运算和逻辑运算方式就是小编分享给大家的全部内容了,希望能给大家一个参考。

    砸漏
  • 独家 | 一文读懂TensorFlow基础

    本文长度为7196字,建议阅读10分钟 本文为你讲解如何使用Tensorflow进行机器学习和深度学习。 1. 前言 深度学习算法的成功使人工智能的研究和应用取...

    数据派THU
  • 独家 | 手把手教TensorFlow(附代码)

    上一期我们发布了“一文读懂TensorFlow(附代码、学习资料)”,带领大家对TensorFlow进行了全面了解,并分享了入门所需的网站、图书、视频等资料,本...

    数据派THU
  • TensorFlow从1到2 - 5 - 非专家莫入!TensorFlow实现CNN

    当看到本篇时,根据TensorFlow官方标准《Deep MNIST for Experts》,你已经达到Expert Level,要恭喜了。 且不说是否夸大...

    袁承兴
  • TensorFlow从1到2 | 第五章 非专家莫入!TensorFlow实现CNN

    当看到本篇时,根据TensorFlow官方标准《Deep MNIST for Experts》(https://tensorflow.google.cn/get...

    用户1332428

扫码关注云+社区

领取腾讯云代金券