화요일, 9월 10, 2024
HomeDL 신경망을 행렬의 곱으로 나타내면? | Affine 계층을 구현하면서 신경망계층 구현의 기본요소를...

[밑시딥2] 신경망을 행렬의 곱으로 나타내면? | Affine 계층을 구현하면서 신경망계층 구현의 기본요소를 알아보자

밑시딥2의 1장은 밑시집1의 복습차원의 챕터이다.

신경망을 행렬로 표현하면?

신경망은 행렬의 곱으로 묶어서 계산할 수 있고, 이런 특징은 컴퓨터가 신경망을 계산하는데 매우 효율적으로 작동한다.

위와 사진과 같이 입력데이터가 몇차원이든 은닉층이 몇층이든, 노드가 몇개든 한개의 행렬로 계산할 수 있다.

신경망 layers의 기본요소 | Affine layer

그 다음은 신경망을 모듈형태로 구현해보는 내용이다.

Affine, Sigmoid 등을 클래스로 구현한다.

Affine은 fc layer를 말한다. 기하학에서 fc layer은 Affine변환이라서 이렇게 이름지었다고 한다.

Affine 계층의 기본 구조다.

class Affine:
    def __init__(self, W, b):
        self.params = [W, b]
        self.grads = [np.zeros_like(W), np.zeros_like(b)]
        self.x = None

    def forward(self, x):
        W, b = self.params
        out = np.matmul(x, W) + b
        self.x = x
        return out

    def backward(self, dout):
        #구현

매개변수는 params 리스트에 보관한다. 나중에 backward() 메서드도 구현해 줘야한다.

신경망계층의 기본요소는 params, grads, forward(), backward()이다. 이것은 꼭 구현해주어야 한다.

앞으로 RNN 구현에도 비슷할 것이므로 잘 알아가자.

RELATED ARTICLES

Leave a reply

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments