Variables多种表达

Variables:TF基础数据之一,常用于变量的训练。。。重要性刚学TF就知道了

1.tf.Variable() 

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

  这种方法是最基本最简单的创建方式,一些基本介绍就不说了

2.与tf.get_variable()

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

  比上一个方法高级,不仅可以直接创建还可以使用权值共享功能。

  A)建立变量Variable和get_variable的区别 

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

1 import tensorflow as tf
2 w_1 = tf.Variable(3,name="w_1")
3 w_2 = tf.Variable(1,name="w_1")
4 print w_1.name
5 print w_2.name
6 #输出
7 #w_1:0
8 #w_1_1:0
1 import tensorflow as tf
2 
3 w_1 = tf.get_variable(name="w_1",initializer=1)
4 w_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?

  B)权值共享  

 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
  variable_scope相当于命名空间
  reuse标志位,判断命名空间内的variable是否重用(共享)

3.字典映射

  有时候我们参数太多,而且还不尽相同,C++种使用数据结构去存储,那么TF当然可以使用一些数据库,最简单的直接使用字典去存储。

 1 parameters = {
 2     'w1': tf.Variable(tf.truncated_normal([3, 3, 1, 64], dtype=tf.float32, stddev=1e-1), name='w1'),
 3     'w2': tf.Variable(tf.truncated_normal([3, 3, 64, 64], dtype=tf.float32, stddev=1e-1), name='w2'),
 4     'w3': tf.Variable(tf.truncated_normal([3, 3, 64, 128], dtype=tf.float32, stddev=1e-1), name='w3'),
 5     'w4': tf.Variable(tf.truncated_normal([3, 3, 128, 128], dtype=tf.float32, stddev=1e-1), name='w4'),
 6     'w5': tf.Variable(tf.truncated_normal([3, 3, 128, 256], dtype=tf.float32, stddev=1e-1), name='w5'),
 7     'fc1': tf.Variable(tf.truncated_normal([256*28*28, 1024], dtype=tf.float32, stddev=1e-2), name='fc1'),
 8     'fc2': tf.Variable(tf.truncated_normal([1024, 1024], dtype=tf.float32, stddev=1e-2), name='fc2'),
 9     'softmax': tf.Variable(tf.truncated_normal([1024, 10], dtype=tf.float32, stddev=1e-2), name='fc3'),
10     'bw1': tf.Variable(tf.random_normal([64])),
11     'bw2': tf.Variable(tf.random_normal([64])),
12     'bw3': tf.Variable(tf.random_normal([128])),
13     'bw4': tf.Variable(tf.random_normal([128])),
14     'bw5': tf.Variable(tf.random_normal([256])),
15     'bc1': tf.Variable(tf.random_normal([1024])),
16     'bc2': tf.Variable(tf.random_normal([1024])),
17     'bs': tf.Variable(tf.random_normal([10]))
18 }
 1 # 第一卷积层
 2     conv1 = conv2d(x_, _parameters['w1'], _parameters['bw1'])
 3     lrn1 = lrn(conv1)
 4     pool1 = max_pool(lrn1, 2)
 5 
 6     # 第二卷积层
 7     conv2 = conv2d(pool1, _parameters['w2'], _parameters['bw2'])
 8     lrn2 = lrn(conv2)
 9     pool2 = max_pool(lrn2, 2)
10 
11     # 第三卷积层
12     conv3 = conv2d(pool2, _parameters['w3'], _parameters['bw3'])
13 
14     # 第四卷积层
15     conv4 = conv2d(conv3, _parameters['w4'], _parameters['bw4'])
16 
17     # 第五卷积层
18     conv5 = conv2d(conv4, _parameters['w5'], _parameters['bw5'])
19     pool5 = max_pool(conv5, 2)

 

 参考:

    https://blog.csdn.net/u012436149/article/details/53696970

    https://blog.csdn.net/u011974639/article/details/76146822

    https://blog.csdn.net/roseki/article/details/70832143

转载于:https://www.cnblogs.com/wjy-lulu/p/9036089.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值