Преобразуйте это уравнение функции потерь в код Python
Пожалуйста, проверьте это уравнение по этой ссылке и преобразуйте его в функцию потерь Python для простой модели 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 ответ
На вашем скриншоте показана вся целевая функция, но только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
подобные регуляризаторы, несколько раз в разных контекстах (я вообще не знаком с keras, поэтому не знаю, что происходит - думаю, это более сложная модель, чем та, которая представлена на вашем скриншоте).
В любом случае ответ на ваш вопрос заключается в том, что термин регуляризации обрабатывается отдельно и не принадлежит функции потерь (сигнатура функции потерь также дает нам этот намек: нетw
в него передан аргумент - только y_true
а также y_pred
).