Chainer의 기본 오브젝트에 대해 ~Chain편~

2103 단어 Chainer
지난 번부터 Chainer의 기본 객체에 대해 내가 공부한 것을 썼습니다.
이번에는 Chain 객체에 대해 씁니다.

체인



전회은 functions 객체를, 지난번은 links 객체를 소개했지만, 이번 Chain 객체는 그들이 제공하는 함수를 합성하여 파라미터를 추정한다. 그 합성 함수가 모델을 표현합니다.

먼저 아래 그림과 같은 3층으로 구성된 신경망을 생각한다.


제1층에서 제2층으로의 변환은 링크 객체
v = w_1x + b_1 ...(1)

로 표현할 수 있습니다. (v는 제2층 시점에서의 변수의 상태)
그런 다음 두 번째 레이어에서 세 번째 레이어로의 변환은
y = w_2v + b_2 ...(2)

로 표현할 수 있습니다.
(1) (2)에서, 제 1 층에서 제 3 층으로의 변환은
y = w_2(w_1x + b_1) + b_2 ...(3)

로 표현할 수 있습니다.
그러나 두 번째 레이어는 각 노드에서 활성화 함수를 적용해야합니다.
따라서 (3)은
y = w_2δ(w_1x + b_1) + b_2

라고 표현됩니다. (δ는 활성화 함수)

이 함수는 함수와 링크의 함수로 표현할 수 있습니다.
이를 위해 Chain 클래스를 사용합니다.

여기에서는 Chain 클래스를 상속한 MyChain을 사용합니다.

첫째, 생성자는 links의 함수로 계층에서 계층으로 매핑을 열거합니다.
class MyChain(Chain):
  def __init__(self):
     super(MyClass, self).__init__(
       l1 = L.linear(4, 3),
       l2 = L.linear(3, 3)
     )

그런 다음 순방향 계산, 즉 활성화 함수 처리를 메서드로 정의합니다.
def forward(self, x):
  return F.sigmoid(self.l1(x)):

그런 다음 손실 함수 (오차 함수)를 call에 씁니다. mean_squqred_error는 제곱 오차 함수입니다.
def __call__(self, x, y):
  result = self.forward(x)
  loss = F.mean_squared_error(result, y)
  return loss

이제 오차 계산까지 할 수 있습니다.
이번은 여기까지.
다음 번에는 optimizers에 대해 씁니다.

참고



신나 히로유키
Chainer에 의한 실천 심층 학습~복잡한 NN의 실장 방법~ 오옴사

좋은 웹페이지 즐겨찾기