TensorFlow中tf.tile()函数详解与tile_batch对比
本文详细解析TensorFlow中tf.tile()函数的用法,通过实例展示如何根据multiples参数扩展张量维度。同时对比tf.contrib.seq2seq.tile_batch()函数,说明两者在Batch维度复制上的差异,并探讨在Beam Search场景下的选择策略。
tf.tile()函数基本用法
tf.tile()主要用于处理需要扩展张量形状的场景。其核心作用是将输入张量沿着指定维度进行重复复制,从而生成新的张量结构。
假设存在一个形状为[width, height]的张量,若需将其转换为形状为[batch_size, width, height]的张量,且新张量中每个batch的数据均与原张量完全一致,可使用tf.tile实现。具体调用方式如下文代码所示。
tile(
input,
multiples,
name=None
)
import tensorflow as tf
a = tf.constant([7,19])
a1 = tf.tile(a,multiples=[3]) #第一个维度扩充3遍
b = tf.constant([[4,5],[3,5]])
b1 = tf.tile(b,multiples=[2,3])#第一个维度扩充2遍,第二个维度扩充3遍
with tf.Session() as sess:
print(sess.run(a))
print(sess.run(a1))
print(sess.run(b))
print(sess.run(b1))

tf.tile()与tile_batch()对比
此外,还需了解tf.tile()与tf.contrib.seq2seq.tile_batch()的区别。
本节简要介绍这两个函数的基本用法及其差异,并分析在Beam Search(束搜索)场景中应如何选择使用。
# 将input的某一维度复制多少次, len(input.shape()) 等于 len(multiples)
# tf.tile(input, multiples, name=None)
t = tf.constant([[1, 1, 1, 9], [2, 2, 2, 9], [7, 7, 7, 9]])
# 第一维度和第二维度都保持不变
z0 = tf.tile(t, multiples=[1, 1])
# 第1维度不变, 第二维度复制为2份
z1 = tf.tile(t, multiples=[1, 2])
# 第1维度复制为两份, 第二维度不变
z2 = tf.tile(t, multiples=[2, 1])
# tf.contrib.seq2seq.tile_batch(encoder_outputs, multiplier=self.beam_size)
encoder_outputs = tf.constant([[[1, 3, 1], [2, 3, 2]], [[2, 3, 4], [2, 3, 2]]])
print(encoder_outputs.get_shape()) # (2, 2, 3)
# 将batch内的每个样本复制3次, tile_batch() 的第2个参数是一个 int 类型数据
z4 = tf.contrib.seq2seq.tile_batch(encoder_outputs, multiplier=3)
with tf.Session() as sess:
print(sess.run(z0))
print(sess.run(z1))
print(sess.run(z2))
输出:
[[1 1 1 9]
[2 2 2 9]
[7 7 7 9]]
[[1 1 1 9 1 1 1 9]
[2 2 2 9 2 2 2 9]
[7 7 7 9 7 7 7 9]]
[[1 1 1 9]
[2 2 2 9]
[7 7 7 9]
[1 1 1 9]
[2 2 2 9]
[7 7 7 9]]
[[[1 3 1]
[2 3 2]]
[[1 3 1]
[2 3 2]]
[[1 3 1]
[2 3 2]]
[[2 3 4]
[2 3 2]]
[[2 3 4]
[2 3 2]]
[[2 3 4]
[2 3 2]]]
以上关于TensorFlow tf.tile()用法的实例分析内容到此结束,希望能为读者提供有价值的参考,欢迎继续支持本站获取更多技术资讯。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













