是的。有。如果你不需要改變張量的等級,那很簡單。
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