본문 바로가기
파이토치/신경망 레이어

파이토치 nn.Linear 설명

by bigpicture 2023. 11. 3.
반응형

nn.Linear 은 신경망 은닉층의 한 레이어를 만들어줍니다. 선형함수입니다. 두가지 인자가 입력되는데 하나는 입력텐서의 차원이고 다른 하나는 출력텐서의 차원입니다. 

예를 들어 아래와 같은 레이어를 만들었다고 합시다. 

import torch.nn as nn

layer1=nn.Linear(3,1)


입력 텐서는 세개의 차원을 갖습니다. $[x_{1},x_{2},x_{3}]$ 라고 쓰겠습니다. 출력텐서는 하나의 차원을 갖습니다. y라고 쓰겠습니다. 이때 생성된 layer 는 아래와 같은 형태의 선형 함수입니다. 

$y=w_{1}x_{1}+w_{2}x_{2}+w_{3}x_{3}+b$

b는 bias 입니다. nn.Linear 은 위와 같은 형태의 함수를 정의해줍니다. nn.Linear 에 담겨있는 정보는 weigth 들과 bias 입니다. 

 

nn.Linear 는 weight와 bias 를 임의의 값으로 초기화합니다. 추후 학습을 통해 이 값을 업데이트합니다. 

초기값을 확인하는 방법은 아래와 같습니다. 

>>> layer1.weight
Parameter containing:
tensor([[-0.0059,  0.2145,  0.2442]], requires_grad=True)

>>> layer1.bias
Parameter containing:
tensor([-0.5115], requires_grad=True)

 

데이터가 레이어를 지나도록 만들어봅시다. nn.Linear 에서는 곱셈이 아래 형태로 정의되어 있습니다. 

 

$y=\begin{bmatrix}
x_{1} &x_{2}  &x_{3} 
\end{bmatrix}\begin{bmatrix}
w_{1}\\ 
w_{2}\\ 
w_{3}
\end{bmatrix}+b$

 

따라서 행벡터 형태로 입력해야합니다.  텐서를 하나 정의합니다. 

 

import torch

t1=torch.tensor([2,4,6])

 

레이어에 데이터를 통과시켜봅시다 .

 

>>> layer1(t1)
tensor([0.8290], grad_fn=<ViewBackward0>)

 

아래와 같이 y가 계산됩니다. 만약 두개의 데이터를 입력시키려면 어떻게 해야 할까요? 아래와 같이 각 행에 데이터가 오도록 만들면 됩니다. 

 

t2=torch.tensor([[2.0,4.0,6.0],[1.0,5.0,7.0]])

 

>>> t2.size()
torch.Size([2, 3])

 

2행 3열임을 알 수 있습니다. 레이어에 통과시켜 봅시다. 

 

>>> layer1(t2)
tensor([[0.8290],
        [0.8121]], grad_fn=<AddmmBackward0>)
반응형

댓글