Chainer의 기본 오브젝트에 대해 ~Variable편~
본 기사에 대하여
이 기사에서는 현재 심층 학습에 대해 공부하는 내가
신나 히로유키 Chainer에 의한 실천 심층 학습 옴사
읽고 배운 Chainer의 기본 객체에 대해 정리하고 있습니다.
잘못된 해석을 싣고 있는 경우도 있기 때문에, 이상한 점을 알아차린 분은 지적해 주시면 다행입니다.
Chainer 정보
Chainer은 PFI/PFN(주식회사 Preferred Infrastructure/주식회사 Preferred Networks)이 개발하는 심층 학습의 프레임워크입니다.
심층 학습을 구현하는데 필요한 계산을 실시하는 라이브러리를 풍부하게 갖추고 있습니다.
특징을 정리하면,
-Python (2.7 이상)에서 사용할 수 있습니다.
- 모든 신경망의 구조에 대응
- 동적 계산 그래프 구축을 통한 직관적인 코드
-GPU의 강력한 지원
입니다.
특히, Linux 환경하이면(기본 Linux상에서의 동작을 상정하고 있다) pip 한발로 인스톨을 할 수 있습니다.
pip install chainer
기본 객체
Chainer는 신경망을 구현하는 데 필요한 구성 요소를 객체로 제공합니다.
기본적인 것으로
-Variable
-functions
-links
-Chain
-optimazers
있습니다.
이번에는 Variable에 대해 설명합니다.
Variables
Variable은 신경망의 노드에 해당하는 객체입니다. 예는 아래 그림을 가리키는 y2입니다.
사용할 때는
import numpy as np
import chainer
from chainer import Variable
라고 써주세요. numpy도 배열 조작에 필요하기 때문에 chainer를 사용할 때는 기본 import합니다.
예를 들어, 노드 x1, x2, x3은 다음과 같이 선언합니다. (아래에서 대화 모드)
노드의 실체는 배열입니다.
>>> x1 = Variable(np.array([1], dtype=np.float32))
>>> x2 = Variable(np.array([2], dtype=np.float32))
>>> x3 = Variable(np.array([3], dtype=np.float32))
Chainer에서는 실수는 np.float32, 정수는 np.int32에 고정해야합니다.
z = 2(x_1 - 2x_2 -1) + (x_2x_3 - 1) + 1
이 식을 Variable로 나타내면
>>> z = (x1 -2**x2 -1)**2 + (x2*x3 -1) + 1
됩니다. z의 내용은 data라는 속성에서 참조 할 수 있습니다. 수식대로, data는 순서
전파시킨 결과입니다.
>>> z.data
array([42.], dtype=float32)
또한 backward 메소드를 사용하여 역 전파를 계산할 수 있습니다.
>>> z.backward()
신경망에서는 가중치를 업데이트하기 위해 오차 역전파법이라는 기술을 사용합니다. (세세한 설명에 대해서는 링크처를 참조) 그 때, 오차 함수의 기울기가 중요한 파라미터가 됩니다만, backward 메소드를 사용한 노드에 대해서, 그 전의 노드의 grad 라고 하는 속성에 미분값이 세트 됩니다.
>>> x1.grad
array([-8.], dtype=float32)
>>> x2.grad
array([46.], dtype=float32)
>>> x3.grad
array([20.], dtype=float32)
실제로, 각각의 변수로 미분해 보면(Markdown의 math에서 flalign이 효과가 없다···)
\frac{δz}{δx_1} = 2(x_1 - 2x_2 - 1) \\
\frac{δz}{δx_2} = -4(x_1 - 2x_2 -1) + 2x_3(x_2x_3 -1) \\
\frac{δz}{δx_3} = 2x_2(x_2x_3 - 1)
그리고,
x_1 = 1\\
x_2 = 2\\
x_3 = 3
대입하면
\frac{δz}{δx_1} = 2\times(1 - 2\times2 - 1) = -8\\
\frac{δz}{δx_2} = -4\times(1 - 2\times2 - 1) + 2\times3(2\times3 - 1) = 46\\
\frac{δz}{δx_3} = 2\times2\times(2\times3 - 1) = 20
되는 것을 확인할 수 있습니다.
미분 계산을 순식간에 할 수있었습니다.
끝에
이번에는 Variable 객체에 대해 썼습니다.
스스로도 쓰고 애매한 부분이 있으므로 지적해 주시면 다행입니다.
다음에는 functions 객체에 대해 씁니다.
참고
신나 히로유키 Chainer에 의한 실천 심층 학습 옴사
Chainer의 소스를 분석. 순전파와 역전파의 구조
htp ///아이 by. 코 m / 찬 r_ 후와 rd_ 바 c 쿠 rd /
신경망이란?
h tp : // 굉장했다. 작은 m/모로크 0519/있어 MS/3188382 아 d85 아 8654 C42
Reference
이 문제에 관하여(Chainer의 기본 오브젝트에 대해 ~Variable편~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hatt0519/items/48d89e5b782e27f740de
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Chainer은 PFI/PFN(주식회사 Preferred Infrastructure/주식회사 Preferred Networks)이 개발하는 심층 학습의 프레임워크입니다.
심층 학습을 구현하는데 필요한 계산을 실시하는 라이브러리를 풍부하게 갖추고 있습니다.
특징을 정리하면,
-Python (2.7 이상)에서 사용할 수 있습니다.
- 모든 신경망의 구조에 대응
- 동적 계산 그래프 구축을 통한 직관적인 코드
-GPU의 강력한 지원
입니다.
특히, Linux 환경하이면(기본 Linux상에서의 동작을 상정하고 있다) pip 한발로 인스톨을 할 수 있습니다.
pip install chainer
기본 객체
Chainer는 신경망을 구현하는 데 필요한 구성 요소를 객체로 제공합니다.
기본적인 것으로
-Variable
-functions
-links
-Chain
-optimazers
있습니다.
이번에는 Variable에 대해 설명합니다.
Variables
Variable은 신경망의 노드에 해당하는 객체입니다. 예는 아래 그림을 가리키는 y2입니다.
사용할 때는
import numpy as np
import chainer
from chainer import Variable
라고 써주세요. numpy도 배열 조작에 필요하기 때문에 chainer를 사용할 때는 기본 import합니다.
예를 들어, 노드 x1, x2, x3은 다음과 같이 선언합니다. (아래에서 대화 모드)
노드의 실체는 배열입니다.
>>> x1 = Variable(np.array([1], dtype=np.float32))
>>> x2 = Variable(np.array([2], dtype=np.float32))
>>> x3 = Variable(np.array([3], dtype=np.float32))
Chainer에서는 실수는 np.float32, 정수는 np.int32에 고정해야합니다.
z = 2(x_1 - 2x_2 -1) + (x_2x_3 - 1) + 1
이 식을 Variable로 나타내면
>>> z = (x1 -2**x2 -1)**2 + (x2*x3 -1) + 1
됩니다. z의 내용은 data라는 속성에서 참조 할 수 있습니다. 수식대로, data는 순서
전파시킨 결과입니다.
>>> z.data
array([42.], dtype=float32)
또한 backward 메소드를 사용하여 역 전파를 계산할 수 있습니다.
>>> z.backward()
신경망에서는 가중치를 업데이트하기 위해 오차 역전파법이라는 기술을 사용합니다. (세세한 설명에 대해서는 링크처를 참조) 그 때, 오차 함수의 기울기가 중요한 파라미터가 됩니다만, backward 메소드를 사용한 노드에 대해서, 그 전의 노드의 grad 라고 하는 속성에 미분값이 세트 됩니다.
>>> x1.grad
array([-8.], dtype=float32)
>>> x2.grad
array([46.], dtype=float32)
>>> x3.grad
array([20.], dtype=float32)
실제로, 각각의 변수로 미분해 보면(Markdown의 math에서 flalign이 효과가 없다···)
\frac{δz}{δx_1} = 2(x_1 - 2x_2 - 1) \\
\frac{δz}{δx_2} = -4(x_1 - 2x_2 -1) + 2x_3(x_2x_3 -1) \\
\frac{δz}{δx_3} = 2x_2(x_2x_3 - 1)
그리고,
x_1 = 1\\
x_2 = 2\\
x_3 = 3
대입하면
\frac{δz}{δx_1} = 2\times(1 - 2\times2 - 1) = -8\\
\frac{δz}{δx_2} = -4\times(1 - 2\times2 - 1) + 2\times3(2\times3 - 1) = 46\\
\frac{δz}{δx_3} = 2\times2\times(2\times3 - 1) = 20
되는 것을 확인할 수 있습니다.
미분 계산을 순식간에 할 수있었습니다.
끝에
이번에는 Variable 객체에 대해 썼습니다.
스스로도 쓰고 애매한 부분이 있으므로 지적해 주시면 다행입니다.
다음에는 functions 객체에 대해 씁니다.
참고
신나 히로유키 Chainer에 의한 실천 심층 학습 옴사
Chainer의 소스를 분석. 순전파와 역전파의 구조
htp ///아이 by. 코 m / 찬 r_ 후와 rd_ 바 c 쿠 rd /
신경망이란?
h tp : // 굉장했다. 작은 m/모로크 0519/있어 MS/3188382 아 d85 아 8654 C42
Reference
이 문제에 관하여(Chainer의 기본 오브젝트에 대해 ~Variable편~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hatt0519/items/48d89e5b782e27f740de
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Variable은 신경망의 노드에 해당하는 객체입니다. 예는 아래 그림을 가리키는 y2입니다.
사용할 때는
import numpy as np
import chainer
from chainer import Variable
라고 써주세요. numpy도 배열 조작에 필요하기 때문에 chainer를 사용할 때는 기본 import합니다.
예를 들어, 노드 x1, x2, x3은 다음과 같이 선언합니다. (아래에서 대화 모드)
노드의 실체는 배열입니다.
>>> x1 = Variable(np.array([1], dtype=np.float32))
>>> x2 = Variable(np.array([2], dtype=np.float32))
>>> x3 = Variable(np.array([3], dtype=np.float32))
Chainer에서는 실수는 np.float32, 정수는 np.int32에 고정해야합니다.
z = 2(x_1 - 2x_2 -1) + (x_2x_3 - 1) + 1
이 식을 Variable로 나타내면
>>> z = (x1 -2**x2 -1)**2 + (x2*x3 -1) + 1
됩니다. z의 내용은 data라는 속성에서 참조 할 수 있습니다. 수식대로, data는 순서
전파시킨 결과입니다.
>>> z.data
array([42.], dtype=float32)
또한 backward 메소드를 사용하여 역 전파를 계산할 수 있습니다.
>>> z.backward()
신경망에서는 가중치를 업데이트하기 위해 오차 역전파법이라는 기술을 사용합니다. (세세한 설명에 대해서는 링크처를 참조) 그 때, 오차 함수의 기울기가 중요한 파라미터가 됩니다만, backward 메소드를 사용한 노드에 대해서, 그 전의 노드의 grad 라고 하는 속성에 미분값이 세트 됩니다.
>>> x1.grad
array([-8.], dtype=float32)
>>> x2.grad
array([46.], dtype=float32)
>>> x3.grad
array([20.], dtype=float32)
실제로, 각각의 변수로 미분해 보면(Markdown의 math에서 flalign이 효과가 없다···)
\frac{δz}{δx_1} = 2(x_1 - 2x_2 - 1) \\
\frac{δz}{δx_2} = -4(x_1 - 2x_2 -1) + 2x_3(x_2x_3 -1) \\
\frac{δz}{δx_3} = 2x_2(x_2x_3 - 1)
그리고,
x_1 = 1\\
x_2 = 2\\
x_3 = 3
대입하면
\frac{δz}{δx_1} = 2\times(1 - 2\times2 - 1) = -8\\
\frac{δz}{δx_2} = -4\times(1 - 2\times2 - 1) + 2\times3(2\times3 - 1) = 46\\
\frac{δz}{δx_3} = 2\times2\times(2\times3 - 1) = 20
되는 것을 확인할 수 있습니다.
미분 계산을 순식간에 할 수있었습니다.
끝에
이번에는 Variable 객체에 대해 썼습니다.
스스로도 쓰고 애매한 부분이 있으므로 지적해 주시면 다행입니다.
다음에는 functions 객체에 대해 씁니다.
참고
신나 히로유키 Chainer에 의한 실천 심층 학습 옴사
Chainer의 소스를 분석. 순전파와 역전파의 구조
htp ///아이 by. 코 m / 찬 r_ 후와 rd_ 바 c 쿠 rd /
신경망이란?
h tp : // 굉장했다. 작은 m/모로크 0519/있어 MS/3188382 아 d85 아 8654 C42
Reference
이 문제에 관하여(Chainer의 기본 오브젝트에 대해 ~Variable편~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hatt0519/items/48d89e5b782e27f740de
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
신나 히로유키 Chainer에 의한 실천 심층 학습 옴사
Chainer의 소스를 분석. 순전파와 역전파의 구조
htp ///아이 by. 코 m / 찬 r_ 후와 rd_ 바 c 쿠 rd /
신경망이란?
h tp : // 굉장했다. 작은 m/모로크 0519/있어 MS/3188382 아 d85 아 8654 C42
Reference
이 문제에 관하여(Chainer의 기본 오브젝트에 대해 ~Variable편~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hatt0519/items/48d89e5b782e27f740de텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)