Tensorflow API 持续学习

本文希望以最精简的语言解释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

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的描述,无论是第二项还是第三项被执行,两项都会在图中计算并得到值,只是选择满足条件的那一项而已

备注:本文为作者原创,转载需注明出处!

猜你喜欢

转载自blog.csdn.net/GodWriter/article/details/85244486