딥러닝 시 시리얼 모니터에 많은 로그들이 나온다.
일반저긍로 버젼오류, 또는 자신이 설정한 디버그 로그들이 나온다.
또한, 텐서플로우를 사용하면 꼭 나오는 것들이 있는데, 이는 다음과 같다.
loss
:
grad_norm
:
1495043.625
)은 학습 불안정성을 나타낼 수 있다.learning_rate
:
1.5e-05
→ 3.4e-05
)하며 모델이 안정적으로 학습하도록 설할 수 있다.epoch
:
0.14
, 0.15
처럼 소수점으로 표시된 것은, 전체 에포크(1.0) 중 몇 %만큼 진행되었는지를 나타낸다.epoch 0.14
는 14% 진행된 상태를 의미한다.epoch 0.14 ~ 0.16
):
loss
값이 매우 크고(18305.9719
), grad_norm
값도 급격히 변동(1495043.625
)하고 있다.epoch 0.17 ~ 0.25
):
loss
값이 급격히 감소하며 (114.0165
→ 0.186
), 모델이 데이터를 점점 더 잘 학습하고 있음을 보여준다.grad_norm
값도 점차 안정화되고 있다.epoch 0.26 ~ 0.32
):
loss
값이 거의 0에 가까워지며 (0.0008
, 0.0
), 모델이 학습을 거의 완료했음을 나타낸다.grad_norm
값도 매우 작아졌다(0.0020479606464505196
).grad_norm
:
grad_norm
값이 너무 커서 학습이 불안정할 가능성이 크다. 이를 방지하기 위해:
grad_norm
값이 일정 이상 커지지 않도록 제한.loss
의 불규칙적 상승:
epoch 0.22
에서 loss = 4.6215
로 갑자기 상승.loss
와 grad_norm
이 안정화되고, 모델이 학습을 잘 마무리하는 양상을 띈다.PyTorch에서 텐서 복사 방식과 관련된 경고가 뜨곤 한다.
아래의 메시지는 torch.tensor()
를 사용해 이미 존재하는 텐서를 복사할 때 잘못된 사용 방식을 알려주고 있다.
To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach()
or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
torch.tensor(sourceTensor)
사용 문제:
sourceTensor
(기존 텐서)를 torch.tensor()
에 전달하면 새로운 텐서를 생성한다.clone()
및 detach()
메서드를 사용해야 한다.new_tensor = torch.tensor(existing_tensor)
new_tensor = existing_tensor.clone().detach()
requires_grad_(True)
추가:new_tensor = existing_tensor.clone().detach().requires_grad_(True)
torch.tensor()
를 사용하면 원래 텐서의 그래디언트 추적 상태가 무시될 수 있다.torch.tensor()
는 텐서를 복사하며 새로운 메모리를 할당한다.이 경고는 텐서를 복사할 때 torch.tensor()
대신 clone().detach()
를 사용하라는 의미이다.
코드를 수정하여 권장 방식을 따르도록 하면 경고를 제거하고 모델 학습 과정에서 발생할 수 있는 문제를 방지할 수 있다.
이 메시지는 PyTorch 모델을 ONNX 형식으로 변환할 때 발생한 경고와 상태 로그를 보여준다. 아래에서 각 메시지의 의미를 자세히 설명하겠다.
TracerWarning: torch.tensor results are registered as constants in the trace.
torch.jit.trace()
또는 ONNX 변환 과정에서 torch.tensor()
가 상수로 처리되었다는 의미이다.torch.tensor(1000)
와 같이 동적으로 생성된 텐서를 상수 값으로 간주하여 ONNX 그래프에 삽입한다.해결 방법:
torch.tensor()
대신 모델 입력으로 처리:
dynamic_value = torch.tensor(input_value) # 모델 외부에서 생성하여 전달
UserWarning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.
onnx::Slice
)에서 steps=1
이외의 값이 사용되었기 때문에 최적화가 제한되었다.해결 방법:
steps
값을 검토하고, steps=1
로 조정하거나 연산을 단순화할 수 있다.모델이 ONNX 형식으로 저장되었습니다: C:\mobile_bert\AI\mobilebert_scam_classifier.onnx
C:\mobile_bert\AI\mobilebert_scam_classifier.onnx
에 저장되었다.torch.tensor()
관련 경고는 동적으로 생성된 값이 필요한 경우 코드 수정이 필요하다.import onnxruntime as ort
session = ort.InferenceSession("C:\\mobile_bert\\AI\\mobilebert_scam_classifier.onnx")
input_name = session.get_inputs()[0].name
result = session.run(None, {input_name: input_tensor})
print(result)
모델 자체에는 문제가 없으므로 저장된 ONNX 파일을 활용해 작업을 계속 진행해도 된다.
위와 같은 과정을 통해 발생중인 오류를 해결하였다