Я столкнулся с проблемой при попытке реализовать 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
Спасибо