l'erreur:
ValueError: La forme doit être de rang 2 mais est de rang 1 pour 'MatMul' (op: 'MatMul') avec les formes d'entrée: [6], [6].
import tensorflow as tf
with tf.device('/gpu:1'):
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], name='b')
c = tf.matmul(a, b)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print(sess.run(c))
Je ne sais pas ce qui ne va pas. Merci beaucoup pour votre aide.
3 Réponses :
tf.matmul multiplie la matrice, les tenseurs à 2 dimensions. Vous essayez de multiplier, en utilisant matmul, deux vecteurs qui sont des tenseurs à 1 dimension.
Votre résultat attendu est [1. 4. 9. 16. 25. 36.] c'est l'élément par élément multiplication des éléments vectoriels. Pour l'obtenir, vous devez utiliser l'opération tf.multiply .
import tensorflow as tf a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], name="a") b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], name="b") c = tf.multiply(a, b) sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)) print(sess.run(c))
Sinon, si vous voulez faire une multiplication matricielle, et non par élément, comme suggéré dans d'autres réponses, vous avez besoin que les vecteurs soient 2D pour multiplier un vecteur ligne par un vecteur colonne:
import tensorflow as tf a = tf.constant([[1.0], [2.0], [3.0], [4.0], [5.0], [6.0]], name="a") # Shape [6, 1] b = tf.constant([[1.0, 2.0, 3.0, 4.0, 5.0, 6.0]], name="b") # Shape [1, 6] c = tf.matmul(a, b) sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)) print(sess.run(c))
Vous pouvez utiliser tf.expand_dims (a, 0) et tf.expand_dims (b, 1) pour avoir des formes de rang 2. Essayez le code suivant:
[[ 91.]] 91.0
Il affichera:
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], name='a') b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], name='b') c = tf.matmul(tf.expand_dims(a,0), tf.expand_dims(b, 1)) c2=tf.squeeze(c) sess=tf.Session() print(sess.run(c)) print(sess.run(c2))enter code here
Quel résultat attendiez-vous?
multipliez a et b.