У меня есть один вход и один выход. Если я делаю одно прямое и обратное распространение, и потери увеличиваются, это может означать только одну из двух вещей, верно? Либо скорость обучения слишком высока, либо градиент не рассчитан правильно, верно?
Я делаю нейронную сеть с настраиваемой функцией потерь, которая довольно длинная и сложная, поэтому оба эти сценария не являются для меня длительными, но как я узнаю, какой это сценарий?
Это происходит при уровне обучения 0,0000001, который, как я знаю, звучит крайне мало, но кто знает, может быть, для моей пользовательской функции потерь требуется чрезвычайно малая скорость обучения.
Фактический код:
def loss(model, x, y):
y_ = model(x)
return dl_tf_loss(y,y_)
l = loss(model, pic, pic)
print("Loss test: {}".format(l))
def grad(model, inputs, targets):
with tf.GradientTape() as tape:
loss_value = loss(model, inputs, targets)
return loss_value, tape.gradient(loss_value, model.trainable_variables)
optimizer = tf.optimizers.Adam(learning_rate=0.0000001,amsgrad=True)
loss_value, grads = grad(model, pic, pic)
print("Initial Loss: {}".format(loss_value.numpy()))
optimizer.apply_gradients(zip(grads, model.trainable_variables))
print("Loss: {}".format(loss(model, pic, pic).numpy()))
И иногда я получаю, что потеря больше, чем первоначальная потеря.
Буду очень признателен за любую помощь, спасибо.