Как работает обновление веса в динамическом графе вычислений pytorch?

SQL Server 2005 и выше

SELECT
  SCHEMA_NAME(obj.schema_id) AS schema_name,
  obj.name AS proc_name
FROM
  sys.procedures obj WITH(NOLOCK)
ORDER BY
  schema_name,
  proc_name

SQL Server 2000

SELECT
  USER_NAME(obj.uid) AS user_name,
  obj.name AS proc_name,
FROM
  sysobjects obj WITH(NOLOCK)
WHERE
  (obj.status & 0x80000000) = 0
  AND RTRIM(obj.xtype) IN ('P', 'RF')
ORDER BY
  user_name,
  proc_name
1
задан user423491 18 January 2019 в 09:06
поделиться

1 ответ

Когда вы вызываете backward (в качестве функции или метода для тензора), градиенты операндов с requires_grad == True вычисляются относительно тензора, который вы назвали backward. Эти градиенты накапливаются в свойстве .grad этих операндов. Если один и тот же операнд A появляется в выражении несколько раз, вы можете концептуально рассматривать их как отдельные сущности A1, A2 ... для алгоритма обратного распространения и только в конце суммировать их градиенты так, чтобы A.grad = A1.grad + A2.grad + ....

Теперь, строго говоря, ответ на ваш вопрос

Я хочу знать, что происходит с middle_linear weight при каждом обратном

это: ничего. backward не изменяет веса, только вычисляет градиент. Чтобы изменить вес, вам нужно выполнить шаг оптимизации, возможно, используя один из оптимизаторов в torch.optim . Затем веса обновляются в соответствии с их свойством .grad, поэтому, если ваш операнд использовался несколько раз, он будет обновляться в соответствии с суммой градиентов в каждом из его применений.

Другими словами, если ваш матричный элемент x имеет положительный градиент при первом применении и отрицательный при использовании во второй раз, может случиться так, что чистые эффекты отменится и останется как есть (или изменится только немного). Если оба приложения требуют, чтобы значение x было выше, оно повысится больше, чем если бы оно использовалось только один раз и т. Д.

0
ответ дан Jatentaki 18 January 2019 в 09:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: