Преобразовать это уравнение функции потерь в код Python - PullRequest
0 голосов
/ 25 октября 2019

Пожалуйста, проверьте это уравнение этой ссылки и преобразуйте его в функцию потерь питона для простой модели keras.

УРАВНЕНИЕ ИЗОБРАЖЕНИЯ ИЛИ ССЫЛКА НА ИЗОБРАЖЕНИЕ ДЛЯ ПРЕОБРАЗОВАНИЯ В КЕРАС ПИТОНА, ТРЕБУЮЩЕЕ УРАВНЕНИЕ ПОТЕРЯ

, где максимальная часть или выбранная кривая часть уравнения на рисунке - это потеря шарнира, yi представляет метку каждого примера, φ (x) обозначает представление характеристики, b - это смещение, k - это смещениеобщее количество обучающих примеров и w - классификатор для изучения.

Для простоты проверки примерное уравнение имеет вид -

min(w) [
1/k(sum of i to k)
max(0, 1 - y_i(w.φ(x) - b))
]
+
1/2||w||^ 2 
.

На самом деле я могу найти максимальную часть или изогнутый участок уравнения на рисунке, но не могу найти 1/2* || w || ^ 2 часть.

Вы также просмотрите эту ссылку для справки -

аналогичная ссылка

Здесь я приложил пример кода, чтобы прояснить концепцию моей проблемы:

print("Create Model")
model = Sequential()
model.add(Dense(512,     
input_dim=4096, init='glorot_normal',W_regularizer=l2(0.001),activation='relu'))
model.add(Dropout(0.6))
model.add(Dense(32, init='glorot_normal',W_regularizer=l2(0.001)))
model.add(Dropout(0.6))
model.add(Dense(1, init='glorot_normal',W_regularizer=l2(0.001),activation='sigmoid'))

adagrad=Adagrad(lr=0.01, epsilon=1e-08)     
model.compile(loss= required_loss_function, optimizer=adagrad)

def required_loss_function(y_true, y_pred): 
      IN THIS LOSS FUNCTION, 
      CONVERT THE EQUATION IN THE 
      PICTURE INTO PYTHON CODE.

В КАЧЕСТВЕ МЕНЯ, ВАМ НУЖНО НАЙТИ - 1/2 * || w ||^ 2. Как я могу найти код Python оставшейся или другой части уравнения в связанном изображении. Часть потери шарнира может быть легко рассчитана с помощью этого уравнения -

import keras

keras.losses.hinge(y_true, y_pred)

Если вам нужна дополнительная помощь, пожалуйста, прокомментируйте детали.

1 Ответ

0 голосов
/ 26 октября 2019

На скриншоте показана целевая целевая функция , но только термин sum(max(...)) называется термином убыток . Следовательно, только этот термин должен быть реализован в required_loss_function. В самом деле, вы, вероятно, можете использовать заранее запеченную потерю петель из библиотеки keras, а не писать ее самостоятельно - если, конечно, вы не должны писать ее самостоятельно как часть упражнения.

Другой термин,член 0.5 * || w || ^ 2 - это член регуляризации . В частности, это термин регуляризации L2. У keras совершенно отдельный способ работы с регуляризацией, о котором вы можете прочитать в https://keras.io/regularizers/. По сути, это равносильно созданию l2 экземпляра keras.regularizers.l2(lambdaParameter) и присоединению его к вашей модели с помощью метода .add() (в приведенном на скриншоте уравнении нет параметра, который масштабирует член регуляризации, поэтому если это буквальнодолжен реализовать, это означает, что ваш lambdaParameter будет равен 1,0).

Но представленный вами листинг, похоже, уже использует l2 регуляризаторы, подобные этому, несколько раз в разных контекстах (я не знаком скерас, так что я не знаю, что происходит - я думаю, что это более сложная модель, чем та, что представлена ​​на скриншоте).

В любом случае, ответ на ваш вопрос заключается в том, что термин регуляризацииобрабатываются отдельно и принадлежат , а не к функции потерь (сигнатура функции потерь также дает нам эту подсказку: в нее не передан w аргумент - только y_true и y_pred).

...