Как преобразовать batch_normalization из python в c# - PullRequest
0 голосов
/ 25 февраля 2020

За последние несколько месяцев я работал через Python и Tensorflow, создавая нейронную сеть. Сеть работает очень хорошо на большом количестве данных (точность моего прогноза составляет 85% после обучения на наборе данных 120000 записей).

Моя нейронная сеть использует пакетную нормализацию, обучение снижение курса, выпадение. Он использует Adam-оптимизатор, чтобы минимизировать потери. После обучения я сохраняю свою модель с помощью заставки для хранения средних / дисперсионных переменных batch_normalization:

    saver = tf.compat.v1.train.Saver(tf.global_variables())
    saver.save(sess, "sessionSave")

После поиска правильного способа преобразования этой модели в c# я нашел реализацию Tensorflow-реализации для. NET (SciSharp). Но я не могу найти реализацию batch_normalization. В этом конкретном c случае это будет следующий python кодовый вызов, который мне нужно преобразовать:

    Z_BN = tf.contrib.layers.batch_norm(Z, is_training=train,updates_collections=ops.GraphKeys.UPDATE_OPS, scope="scope"+str(i), reuse=True)

Если есть способ преобразовать этот вызов, мне нужно будет решить проблему сохраненные средние / дисперсионные переменные также по-разному. Я думаю, что я не могу сам реализовать batch_normalization. Есть ли кто-то, кто может обеспечить реализацию этого требования?

1 Ответ

0 голосов
/ 26 февраля 2020

Если вам нужна только ваша модель для работы. NET для вывода, этого должно быть достаточно, чтобы преобразовать ее в какой-то широко используемый формат, такой как ONNX, который позже вы сможете использовать с ML. NET: https://docs.microsoft.com/en-us/dotnet/machine-learning/tutorials/object-detection-onnx

Вы также можете попробовать использовать модель напрямую через ML. NET, но ваш пробег может отличаться: https://docs.microsoft.com/en-us/dotnet/machine-learning/tutorials/image-classification

Если ни один из этих подходов не работает для вас, или вам также нужно настроить / обучить модель с C#, вы можете попробовать коммерческое решение: Gradient , которое предоставляет все API-интерфейсы TensorFlow 1.15. NET. Хотя в этом случае вам придется использовать поддерживаемый класс BatchNormalization из tensorflow.keras.layers или tensorflow.layers (более поздний не рекомендуется) вместо класса из contrib. Последний в любом случае является оболочкой .

Отказ от ответственности: я являюсь автором Gradient.

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