тензор и переменная в Pytorch

Тензор 与 Переменная

Два основных объекта pytorch: Tensor (тензор) и Variable (переменная)

Среди них тензор не может распространяться обратно, а переменная может распространяться обратно (вперед).

Обратное распространение позволяет нейронной сети обновить предыдущие параметры.Это можно представить, как при выполнении вопроса (вопрос можно рассматривать как нейронный узел один за другим), мы сделали правильно, а некоторые сделали неправильно.Это может в свою очередь, сообщите нам, на какой части знаний мы должны сосредоточиться и какие типы вопросов изучать, а затем нейронная сеть увеличивает вес параметра этого узла через прямое, что является параметром обновления направления распространения.

Арифметические операции и операции выбора тензора такие же, как у numpy, и операции, подобные numpy, можно перенести.

переменная — это переменная, которая может изменяться непрерывно, в соответствии с обратным распространением и атрибутом обновления параметра. Переменная pytorch — это географическое местоположение, в котором хранятся меняющиеся значения, а значения внутри будут постоянно меняться, как коробка с конфетами (конфеты — это данные, то есть тензор), а количество конфет постоянно меняется. Pytorch вычисляется тензором, а параметры в тензоре имеют переменную форму.

Характеристики графа вычислений в PyTorch резюмируются следующим образом: autograd строит свой граф вычислений в соответствии с операцией пользователя над переменной

  1. требует_град

Переменная не должна быть производной по умолчанию, то есть атрибут require_grad по умолчанию имеет значение False.Если require_grad определенного узла имеет значение True, то все узлы, зависящие от него, require_grad имеют значение True.

  1. изменчивый

Атрибут volatile переменной по умолчанию равен False.Если для атрибута volatile переменной установлено значение True, то атрибут volatile всех узлов, которые от него зависят, равен True. Узлы, чей атрибут volatile имеет значение True, не будут получены, а volatile имеет более высокий приоритет, чем require_grad.

  1. сохранить_граф

Во время многократного обратного распространения (многоуровневый контроль) градиенты накапливаются. Вообще говоря, после однократного обратного распространения граф вычислений будет освобожден, то есть будет очищен промежуточный кеш обратного распространения [это характеристика динамической степени]. Укажите keep_graph=True, чтобы сохранить эти кэши для нескольких обратных распространений.

  1. назад (grad_variables = нет, retain_graph = нет, create_graph = нет)

Обратное распространение, решить градиент Variable. помещается в промежуточный кэш.

Почему у PyTorch есть параметр grad_variables?

Если предположить, что x получает y после некоторых вычислений, то y.backward(w) не является производной от y по x, а является производной от l = torch.sum(y*w) по x. w можно рассматривать как вес каждого компонента y, а также как частную производную удаленной функции потерь от l до y. Другими словами, не обязательно выполнять обратное распространение с последнего узла y расчетного графа, а также можно начать с узла n в середине, если вы можете записать производную dl/dn потерь функция l по отношению к этому узлу, n .backward(dl/dn) все еще может пройти вперед и правильно вычислить производную функции потерь l по отношению к узлам до узла n. В частности, если y является скаляром, w принимает значение по умолчанию 1,0, что означает вычисление производной y по x в соответствии с нашим обычным пониманием.

  1. град_переменная

grad_variables — это параметр градиента при получении y. Поскольку autograd используется только для скаляров, когда y не является скаляром и в объявлении используется require_grad=True, необходимо указать параметр grad_variables. Градиент, полученный после исходного обратного распространения, будет следующим: grad_variables корректируется, а затем результат сохраняется в переменной grad. Форма grad_variables должна быть согласована с Variable. В глубоком обучении деривация связана с градиентом, поэтому grad_variables обычно определяется как [1, 0,1, 0,01, 0,001], указывающее направление градиента, и выбор меньшего значения не повлияет на эффективность деривации.

torch.autograd.Variable — это основной класс Autograd, который инкапсулирует Tensor и интегрирует соответствующие реализации обратного распространения.

Разница и связь между Variable и тензором:

  1. Переменная — это корзина, а тензор — это яйцо, яйца нужно класть в корзину, чтобы их можно было легко вынуть (один параметр при определении переменной — тензор)

  2. В дополнение к тензору, установленному в корзине Variable, также есть параметр require_grad, указывающий, нужно ли его выводить, и по умолчанию установлено значение False.

  3. Корзина переменных имеет некоторые собственные атрибуты.

  • Например, grad, переменная градиента.grad is d(y)/d(variable) сохраняет значение градиента переменной y в переменной variable.Если параметр require_grad имеет значение False, возвращаемое значение variable.grad равно None. Если это True, возвращаемое значение Это значение градиента переменной

  • Например, grad_fn, для созданной пользователем переменной (Variable()) grad_fn равно none, то есть обратную функцию вызвать нельзя, а для переменной, сгенерированной вычислением, если есть require_grad, которая генерирует промежуточную переменную, которая верно, то его grad_fn не равно none, в противном случае оно равно none

  • Например данные, это очень просто, это атрибут яйцо (тензор)

Varibale содержит три свойства:

данные: хранится тензор, который является данными онтологии
grad: градиент данных сохраняется, функция является переменной вместо тензора, что согласуется с формой данных
grad_fn: указывает на объект Function, используется для градиентного расчета обратного распространения

Je suppose que tu aimes

Origine blog.csdn.net/weixin_45277161/article/details/128942105
conseillé
Classement