TensorFlow2.x 语法糖
tf.where
tf.where(condition, x=None, y=None, name=None)
如果x,y均为空,则返回满足条件的索引indices
1 | a = tf.Variable([[1,2,3,4],[3,4,2,1]]) |
out:
1 | <tf.Tensor: shape=(2, 2), dtype=int64, numpy= |
如果x,y均不为空,则 满足条件位置的值为x相应位置的值,其余为y相应位置的值。(非常实用)
1 | a = tf.Variable([[1,2,3,4],[3,4,2,1]]) |
out:
1 | <tf.Tensor: shape=(2, 4), dtype=int32, numpy= |
tf.stack
tf.stack(values, axis=0, name=”stack”)
向量堆叠函数
values.shape = (A, B, C)
if axis == 0
then the output
tensor will have the shape (N, A, B, C)
.
if axis == 1
then the output
tensor will have the shape (A, N, B, C)
.
example:
1 | a = tf.Variable([[1,2,0],[1,2,1]]) # shape = (2,3) |
out:
1 | stack_tensors_0 |
tf.gather
gather_v2(params,indices,validate_indices=None,axis=None,batch_dims=0,name=None)
根据索引,根据axis进行向量提取。只能根据一维度进行提取。
example:
1 | a = tf.Variable([[1,1,1],[2,2,2],[3,3,3]]) |
out:
1 | <tf.Tensor: shape=(4, 3), dtype=int32, numpy= |
tf.gather_nd
gather_nd_v2(params, indices, batch_dims=0, name=None)
根据多维度进行提取
example:
假设text 有2个sequence,每个sequence有2个单词,经过Embedding 后的维度为4维。
根据每个sequence的序列进行抽取。
第0个sequence抽取序列为[1,1,0,0]
第1个sequence抽取序列为[0,1,0,1]
1 | text = tf.Variable([[[1,1,1,1],[2,2,2,2]],[[3,3,3,3],[4,4,4,4]]]) #shape (2,2,4) |
out:
1 | gather_nd_tensor #shape (2,4,4) |
tf.slice
slice(input_, begin, size, name=None)
tf切片函数
example:
1 | t = tf.constant([[[1, 1, 1], [2, 2, 2]], |
out:
1 | <tf.Tensor: shape=(1, 1, 3), dtype=int32, numpy=array([[[3, 3, 3]]], dtype=int32)> |
tf.cond
tf.cond(pred, true_fn=None, false_fn=None, name=None)
tf条件函数
可以利用tf.cond来动态选择层。在TF2.x中 可以直接用if条件进行替代。
1 | a=10 |
tf.cumsum
tf.cumsum(x, axis=0, exclusive=False, reverse=False, name=None)
按轴累加器
1 | tf.cumsum([a,b,c]) = [a,a+b,a+b+c] |
example:
1 | a = tf.ones((4,3)) |
out:
1 | cumsum_1 |
tf.clip_by_value
clip_by_value(t, clip_value_min, clip_value_max,name=None)
tf剪支函数
将t中 小于clip_value_min的替换成clip_value_min,大于 clip_value_max 替换成 clip_value_max
example:
1 | t = tf.Variable([[1,2,3,4],[5,6,7,8]]) |
out:
1 | clip_tensor |