pytorch 는 어떻게 네트워크 회전 사다 리 를 인쇄 합 니까
경사도 인쇄,네트워크 학습 상황 검사
net = your_network().cuda()
def train():
...
outputs = net(inputs)
loss = criterion(outputs, targets)
loss.backward()
for name, parms in net.named_parameters():
print('-->name:', name, '-->grad_requirs:',parms.requires_grad, \
' -->grad_value:',parms.grad)
...
인쇄 결 과 는 다음 과 같 습 니 다.name 은 네트워크 매개 변수의 이름 을 표시 합 니 다.parms.requires_grad 는 이 매개 변 수 를 배 울 수 있 는 지,frozen 인지 아 닌 지 를 나타 낸다.parm.grad 에서 이 매개 변수의 경사도 값 을 인쇄 합 니 다.
보충:pytorch 의 경사도 계산
코드 보 세 요~
import torch
from torch.autograd import Variable
x = torch.Tensor([[1.,2.,3.],[4.,5.,6.]]) #grad_fn None
x = Variable(x, requires_grad=True)
y = x + 2
z = y*y*3
out = z.mean()
#x->y->z->out
print(x)
print(y)
print(z)
print(out)
# :
tensor([[1., 2., 3.],
[4., 5., 6.]], requires_grad=True)
tensor([[3., 4., 5.],
[6., 7., 8.]], grad_fn=<AddBackward>)
tensor([[ 27., 48., 75.],
[108., 147., 192.]], grad_fn=<MulBackward>)
tensor(99.5000, grad_fn=<MeanBackward1>)
graph leaves 에 대한 결과 변수 가 스칼라 라면 gradient 는 기본적으로 None 이거 나'torch.Tensor([1.0])'로 지정 합 니 다.graph leaves 에 대한 결과 변 수 는 벡터 라면 gradient 는 빠 질 수 없습니다.이 벡터 와 같은 위도 의 tensor 라면.
out.backward()
print(x.grad)
# :
tensor([[3., 4., 5.],
[6., 7., 8.]])
# z x gradient :
gradients = torch.Tensor([[2.,1.,1.],[1.,1.,1.]])
z.backward(gradient=gradients)
# z , :L = torch.sum(z*gradient), L leaf Variable
# x L
x.grad
# :
tensor([[36., 24., 30.],
[36., 42., 48.]])
오류 상황
z.backward()
print(x.grad)
# :RuntimeError: grad can be implicitly created only for scalar outputs
x1 = Variable(torch.Tensor([[1.,2.,3.],[4.,5.,6.]]))
x2 = Variable(torch.arange(4).view(2,2).type(torch.float), requires_grad=True)
c = x2.mm(x1)
c.backward(torch.ones_like(c))
# c.backward()
#RuntimeError: grad can be implicitly created only for scalar outputs
print(x2.grad)
위의 예 에서 out 은 상수 이 므 로 기본적으로 은 변 수 를 만 들 수 있 습 니 다.만약 에 역방향 으로 전파 하 는 것 이 상수 가 아니라면 이 행렬 의 구체 적 인 값 을 알 아야 합 니 다.네트워크 에서 loss 행렬 이 고 방향 으로 전파 하 는 과정 에서 이 귀 일 화 된 손실 곱 하기 경사도 로 각 신경 원 의 인 자 를 업데이트 하 는 것 입 니 다.한 블 로 그 를 보고 loss=criterion(outputs,labels)대응 loss+=(label[k]-h)*(label[k]-h)/2
바로 loss 를 구 하 는 것 입 니 다.
나 는 반드시 loss 의 구체 적 인 값 을 요구 해 야 한도 값 을 비교 하여 분류 할 수 있 고 비 선형 활성화 함 수 를 통 해 활성화 여 부 를 판단 할 수 있다 고 생각한다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정확도에서 스케일링의 영향데이터셋 스케일링은 데이터 전처리의 주요 단계 중 하나이며, 데이터 변수의 범위를 줄이기 위해 수행됩니다. 이미지와 관련하여 가능한 최소-최대 값 범위는 항상 0-255이며, 이는 255가 최대값임을 의미합니다. 따...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.