ValueError: Shape должен иметь ранг 2, но это ранг 1 для 'MatMul' (op: 'MatMul') с входными формами: [2], [2,3] - PullRequest
0 голосов
/ 02 мая 2018

Я такая новость для Tensorflow. Я уже ищу такие же вопросы, но не могу понять. есть код. Надеюсь, вы можете мне помочь.

Код:

import tensorflow as tf

w1 = tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2 = tf.Variable(tf.random_normal([3,3],stddev=1,seed=1))

x = tf.constant([0.7,0.9])

a = tf.matmul(x, w1)
y = tf.matmul(a, w2)

sess = tf.Session()

sess.run(w1.initializer)
sess.run(w2.initializer)

print(sess.run(y))
sess.close()

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

В вашем случае ранг переменной x равен 1. Отсюда и проблема.

Ниже приводится причина, по которой у вас возникла эта проблема.

Пожалуйста, обратитесь к API tenorflow https://www.tensorflow.org/api_docs/python/tf/matmul

tf.matmul ( a, b , transpose_a = False, transpose_b = False, adjoint_a = False, adjoint_b = False, a_is_sparse = False, b_is_sparse = False, name = None)

Args:

a: Тензор типа float16, float32, float64, int32, complex64, complex128 и rank> 1 .

b: Тензор с того же типа и ранга как.

0 голосов
/ 02 мая 2018

Форма константы x равна (2,), то есть одномерный массив, и вы пытаетесь умножить его на двумерный массив w1 формы (2, 3), что невозможно для матрицы умножение, так как количество столбцов первого параметра должно быть равно количеству строк во втором параметре. Кроме того, я думаю, tf.matmul работает, только если оба массива двумерны.

Один из многих способов изменить объявление x на

.

x = tf.constant([[0.7], [0.9]])

Это создаст двумерный постоянный тензор формы (2, 1). И затем умножьте это на

a = tf.matmul(tf.transpose(x), w1)

tf.transpose() используется для создания транспонирования массива x с формой (2, 1) в форму (1, 2).

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...