⑤ 파이토치에서 사용하는 뷰(view)는 넘파이의 reshape과 같은 역할로 텐서의 크기(shape)를 변경해 주는 역할을 합니다. 따라서 input_data.view(-1, 784)는 input_data를 (?, 784)의 크기로 변경하라는 의미입니다. 이때 첫 번째 차원(-1)은 사용자가 잘 모르겠으니 파이토치에 맡기겠다는 의미이고, 두 번째 차원의 길이는 784를 가지도록 하라는 의미입니다. 다시 말해 2차원 텐서로 변경하되 (?, 784)의 크기로 변경하라는 의미입니다.
⑥ 활성화 함수를 지정할 때는 다음 두 가지 방법이 가능합니다.
• F.relu(): forward() 함수에서 정의
• nn.ReLU(): __init__() 함수에서 정의
활성화 함수 사용에 한정하여 이 둘 간의 차이는 간단히 사용하는 위치라고 할 수 있습니다. 하지만 근본적으로는 nn.functional.xx()(혹은 F.xx())와 nn.xx()는 사용 방법에 차이가 있습니다. 다음 코드를 통해 둘 간의 차이를 확인할 수 있습니다.
먼저 nn을 사용하는 코드는 다음과 같습니다.
import torch import torch.nn as nn inputs = torch.randn(64, 3, 244, 244) conv = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, padding=1) ------ 세 개의 채널이 입력되어 64개의 채널이 출력되기 위한 연산으로 3×3 크기의 커널을 사용 outputs = conv(inputs) layer = nn.Conv2d(1, 1, 3)