В чем разница между model.training = False и model.param.require_grad = False - PullRequest
1 голос
/ 29 мая 2019

В чем разница между этими двумя:

model.training = False

и

for param in model.parameters():
    param.require_grad = False

1 Ответ

1 голос
/ 29 мая 2019

model.training = False переводит модуль в режим оценки, т. Е.

if model.training == True:
    # Train mode
if model.training == False:
    # Evaluation mode

Таким образом, эффективно такие слои, как выпадание, групповой поток и т. Д., Которые ведут себя по-разному в поезде и в процедурах испытаний, знают, что происходит, и, следовательно, могут вести себя соответствующим образом.

пока

for param in model.parameters():
    param.require_grad = False

заморозить слои, чтобы эти слои не были обучаемыми.

Основная идея заключается в том, что все модели имеют функцию model.children (), которая возвращает его слои. В каждом слое есть параметры (или веса), которые можно получить с помощью .param () на любом дочернем элементе (то есть слое). Теперь каждый параметр имеет атрибут с именем requires_grad, который по умолчанию равен True. True означает, что он будет обратно распространен, и, следовательно, чтобы заморозить слой, вам нужно установить для require_grad значение False для всех параметров слоя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...