1 | import tensorflow as tf |
1 | # 这两种效果等价 |
(2, 8, 4, 4)
(2, 8, 4, 4)
1 | # 要广播的话,首先维度个数要一致 |
tf.Tensor(
[[[ 0 0]
[ 2 3]
[ 8 10]]
[[18 21]
[32 36]
[50 55]]], shape=(2, 3, 2), dtype=int32)
tf.pad
tf.pad(
tensor, paddings, mode=’CONSTANT’, constant_values=0, name=None
)
padding的rank和tensor保持一直,例如tensor=[[1,2,3]], padding=[[1,1], [2,2]],则表示在原始tensor的第一个维度上下各增加一行0,在第二个维度上左右各增加两列0
1 | # 应用场景:机器翻译中,在decoder阶段,在target_input前填充一个句子开始符号 |
(1, 3)
(1, 4)
tf.Tensor([[0 1 2 3]], shape=(1, 4), dtype=int32)
tf.stack
tf.stack(
values, axis=0, name=’stack’
)
1 | x = tf.constant([1, 4]) |
tf.Tensor(
[[1 4]
[2 5]
[3 6]], shape=(3, 2), dtype=int32)
tf.Tensor(
[[1 2 3]
[4 5 6]], shape=(2, 3), dtype=int32)
tf.slice
tf.slice(
tensor, begin, size, name=None
)
1 | t = tf.constant([[[1, 1, 1], [2, 2, 2]], |
<tf.Tensor: id=28, shape=(2, 1, 3), dtype=int32, numpy=
array([[[3, 3, 3]],
[[5, 5, 5]]])>
tf.tensordot
tf.tensordot(
a, b, axes, name=None
)
给定两个张量(维度大于等于 1 的数组),a 和 b,以及一个包含两个数组的数组, (a_axes, b_axes),把 a 和 b 的元素的乘积沿着 a_axes 和 b_axes 加和。 如果第三个参数是一个常数 N,那么就沿着 a 的最后 N 个 轴和 b 的前 N 个 轴加和。
a_axes和b_axes里的轴拉伸后形状要一样大
1 | # 首先形状上 |
(5, 4, 6)
=====================
(5, 4, 6)
(5, 4, 6)
1 | # 深层运行机制 |
tf.Tensor(
[[ 58 67 91 78 103 48]
[ 49 77 63 112 94 152]], shape=(2, 6), dtype=int32)
[[ 58 67 91 78 103 48]
[ 49 77 63 112 94 152]]
=====================================
(3, 5, 2)
tf.Tensor(106, shape=(), dtype=int32)
106
========================
tf.Tensor(88, shape=(), dtype=int32)
88
tf.tile
tf.tile(
input, multiples, name=None
)
1 | np.random.seed(10) |
(3, 8, 3, 5)