Почему в TensorFlow матрица a m*n может добавить матрицу n * 1?

Я очень плохо знаком с Python и TensorFlow, в последние дни я столкнулся с проблемой, когда изучал "MNIST For ML Beginners" ( https://www.tensorflow.org/get_started/mnist/beginners).

В этом уроке мы используем y = tf.nn.softmax(tf.matmul(X, W) + b) чтобы получить наши результаты.

Мой вопрос, например, что X - это матрица [100,784], а W - матрица [784,10], b - тензор [10] (как матрица [10,1]?) После того, как мы назвали tf.matmul(X, W) получим матрицу [100,10]. вот мой вопрос, как матрица [100,10] может добавить сюда тензор ab [10]? Это не имеет никакого смысла для меня.

Я знаю, почему существуют предвзятости, и я знаю, почему предубеждения должны быть добавлены. Но я просто не знаю, как работал оператор "+" в этой проблеме.

1 ответ

Решение

Это происходит из-за концепции, называемой широковещанием, которая может быть найдена как в Numpy, так и в TensorFlow. На высоком уровне, вот как это работает:

Предположим, вы работаете с операцией, которая поддерживает трансляцию (например, + или *) и имеет 2 входных тензора, X и Y. Чтобы оценить, совместимы ли формы X и Y, операционная система оценит размеры в парах, начиная с справа. Размеры считаются совместимыми, если:

  • Они равны
  • Один из них 1
  • Один из них отсутствует

Применяя эти правила к операции добавления (+) и вашим входам формы [100, 10] и [10]:

  • 10 и 10 совместимы
  • 100 и "отсутствует" совместимы

Если формы совместимы, и одно из измерений входного значения равно 1 или отсутствует, операция по существу будет размещать этот вход в тайлах в соответствии с формой другого ввода.

В вашем примере, операция добавления эффективно распределит Y по форме [10] по форме [100, 10] перед выполнением сложения.

Для получения более подробной информации см. Документацию Numpy по вещанию ( https://docs.scipy.org/doc/numpy-1.13.0/user/basics.broadcasting.html).

Другие вопросы по тегам