本文希望以最精简的语言解释tensorflow API经常使用的小操作,将会持续更新;若有疑问或者错误,请在留言区指出。
实验环境:Win10 tensorflow-gpu-1.12.0 GTX1050-ti
tf.pad
t = tf.constant([[1, 2], [3, 4]])
paddings = tf.constant([[2, 1], [1, 1]])
a = tf.pad(t, paddings, "CONSTANT")
sess = tf.Session()
print(sess.run(a))
结果如下:
[[0 0 0 0]
[0 0 0 0]
[0 1 2 0]
[0 3 4 0]
[0 0 0 0]]
padding中每个[a, b]都代表在相应的维度前后加上指定行数的0,比如例子中:[2, 1]指的是第0维(即行所在维度)的前面加2行0,后面加一行0;[1, 1]指的是在第1维(即列所在维度)前面加上1行0,后面加上1行0。
tf.split
t = tf.random_normal(shape=[10, 4, 5])
split0, split1, split2 = tf.split(t, [2, 3, 5], 0)
sess = tf.Session()
shape0, shape1, shape2 = sess.run([tf.shape(split0), tf.shape(split1), tf.shape(split2)])
print("shape0: ", shape0)
print("shape1: ", shape1)
print("shape2: ", shape2)
结果如下:
shape0: [2 4 5]
shape1: [3 4 5]
shape2: [5 4 5]
代码中,我们定义了一个[10, 4, 5]维度的Tensor,之后我们在0维(即通道所在维度)根据向量 [2, 3, 5] 切割该Tensor,最后得到三个返回值,打印获得各自的形状。该例子中,split的功能可由上面的图片直观理解,当传入的切割条件是一个向量,如代码中的[2, 3, 5], 那就会根据所指定的维度切割;但是切割条件的值总和必须等于指定切割维度的大小,如第0维是10,2+3+5=10。
tf.cond()
a = tf.constant(1)
b = tf.constant(2)
x = tf.add(a, b)
y = tf.multiply(a, b)
result1 = tf.cond(tf.greater(a, b), lambda: x, lambda: y)
result2 = tf.cond(tf.greater(b, a), lambda: x, lambda: y)
with tf.Session() as sess:
_result1, _result2 = sess.run([result1, result2])
print("result1: ", _result1)
print("result2: ", _result2)
结果如下:
result1: 2
result2: 3
- tf.cond()相当于if...else。第一个参数返回一个布尔值,若为true,执行第二项;若为False,执行第三项
- 根据API的描述,无论是第二项还是第三项被执行,两项都会在图中计算并得到值,只是选择满足条件的那一项而已
备注:本文为作者原创,转载需注明出处!