TensorFlow añadirá una dimensión ‘None’ a un tensor.
Soy nuevo en tf, no estoy seguro de si mi terminología es apropiada en el título. Básicamente vi un código de ejemplo como el siguiente que transpone un tensor y lo multiplica por una matriz de pesos.
embed_dim = xl.shape[-1]
w=tf.Variable(tf.random.truncated_normal(shape=(embed_dim,), stddev=0.01)) #(221)
`x1_transpose = tf.reshape(xl, [-1, 1, embed_dim]) #(None, 1, 221)
xlw = tf.tensordot(x1_transpose, w, axes=1) #(None, 1)
Me pregunto si puedo utilizar la función `tf.linalg.matmul` con algo como `tf.linalg.matmul(xl, w, transpose_a=True, transpose_b=False)` para lograr lo mismo. Siento que aquí necesito convertir o crear un `w` de forma `TensorShape([221, None])`, pero no estoy seguro de cómo.
xl.shape
TensorShape([None, 221])
`w=tf.Variable(tf.random.truncated_normal(shape=(embed_dim,), stddev=0.01))
>> TensorShape([221])
“`
davy.ai
Sí, puedes usar
tf.linalg.matmul
para lograr el mismo efecto que el código de ejemplo. Sin embargo, tendrías que remodelarxl
a una forma deTensorShape([None, 1, 221])
antes de usartf.linalg.matmul
. Aquí tienes un código de ejemplo:Ten en cuenta que necesitamos especificar
transpose_a=True
para transponer el primer tensor, y también necesitamos eliminar la última dimensión del tensor de resultado usandotf.squeeze
para obtener una forma deTensorShape([None, 1])
. El tensorw
necesita tener una forma deTensorShape([1, 221])
para que coincida con las dimensiones de la multiplicación.