성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
[정성태] 저렇게 조각 코드 말고, 실제로 재현이 되는 예제 프로젝트를 압...
[정성태] Modules 창(Ctrl+Shift+U)을 띄워서, 해당 Op...
[정성태] 만드실 수 있습니다. 단지, Unity 엔진 내의 스크립트와 W...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>활성화 함수에 따른 뉴런의 출력을 그리드 맵으로 시각화</h1> <p> 다음의 책에 보면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 실체가 손에 잡히는 딥러닝 ; <a target='tab' href='http://www.yes24.com/Product/Goods/74258238'>http://www.yes24.com/Product/Goods/74258238</a> </pre> <br /> 뉴런의 가중치와 편향에 대한 시각화를 한 내용이 나옵니다. 그중에서 활성 함수가 sigmoid인 파이썬 소스 코드(\DeepLearning_Examples.zip\Chapter4\4-6_single_neuron.ipynb)가 공개되어 있는데요.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > [예제 파일] 실체가 손에 잡히는 딥러닝, 기초부터 실전 프로그래밍 ; <a target='tab' href='https://www.onlybook.co.kr/entry/deeplearingexamples?category=738122'>https://www.onlybook.co.kr/entry/deeplearingexamples?category=738122</a> </pre> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > import numpy as np import matplotlib.pyplot as plt X = np.arange(-1.0, 1.0, 0.2) Y = np.arange(-1.0, 1.0, 0.2) Z = np.zeros((10, 10)) w_x = 2.5 w_y = 3.0 bias = 0.1 for i in range(10): for j in range(10): u = X[i] * w_x + Y[j] * w_y + bias y = 1 / (1 + np.exp(-u)) Z[j][i ] = y plt.imshow(Z, "gray", vmin = 0.0, vmax = 1.0) plt.colorbar(); plt.show(); </pre> <br /> 실은 이걸 C#으로도 해보려고 지난번 글을 쓴 것입니다. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C# - PLplot의 16색 이상을 표현하는 방법과 subpage를 이용한 그리드 맵 표현 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/11960'>http://www.sysnet.pe.kr/2/0/11960</a> </pre> <br /> 게다가 sigmoid 활성 함수는 전에도 한번 소개한 적이 있는데,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C# - 로지스틱 회귀를 이용한 분류 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/11955'>http://www.sysnet.pe.kr/2/0/11955</a> </pre> <br /> 따라서 입력 값 x0와 x1을 받는 뉴런이 있다고 할 때,<br /> <br /> <img alt='perceptron_1.png' src='/SysWebRes/bbs/basic_neuron_1.png' /><br /> <br /> 각각의 출력값을 그리드 맵으로 출력하는 C# 코드를 다음과 같이 작성할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > using System; using System.Linq; class Program { static void Main(string[] args) { var X0 = Utils.ARange(-1.0, 1.0, 0.1).ToArray(); var X1 = Utils.ARange(-1.0, 1.0, 0.1).ToArray(); double[,] Y = new double[10, 10]; double w0 = 1.0; // 가중치를 모두 1.0으로 고정 (물론 임의로 설정해서 테스트 가능) double w1 = 1.0; double bias = 0.1; // 편향을 0.1로 고정 (물론 임의로 설정해서 테스트 가능) for (int i = 0; i < 10; i ++) { for (int j = 0; j < 10; j ++) { double u = X0[i] * w0 + X1[j] * w1 + bias; double y = 1 / (1 + Math.Exp(-u)); Y[j, i] = y; } } Gridmap grid = new Gridmap(); grid.Show(Y); } } </pre> <br /> <img alt='sigmoid.png' src='/SysWebRes/bbs/sigmoid.png' /><br /> <br /> (<a target='tab' href='https://www.sysnet.pe.kr/bbs/DownloadAttachment.aspx?fid=1478&boardid=331301885'>첨부 파일은 이 글의 예제 코드를 포함</a>합니다.)<br /> <br /> <hr style='width: 50%' /><br /> <br /> 책에서는 나오지 않지만, 기왕 해보는 김에 위의 소스 코드에서 활성화 함수만 바꿔가며 그리드 맵 출력을 할 수 있습니다. 다음은 각각의 결과입니다. (가중치와 편향을 바꿔가면서 테스트하면 더 재미있을 것입니다. ^^)<br /> <br /> [계단 함수] == (x) => (x <= 0) ? 0 : 1<br /> <img alt='stepfunction.png' src='/SysWebRes/bbs/stepfunction.png' /><br /> <br /> [tanh] == (x) => Math.Tanh(x)<br /> <img alt='tanh.png' src='/SysWebRes/bbs/tanh.png' /><br /> <br /> [ReLU] == (x) => (x <= 0) ? 0 : x<br /> <img alt='tanh.png' src='/SysWebRes/bbs/relu.png' /><br /> <br /> [Leaky ReLU] == (x) => (x <= 0) ? 0.01 * x : x<br /> <img alt='tanh.png' src='/SysWebRes/bbs/leaky_relu.png' /><br /> <br /> [항등 함수] == (x) => x<br /> <img alt='tanh.png' src='/SysWebRes/bbs/identity.png' /><br /> <a name='softmax'></a> <br /> [소프트맥스 함수] == (x) => Math.Exp(x) / sumOfAllExp<br /> <img alt='tanh.png' src='/SysWebRes/bbs/softmax.png' /><br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
2509
(왼쪽의 숫자를 입력해야 합니다.)