Tensorflow Note(一)
标签(空格分隔): tensorflow笔记
卷积中的SAME和VALID
1.在进行卷积时,对于padding参数可以选择VALID
或者SAME
, 用实例来说明二者的不同:
- SAME,即保证输出的卷积结果和输入tensor的长度和宽度保持不变。所以会进行补零操作,在原始tensor周围补零,直到输出tensor和输入tensorflow尺寸相同。
input_layer = tf.reshape(tf.linspace(start=1.0, stop=25.0, num=25), [1, 5, 5, 1])
weights = tf.ones(shape=[5, 5, 1, 1])
convolution = tf.nn.conv2d(input_layer, weights, strides=[1, 1, 1, 1], padding='SAME')
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
print(sess.run(convolution))
"""
[[[[ 63.]
[ 90.]
[ 120.]
[ 102.]
[ 81.]]
[[ 114.]
[ 160.]
[ 210.]
[ 176.]
[ 138.]]
[[ 180.]
[ 250.]
[ 325.]
[ 270.]
[ 210.]]
[[ 174.]
[ 240.]
[ 310.]
[ 256.]
[ 198.]]
[[ 153.]
[ 210.]
[ 270.]
[ 222.]
[ 171.]]]]
"""
- VALID,即不补零,只有图像中有效的元素进行运算,如果超出范围就不计算,所以输出tensor的尺寸必然小于输入tensor的尺寸。
input_layer = tf.reshape(tf.linspace(start=1.0, stop=25.0, num=25), [1, 5, 5, 1])
weights = tf.ones(shape=[5, 5, 1, 1])
convolution = tf.nn.conv2d(input_layer, weights, strides=[1, 1, 1, 1], padding='VALID')
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
print(sess.run(convolution))
"""
[[[[ 325.]]]]
"""
Tensorflow中tf.app.flags
1.tf.app.flags
用于支持接收命令行传递的参数,相当于接收argv。
2.可以使用python test.py --learning_rate 0.1 --epoch_num 5 --mode test
进行参数传递
import tensorflow as tf
flags = tf.app.flags
flags.DEFINE_float("learning_rate", 0.01, "learning_rate_description")
flags.DEFINE_integer("epoch_num", 10, "Number of epochs to run trainer")
flags.DEFINE_string("mode", "train", "Option mode: train, train_from_scratch, inference")
# Provides the global object that can be used to access flags.
FLAGS = flags.FLAGS
def main(_):
print(FLAGS.learning_rate)
print(FLAGS.epoch_num)
print(FLAGS.mode)
if __name__ == '__main__':
tf.app.run()
"""
0.01
10
train
"""
Tensorflow中共享变量
目的:
当我们需要共享大量变量集,并且还想在一个地方初始化所有变量时,我们就需要共享变量。
函数:
tensorflow中有两个产生变量的函数:一个是tf.get_variable()
,另外一个是tf.Varibale()
。通常对于新手我们都会使用后者,前者和后者的区别在于前者拥有变量检查机制,会检查已经存在的变量是否设置为共享变量,如果已经存在的变量没有设置为共享变量,tensorflow在运行到第二个拥有相同名字的变量时,会报错。