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의 실장 방법~ 오옴사

좋은 웹페이지 즐겨찾기