Я пытаюсь имитировать c нейронную сеть pytorch в keras.
Я уверен, что моя версия нейронной сети keras очень близка к той, что есть в pytorch, но во время обучения я вижу, что значение потерь в сети pytorch намного ниже, чем значения потерь в сети keras , Интересно, это потому, что я не скопировал должным образом сеть Pytorch в Keras или вычисление потерь отличается в двух рамках.
Определение потери Pytorch:
loss_function = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=args.lr, momentum=0.9, weight_decay=5e-4)
Определение потери Keras:
sgd = optimizers.SGD(lr=.1, momentum=0.9, nesterov=True)
resnet.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['categorical_accuracy'])
Обратите внимание, что все слои в сети keras были реализованы с регуляризацией L2 kernel_regularizer=regularizers.l2(5e-4)
, также я использовал инициализацию he_uniform
, которая, по моему мнению, по умолчанию в pytorch, согласно источнику код .
Размер пакета для двух сетей одинаков: 128
.
В версии с pytorch я получаю значения потерь около 4.1209
, которое уменьшается до 0.5
. В керасе оно начинается около 30 и уменьшается до 2.5
.