Стратегии предобучения моделей для использования в tfjs - PullRequest
0 голосов
/ 05 мая 2020

Это более общая версия вопроса, который я уже задавал: Значительная разница между выходами модели keras глубокого тензорного потока в Python и тензорном потоке js преобразование

Как насколько я могу судить, слои модели tf js при запуске в браузере (пока тестировались только в Chrome и Firefox) будут иметь небольшие численные различия в выходных значениях по сравнению с тем же запуском модели. в Python или Node. Совокупный эффект этих небольших различий на всех уровнях модели может вызвать довольно значительные различия в выходных данных. См. Пример здесь .

Это означает, что модель, обученная в Python или Node, не будет работать с такой же точностью при запуске в браузере. И чем глубже ваша модель, тем хуже она станет.

Поэтому у меня вопрос, как лучше всего обучить модель для использования с tf js в браузере? Есть ли способ гарантировать, что результат будет идентичным? Или вам просто нужно признать, что будут небольшие численные различия, и если да, то есть ли какие-либо методы, которые можно использовать для обучения модели, чтобы она была более устойчивой к этому?

1 Ответ

0 голосов
/ 06 мая 2020

Этот ответ основан на моих личных наблюдениях. Таким образом, это спорно и не подкреплены много доказательств. Вот некоторые вещи, которым я следую, чтобы получить точность 16-битных моделей, близких к 32-битным:

  1. Избегайте использования активаций с небольшими верхними и нижними границами, такими как sigmoid или tanh, для скрытых слоев. Эти активации приводят к тому, что веса следующего слоя становятся очень чувствительными к небольшим значениям и, следовательно, к небольшим изменениям. Я предпочитаю использовать ReLU для таких моделей. Поскольку теперь это стандартная активация скрытых слоев в большинстве моделей, вы должны использовать ее в любом случае.

  2. Избегайте снижения веса и регуляризации L1 / L2 на весах во время тренировки (kernel_regularizer параметр в keras), так как они увеличивают чувствительность весов. Используйте вместо этого Dropout, я не заметил значительного падения производительности TFLite при использовании его вместо числовых регуляризаторов.

...