Есть ли способ наложить ограничение в тензорном потоке, могу ли я применить какое-то правило по пути? - PullRequest
0 голосов
/ 25 февраля 2019

Есть ли какой-нибудь способ ограничения на данные, генерируемые тензорным потоком, например, если моя модель создала два выходных данных, можете ли вы наложить на них какое-то ограничение, например, если a и b, где выходные данные могли бы вы что-то предварительно принудительно применить?как (a + b) / 2 <10?То есть модель не нарушит это правило? </p>

Заранее спасибо

1 Ответ

0 голосов
/ 25 февраля 2019

Если под «сгенерированным TensorFlow» вы подразумеваете сгенерированную нейронной сетью, я не думаю, что это вообще возможно.Вы не можете гарантировать, что выход нейронной сети никогда не нарушает такие жесткие ограничения в целом, особенно во время тестирования.

Вот что вы можете сделать:

  • Добавить убытоктермин, что-то вроде max(0, (a+b)/2 - 10).Это не гарантирует, что ваше ограничение не будет нарушено (оптимизация NN - «лучшее из возможного»).Эта функция потерь, кстати, очень похожа на потерю шарнира, используемую в машинах опорных векторов.
  • Используйте соответствующую функцию активации.Например, если вы знаете, что ваши данные должны лежать между [0, 1], используйте сигмоидную активацию на выходе.
  • «Спроектируйте» выход обратно в допустимый диапазон, если он находится за его пределами.

Хотя последние два варианта гарантируют осуществимость, это не всегда возможно сделать, или неясно, как это сделать и, что еще хуже, как это повлияет на обучение.Например, если вы увидите, что (a+b)/2 >= 10 что вы будете делать?Будете ли вы уменьшать b до тех пор, пока не будет выполнено ограничение, или оба компромисса a и b каким-либо образом?Иногда можно определить «ближайшую возможную точку» по некоторой метрике, но не в целом.

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