Tensorflow Tensor remodelado y relleno con ceros

¿Hay una manera de remodelar un tensor y rellenar cualquier desbordamiento con ceros? Sé que ndarray.reshape hace esto, pero tal como lo entiendo, convertir un Tensor en un ndarray requeriría un cambio entre la GPU y la CPU.

La documentación de Tensorflow reshape () dice que las TensorShape necesitan tener el mismo número de elementos, por lo que quizás la mejor manera sería un pad () y luego remodelar ().

Estoy tratando de lograr:

a = tf.Tensor([[1,2],[3,4]]) tf.reshape(a, [2,3]) a => [[1, 2, 3], [4, 0 ,0]] 

Tensorflow ahora ofrece la función de almohadilla que realiza el relleno en un tensor de varias maneras (como la función de relleno de opencv2 para matrices): https://www.tensorflow.org/api_docs/python/tf/pad

 tf.pad(tensor, paddings, mode='CONSTANT', name=None) 

ejemplo de la documentación anterior:

 # '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]] 

Que yo sepa, no hay un operador integrado que haga esto ( tf.reshape() le dará un error si las formas no coinciden). Sin embargo, puede lograr el mismo resultado con algunos operadores diferentes:

 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])