Es gibt drei relevante ops für die Umsetzung Theano des dimshuffle
in TensorFlow:
tf.transpose()
verwendet wird, um die Abmessungen eines Tensor permutieren. Wenn das in den Argumenten zu dimshuffle
angegebene Muster eine Permutation der Abmessungen des Eingangstensors ist (d. H. Es gibt keine 'x'
oder fehlende Dimension), können Sie verwenden, um dimshuffle()
zu implementieren.
tf.expand_dims()
wird verwendet, um einem Tensor eine oder mehrere Dimensionen der Größe 1 hinzuzufügen. Dies behandelt den Fall, in dem 'x'
als Teil des dimshuffle()
-Musters angegeben ist, aber die vorhandenen Dimensionen nicht neu angeordnet werden.
tf.squeeze()
wird verwendet, um eine oder mehrere Dimensionen der Größe 1 aus einem Tensor zu entfernen. Dies behandelt den Fall, bei dem eine Dimension in einem dimshuffle()
Muster weggelassen wird, aber die vorhandenen Dimensionen werden nicht neu angeordnet.
Unter der Annahme, dass die Eingabe ein Vektor ist, Ihr Beispiel (dimshuffle(0, 'x')
) kann mit tf.expand_dims()
nur ausgedrückt werden:
input = tf.placeholder(tf.float32, [None]) # Defines an arbitrary-sized vector.
result = tf.expand_dims(input, 1)
print result.get_shape() # ==> TensorShape([Dimension(None), Dimension(1)])
ein komplizierteres Beispiel nehmen, dimshuffle(1, 'x', 0)
auf eine Matrix aufgebracht wäre:
input = tf.placeholder(tf.float32, [128, 32]) # Defines a matrix.
output = tf.expand_dims(tf.transpose(input, [1, 0]), 1)
print output.get_shape()
# ==> TensorShape([Dimension(32), Dimension(1), Dimension(128)])