gpt4 book ai didi

tensorflow - TensorFlow-将未知大小的张量填充到特定大小?

转载 作者:行者123 更新时间:2023-12-04 00:46:30 25 4
gpt4 key购买 nike

有没有一种方法可以使用特定的填充值将可变大小的张量填充到给定的形状?例如给出张量:

[[1, 2],
[3, 4]]




[[1, 2, 3],
[4, 5, 6]]


有没有一种方法可以执行一般操作,该操作将使用任一方法并将其填充一个值(例如,使用值 [2, 4]塑造 -1),结果是:

[[1, 2, -1, -1],
[3, 4, -1, -1]]




[[1, 2, 3, -1],
[4, 5, 6, -1]]


分别?我的理由(以防万一,这是一个更好的解决方案)是我有一个TFRecords文件中的示例,其中一部分的长度是可变的。对于处理,静态长度使它们更易于使用。

最佳答案

是。有。只要您不需要更改张量的等级,就非常简单。

tf.pad()接受带有张量的常规python列表。填充格式是在该尺寸的每一侧上填充多少对的列表。

例如

t = tf.constant([[1, 2], [3, 4]])
paddings = [[0, 0], [0, 4-tf.shape(t)[0]]]
out = tf.pad(t, paddings, 'CONSTANT', constant_values=-1)
sess.run(out)
# gives:
# array([[ 1, 2, -1, -1],
# [ 3, 4, -1, -1]], dtype=int32)




如果要将其概括为有用的功能,可以执行以下操作:

def pad_up_to(t, max_in_dims, constant_values):
s = tf.shape(t)
paddings = [[0, m-s[i]] for (i,m) in enumerate(max_in_dims)]
return tf.pad(t, paddings, 'CONSTANT', constant_values=constant_values)


其中, max_in_dims本质上是输出的所需形状。注意:如果您提供的形状在任何尺寸上均严格小于 t,则此功能将失败。

您可以像这样使用它:

t = tf.constant([[1, 2], [3, 4]]) # shape = [2, 2]
t_padded = pad_up_to(t, [2, 4], -1) # shape = [2, 4], padded with -1s


要么

t = tf.placeholder(tf.float32, [None, None]) # shape = [?, ?]
t_padded = pad_up_to(t, [5,5], -1) # shape = [5, 5], padded with -1s
t_np = np.random.uniform(0, 1, [3,4]) # shape = [3,4], no padding
t_padded_out = sess.run(t_padded, {t: t_np})
t_np2 = np.random.uniform(0, 1, [2,1]) # shape = [2,1], no padding
t_padded_out2 = sess.run(t_padded, {t: t_np2})


尽管尺寸大小是动态计算的,但尺寸数量不是动态计算的,因此请确保 max_in_dims具有与t.shape相同的元素数量。

关于tensorflow - TensorFlow-将未知大小的张量填充到特定大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42334646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com