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 tf2 w_1 = tf.Variable(3,name="w_1")3 w_2 = tf.Variable(1,name="w_1")4 print w_1.name5 print w_2.name6 #输出7 #w_1:08 #w_1_1:0
1 import tensorflow as tf2 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. Did7 #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