본문 바로가기
Python Library/PyTorch

[PyTorch] 모델 계층 (Layer)

by goatlab 2022. 1. 13.
728x90
반응형
SMALL

모델 계층 (Layer)

 

input_image = torch.rand(3,28,28)
print(input_image.size()) # layer 확인
Out:

torch.Size([3, 28, 28])

 

nn.Flatten

 

nn.Flatten는 layer를 초기화하여 각 28x28의 2D image를 784 pixel 값을 갖는 연속된 array로 변환한다. (dim=0의 미니배치 차원은 유지)

 

flatten = nn.Flatten()
flat_image = flatten(input_image)
print(flat_image.size())
Out:

torch.Size([3, 784])

 

nn.Linear

 

nn.Linear은 저장된 가중치 (weight)와 편향 (bias)을 사용하여 입력에 선형 변환 (linear transformation)을 적용하는 module이다.

 

layer1 = nn.Linear(in_features=28*28, out_features=20)
hidden1 = layer1(flat_image)
print(hidden1.size())
Out:

torch.Size([3, 20])

 

nn.ReLU

 

비선형 활성화 (activation)는 모델의 입력과 출력 사이에 복잡한 관계 (mapping)를 만든다. 비선형 활성화는 선형 변환 후에 적용되어 비선형성 (nonlinearity) 을 도입하고, 신경망이 다양한 현상을 학습할 수 있도록 돕는다. 이 모델에서는 nn.ReLU를 선형 계층들 사이에 사용하지만, 모델을 만들 때는 비선형성을 가진 다른 활성화를 도입할 수도 있다.

 

print(f"Before ReLU: {hidden1}\n\n")
hidden1 = nn.ReLU()(hidden1)
print(f"After ReLU: {hidden1}")
Before ReLU: tensor([[ 1.5047e-01,  3.6946e-01, -2.1153e-02, -3.4564e-04, -3.0788e-01,
          1.9882e-02, -1.1780e-01, -5.4993e-01, -5.9037e-01, -2.5108e-01,
         -5.1110e-01,  2.6428e-01, -1.5706e-01, -3.4855e-01,  2.4683e-01,
          6.6800e-02,  1.1840e-01,  2.0951e-01,  2.1114e-01,  5.9677e-01],
        [-2.0407e-01, -1.0187e-01, -1.3862e-01,  5.8749e-02, -1.1944e-02,
         -3.9302e-01,  4.2164e-01, -3.6521e-01, -8.1786e-01, -1.8983e-01,
         -3.8495e-01,  5.3707e-01, -7.4002e-02, -2.6657e-01, -1.4418e-01,
          2.3176e-01,  3.7283e-01,  3.6056e-01,  1.0917e-01,  3.4045e-01],
        [-3.6583e-01,  6.8759e-02,  2.1978e-01, -3.4410e-01,  2.0898e-02,
         -1.0892e-01,  4.3534e-02, -2.3046e-01, -7.4926e-01, -4.0952e-01,
         -1.3200e-01,  3.0964e-01,  1.9641e-01, -4.8414e-01,  1.0395e-01,
          7.7206e-02,  5.4719e-01,  2.9023e-01,  4.2290e-02,  3.4000e-01]],
       grad_fn=<AddmmBackward0>)


After ReLU: tensor([[0.1505, 0.3695, 0.0000, 0.0000, 0.0000, 0.0199, 0.0000, 0.0000, 0.0000,
         0.0000, 0.0000, 0.2643, 0.0000, 0.0000, 0.2468, 0.0668, 0.1184, 0.2095,
         0.2111, 0.5968],
        [0.0000, 0.0000, 0.0000, 0.0587, 0.0000, 0.0000, 0.4216, 0.0000, 0.0000,
         0.0000, 0.0000, 0.5371, 0.0000, 0.0000, 0.0000, 0.2318, 0.3728, 0.3606,
         0.1092, 0.3404],
        [0.0000, 0.0688, 0.2198, 0.0000, 0.0209, 0.0000, 0.0435, 0.0000, 0.0000,
         0.0000, 0.0000, 0.3096, 0.1964, 0.0000, 0.1039, 0.0772, 0.5472, 0.2902,
         0.0423, 0.3400]], grad_fn=<ReluBackward0>)

 

nn.Sequential

 

nn.Sequential은 순서를 갖는 module의 컨테이너이다. 데이터는 정의된 것과 같은 순서로 모든 moduel을 통해 전달된다. 순차 컨테이너 (sequential container)를 사용하여 seq_modules와 같은 신경망을 빠르게 만들 수 있다.

 

seq_modules = nn.Sequential(
    flatten,
    layer1,
    nn.ReLU(),
    nn.Linear(20, 10)
)
input_image = torch.rand(3,28,28)
logits = seq_modules(input_image)

 

nn.Softmax

 

신경망의 마지막 선형 계층은 nn.Softmax module에 전달될 [-infty, infty] 범위의 raw 값인 logits 를 반환한다. logits는 모델의 각 분류 (class)에 대한 예측 확률을 나타내도록 [0, 1] 범위로 비례하여 조정 (scale)된다. dim 매개변수는 값의 합이 1이 되는 차원을 나타낸다.

 

softmax = nn.Softmax(dim=1)
pred_probab = softmax(logits)

 

https://tutorials.pytorch.kr/beginner/basics/buildmodel_tutorial.html

 

신경망 모델 구성하기 — PyTorch Tutorials 1.10.0+cu102 documentation

Note Click here to download the full example code 파이토치(PyTorch) 기본 익히기 || 빠른 시작 || 텐서(Tensor) || Dataset과 Dataloader || 변형(Transform) || 신경망 모델 구성하기 || Autograd || 최적화(Optimization) || 모델 저

tutorials.pytorch.kr

 

728x90
반응형
LIST