[인공지능 소개] PyTorch는 지정된 레이어 매개변수와 발생한 문제에 대한 훈련을 구현하기 위해 일부 매개변수를 수정합니다.

[인공지능 소개] PyTorch는 지정된 레이어 매개변수와 발생한 문제에 대한 훈련을 구현하기 위해 일부 매개변수를 수정합니다.


1. 문제에 대한 설명

  • 모델의 매개변수를 로드한 후 일부 레이어의 매개변수를 수정하고 나머지 레이어를 학습시킵니다.

2. 코드 구현

  1. 조건을 설정하면 조건에 맞는 매개변수는 업데이트되지 않도록 설정되며, 코드는 다음과 같습니다.
for name, param in model.named_parameters(): # 遍历所有参数块
	if 'fc_offset' not in name: # 设置要求
		param.requires_grad = False  # 对符合要求的参数设置不更新
	# print(name, param.requires_grad)  # 显示所有模型模块,以及梯度情况
  1. 최적화 프로그램이 여전히 모든 매개변수를 업데이트하는 것을 방지하려면 필터를 사용하여 매개변수를 필터링하세요.
params = filter(lambda p: p.requires_grad, model.parameters())
optimizer = torch.optim.Adam(params, lr=learning_rate)
  • 그게 다야

3. 발생한 문제 - RuntimeError: 텐서의 요소 0에는 grad가 필요하지 않으며 grad_fn이 없습니다.

  • 이 문제는 loss의 그래디언트, 즉 loss의 require_grad(False)가 꺼진 것을 보여줍니다.
  • 이는 모델 매개변수의 마지막 레이어의 기울기가 꺼진 경우 계산된 손실에 기울기가 없고 추적할 수 없기 때문에 손실의 기울기를 수동으로 True로 설정해야 하기 때문입니다.
  • 예를 들어:
loss.requires_grad_(True)  
loss.backward()

Guess you like

Origin blog.csdn.net/qq_44928822/article/details/130759332