据我所知,没有内置的运算符可以做到这一点(tf.reshape()
如果形状不匹配会给你一个错误).但是,您可以通过几个不同的运算符实现相同的结果:
a = tf.constant([[1, 2], [3, 4]]) # Reshape `a` as a vector. -1 means "set this dimension automatically". a_as_vector = tf.reshape(a, [-1]) # Create another vector containing zeroes to pad `a` to (2 * 3) elements. zero_padding = tf.zeros([2 * 3] - tf.shape(a_as_vector), dtype=a.dtype) # Concatenate `a_as_vector` with the padding. a_padded = tf.concat([a_as_vector, zero_padding], 0) # Reshape the padded vector to the desired shape. result = tf.reshape(a_padded, [2, 3])
Tensorflow现在提供pad函数,它以多种方式在张量上执行填充(如opencv2的数组填充函数):
https://www.tensorflow.org/versions/r0.8/api_docs/python/array_ops.html#pad
tf.pad(tensor, paddings, mode='CONSTANT', name=None)
来自上述文档的示例:
# 't' is [[1, 2, 3], [4, 5, 6]]. # 'paddings' is [[1, 1,], [2, 2]]. # rank of 't' is 2. pad(t, paddings, "CONSTANT") ==> [[0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 2, 3, 0, 0], [0, 0, 4, 5, 6, 0, 0], [0, 0, 0, 0, 0, 0, 0]] pad(t, paddings, "REFLECT") ==> [[6, 5, 4, 5, 6, 5, 4], [3, 2, 1, 2, 3, 2, 1], [6, 5, 4, 5, 6, 5, 4], [3, 2, 1, 2, 3, 2, 1]] pad(t, paddings, "SYMMETRIC") ==> [[2, 1, 1, 2, 3, 3, 2], [2, 1, 1, 2, 3, 3, 2], [5, 4, 4, 5, 6, 6, 5], [5, 4, 4, 5, 6, 6, 5]]