tf.nn.batch_normalization непредвиденное поведение - PullRequest
0 голосов
/ 22 апреля 2019

Я столкнулся с проблемой при попытке реализовать tf.nn.batch_normalization, работающую с набором цифр mnist.

tf.VERSION: 1.13.0-rc2 ОС: MacOS Mojave 10.14.4 на MacBook Pro (13-дюйм, 2017)

В целях тестирования я реализовал очень простую сеть

  • L1: 100 полностью связанных нейронов слоя + Пакетная норма + Сигмоид
  • L2: 10нейронный полностью связанный слой + softmax

Когда я использую tf.nn.batch_normalization

Ybn1 = tf.nn.batch_normalization(Yl1, m1, v1, O1, S1, 1e-5)

, это приводит к расхождению:

https://user -images.githubusercontent.com/44782534/56353537-df10f380-61d1-11e9-9060-749a04f55cb4.png

Если я сам делаю математику, она сходится:

Yhat1 = (Yl1 - m1) / tf.sqrt(v1 + 1e-5)
Ybn1 = S1 * Yhat1 + O1

https://user -images.githubusercontent.com / 44782534 / 56353771-6eb6a200-61d2-11e9-9d4f-08a6096091ea.png

Если я реализую функцию batch_normalization в моем коде, онатоже не работает.

inv = math_ops.rsqrt(v1 + 1e-5)
inv *= S1
Ybn1 = Yl1 * math_ops.cast(inv, Yl1.dtype) + math_ops.cast(O1 - m1 * inv, Yl1.dtype)

, но если я объединю 2 последние строки, это будет работать правильно:

inv = math_ops.rsqrt(v1 + 1e-5)
Ybn1 = (Yl1 - m1) * inv * S1+ O1

Я, конечно, сделал что-то не так, но я не могу понять, что, любая помощь приветствуется:)

Вот весь код, если вы хотите воспроизвести проблему: https://github.com/neodelphis/tensorflow-without-a-phd-french/blob/master/mnist_test.ipynb

Спасибо

...