Chainer를 이용한 간단한 신경망 구현 ~ 최적화 알고리즘 설정 ~

지난번 에서 심층 학습 프레임 워크인 Chainer를 사용하여 실제로 신경망을 구축하는 기사를 쓰고 있습니다.
이번에는
1. 데이터 준비
2. 모델 설명
3. 최적화 알고리즘 설정
4. 학습
5. 결과 출력


3. 최적화 알고리즘 설정
에 대해 씁니다.

또한 그대로
4. 학습에 대해서도 써 버립니다.

최적의 파라미터 계산



마지막으로 작성한 Iris 모델은 다음 코드였습니다.
class IrisChain(Chain):
    def __init__():
        super(IrisChain, self).__init__(
             l1 = L.Linear(4, 6),
             l2 = L.Linear(6, 3),
    )

    def __call__(self, x, y):
        return F.mean_squared_error(self.fwd(x), y)

    def fwd(self, x):
        h1 = F.sigmoid(self.l1(x))
        h2 = self.l2(h1)
        return h2

하고있는 일의 흐름으로,
1. 생성자에서 선형 정의
2. fwd에서 노드에서 노드로 발화할지 여부의 판정
3. call에서 출력과 교사 데이터와의 오차



입력 레이어에서 중간 레이어로 변환
v = w_1x + b_1 ...(1)

중간층에서 출력층으로 변환
y = w_2v + b_2 ...(2)

라고 표현할 수 있습니다만, 최종적으로 요구하고 싶은 것은 이 파라미터, w와 b입니다.

이번에는 여기에서도 다룬 확률적 구배 강하법(SGD)의 최적화 알고리즘을 사용합니다.

그리고 학습입니다.
학습의 반복 횟수는 이번은 10000회로 합니다.
>>> model = IrisChain()
>>> optimizer = optimizers.SGD()
>>> optimizer.setup(model)
>>> for i range(10000):
...     x = Variable(xtrain)
...     y = Variable(ytrain)
...     model = zerograds()
...     loss = model(x, y)
...     loss.backward()
...     optimizer.update()

아래 4행
model = zerograds()
loss = model(x, y)
loss.backward()
optimizer.update()

여기 오차 전파의 모습입니다. 거의 약속의 패턴입니다.
이제 적절한 매개 변수 w와 b를 찾은 다음 분류기를 만들 수 있습니다.
그럼 다음에이 분류기를 사용해 보겠습니다.

참고



야마시타 타카요시
일러스트에서 알 수있는 딥 러닝 코단샤
신나 히로유키
Chainer에 의한 실천 심층 학습~복잡한 NN의 실장 방법~ 오옴사

좋은 웹페이지 즐겨찾기