01 식에서 데이터로
직선의 식으로 값을 계산하는 것과, 측정값에서 직선의 식을 찾는 것은 무엇이 다를까요?
설명
- 앞에서는 기울기를 알고 결과를 계산했다면, 이번에는 데이터의 경향을 설명할 기울기를 찾습니다.
- 실습에서는 절편을 0으로 고정하고 기울기 하나를 조절합니다. 모델이 허용하는 직선의 범위를 단순하게 정한 것입니다.
직선의 식으로 값을 계산하는 것과, 측정값에서 직선의 식을 찾는 것은 무엇이 다를까요?
기울기를 계속 조절하면 어떤 데이터든 오차 없이 설명할 수 있을까요?
A의 각 행은 입력값과 상수 1로 구성됩니다.
A와 A_prime을 나란히 출력하고, 어느 열이 선택되었는지 표시하세요.bias=False에 해당하는 식을 고르세요.train_linear를 Learning Rate , 각각 1000 epoch로 호출하세요. 함수 안의 동일한 Seed와 모델 초기화를 유지하세요.train_linear의 loss.backward() 바로 다음 줄에 첫 epoch에서만 model.weight.grad를 출력하는 코드를 추가하세요. Gradient의 부호와 Weight 갱신 방향을 연결하고, 다음 epoch 전에 zero_grad()가 필요한 이유를 설명하세요.A_prime.T @ A_prime의 값과 Determinant를 출력하고 Inverse가 존재하는지 판단하세요.torch.linalg.inv(A_prime.T @ A_prime) @ A_prime.T @ B_prime, torch.linalg.pinv(A_prime) @ B_prime, Learning Rate 0.01·1000 epoch로 학습한 Weight를 세 행의 표에 적으세요. 직접 계산한 해와 학습 결과의 절대 차이도 적으세요.코드, 실제 Output·그래프, 직접 작성한 해석을 포함하세요. 제출은 KLAS를 이용하며 기한은 학기 일정과 최신 공지를 확인합니다.
파일명: 이름_학번_6주차.ipynb.
실행 환경을 다시 시작하고 전체 코드를 위에서부터 실행한 뒤 저장하세요.
모델과 입력의 dtype이 다른 경우
print("model:", model.weight.dtype)
for debug_input in [A_prime.double(), A_prime.float()]:
print("Input:", debug_input.shape, debug_input.dtype)
try:
with torch.no_grad():
print("Output:", model(debug_input).shape)
except (RuntimeError, ValueError) as error:
print(type(error).__name__, str(error))