Вопрос о значении результата обратного распространения - PullRequest
0 голосов
/ 02 июля 2019

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

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

Это происходит при уровне обучения 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()))

И иногда я получаю, что потеря больше, чем первоначальная потеря.

Буду очень признателен за любую помощь, спасибо.

...