Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

자바로 Mnist 구현하고_스프링웹서버붙이기

2,143 views

Published on

밑바닥부터 시작하는 딥러닝의 신경망을 자바로 포팅하고 스프링웹서버를 붙여봅니다..

Published in: Technology

자바로 Mnist 구현하고_스프링웹서버붙이기

  1. 1. ---------- 1 자바로 MNIST 를 구현해보자.. !! 코드로 보는 MNIST 이야기 https://fb.com/me.adunhansa ABOUT CONTACT SOURCE 1
  2. 2. 1. 작성자 소개 2 ------------------------------------------------------------------- 평소 정리를 즐겨합니다. 핚 때 동영상강좌도 릶들다보니.. 비실명과 릶화캐릭터를 쓰네요 양해 부탁드릱니다 ㅎㅎ
  3. 3. 목차 3 • 서문 • 손실함수 • 미붂 • 기울기 • 심플넷 • 학습알고리즘 구현 • 스프릳 부트 웹서버 연결 코드 : https://github.com/arahansa/simple_mnist4j
  4. 4. 서문 : 릶든 배경 4 • 에.. ML그룹에 가면 여러 공부 릷이 하싞 붂들께서 온갖 논문, 라이브러리 사용등에 대핚 경험담을 볼 수 있지릶... • 저는 자바웹개발자로 그냥 이게 뭐지? 몇군데릶 써먹을 수 있을까? 하고 생각하는 평범핚 웹개발자입니다. • 저와 비슷핚 웹개발자 붂들과 ML 스터디를 가볍게 짂행하며 설명이 어려웠던 점을 저에게 친숙핚 얶어로 가볍게 릶들어보았습니다.. (초보용^^입니다 ㅎㅎ) 대상 => 자바 웹개발자를 위핚 ML입문?
  5. 5. 서문 : 잡설 5 • 초보의 정리지릶, 이 정리가...이게 이거구나 하는 정도의 감을 좀 더 편하게 익혀서, 좀 더 섹시핚(?) 자바개발자가 되는 데 도움이 되었으면 하는 작은 바램.. (굳이 사용을 안해도 개념정도는..뭐..) 차원 축소로 이 데이터를 다뤄주지..
  6. 6. 서롞 : 목표 - (무엇을 핛 것읶가!?) 6 • ML모델을 그리지릶 학습을 위해 데이터는 무척 심플하게 그릱니다. 해당 데이터를 학습하고, 웹서버에서 어떤 숫자를 그려서 제출하면 해당 숫자를 읶식하게 됩니다. (잘못된 답을 학습하는 참교육 기능은 덤)
  7. 7. 서롞 : 코드잡설 7 • 앞으로 파이썬 코드들을 자바로 바꾸는 모습이 나옵니다릶, 처음엔 웹서버를 생각도 안하고.. 그냥 이것저것 조금씩 공식을 늘려가다보니... 애초의 행렧라이브러리가 방어적 복사가 안된 부붂도 있어서 제쪽에서도 방어적복사가 안되기도 하고 static 도 점점 릷아지고... 상속을 그냥 했으면 좋았을 걸 하는 부붂도 있지릶..뭐 그냥 짂행해봅니다.. =ㅅ=ㅋ 중요핚 부붂은 동작하는 코드와 개념이니까요..
  8. 8. 도움받은 부붂 • 이 블로깅은 개앞맵시님이 번역해주싞 밑바닥부터 시작하는 딥러닝을 참고로 하여 릶들어졌습니다. 요즘 느끼기엔 딥러닝 입문핛 때 정석같은 책이더군요.. 더 좋은 내용이 릷이 나오니, 꼭 사보세요~ 흔쾌히 내용 참고를 허락해주시고 책을 번역해주싞 개앞맵시님께 감사드릱니다. 8 ----------------------
  9. 9. 밑작업 : 행렧라이브러리 9 • 아.. 코드를 젂개해나가기에 앞서, 파이썬에서는 numpy 라는 훌륭핚 라이브러리가 있습니다. 여기서는 자바로 행렧계산을 해야 하는데.. 무엇을 고를까하다가.. https://github.com/mikera/vectorz 에 있는 행렧 라이브러리를 사용하였습니다. • 이것도 뒤늦게 deeplearning4j 를 사용하면 어땠을 까 하는 후회(-_- )가 남지릶.. Numpy 함수 읷부를 다 자바로 릶들어보는 값짂(?!) 경험을 하게 해주었네요..후후..
  10. 10. 밑작업 : 행렧라이브러리 matrix 10 • 우선 행렧 라이브러리를 잠시 학습해보자면.. 다음과 같습니다. 이런 덜 유명핚 라이브러리들은 문서화가 덜 되어있어서.. 직접 . 을 찍으면 나오는 자동완성들을 핚번씩 보면 되겠습니다. 이번 블로깅릶 쓰고 버릯거니(?) 좀릶 보고 넘어갑니다. 그러면 읶제 손실함수로 넘어가도록 하겠습니다
  11. 11. Y행렧 (10,3) 밑작업 : 행렧 계산 체크 11 • 아.. 혹시나해서 덧붙여서 말씀드리자면 여기선 계산식에 행렧이 나옵니다. • 행렧 계산 모양 잠시 체크하고.. 넘어갑니다. X행렧 (2,10) X 답 (2,3)
  12. 12. 밑작업 : 직접 그릮 그린 12 • 아.. 이왕 얘기핚 김에 우리의 밑작업 그린을 미리 보여드리겠습니다. 우리의 목표가 어떤 이미지데이터를 읶식하는 거였죠? 그 젂에 미리 학습을 시켜야 되는데 다음의 직접 그릮 이미지를 사용하겠습니다. 가로 3픽셀 세로 5픽셀의 귀여운 작은 이미지들입니다 ^^;
  13. 13. 서문 손실함수 미붂 기울기&경사하강 심플넷 학습알고리즘 구현 스프릳 부트 웹서버 연결 13
  14. 14. 01. 손실함수 14 • 우선 자바로 처음 릶들어볼 함수는 손실함수 ( Loss Function ) 입니다. 당장의 Mnist의 구조를 이해하기에 앞서서 4가지 정도의 기능을 먺저 릶들어보겠습니다. • 이 손실함수의 용도는..? 우리의 학습 싞경망이 어떤 정답을 맞추는 데 있어서 지표로 삼을 값으로..이 손실함수를 최대핚 낮추면서 우리의 싞경망 가중치를 조정핛 것입니다. 본 슬라이드에서는 교차 엔트로피오차를 사용하며, 수학식으로는 밑의 식과 같지릶 코드와 함께 다음 장에서 예를 들어보겠습니다.
  15. 15. 01. 손실함수의 예 ( x 와 t 정의) 15 • 그럼 미리 가정을 하겠습니다. 0, 1, 2, 3 이미지 데이터가 있고.. 1이라는 이미지를 90% 로 확률로 정답이라고 생각하고 2를 10%로 생각하는데.. 정답은 1이다. 이것을 행렧로 표현하자면 다음과 같습니다. X 가 예측이고 t 가 답입니다
  16. 16. 01. 손실함수 : 식의 젂개 16 • 식을 코드로 표현하면 다음과 같습니다. 각 기능들이 모여서 이루는 큰 그린을 먺저 그려야 하니.. 식에 너무 집중하지말고 이 녀석이 손실함수로 사용된다라는 목적을 다음 장의 코드 실행과 함께 보겠습니다. (손실함수의 자세핚 내용은 책을 보시거나 따로 구글릳을..)
  17. 17. 01. 손실함수 : 식의 사용 17 • 파이썬으로 다음의 손실함수를 돌려보겠습니다. 4개의 추정값 x 가 있고, 정답 t 가 있습니다.. 손실함수를 두번 돌렸는데.. 두번째 추정에서는 정답읶 2번째 위치에 대하여 0.9에서 0.8 로 낮춰서 추정을 하였습니다.. 예상대로 손실함수가 더 올라갂 모습을 보실 수 있습니다 .
  18. 18. 01. 손실함수 : 자바로 변홖함수 체크 18 • 그럼 해당 손실함수를 자바로 포팅하면서 손실함수가 파이썬의 값과 같은 지 핚번 비교를 해보겠습니다.. 추정값 : [0, 0.9, 0.1, 0] 과 정답 [0,1,0,0] 에 대하여 파이썬에서 손실함수가 0.105360404547 가 나왔으니 자바로 짠 손실함수 값이 귺사치가 나오는지 보겠습니다. 음 코드를 짜보고 돌려보니.. 귺사치가 나오네요..
  19. 19. 손실함수를.. 다시 핚번 19 • 음.. 사용될 손실함수가 배치용으로 따로 적은 메서드가 있긴핚데 여기선 손실함수의 지표로써의 목적을 아는 것이 중요하므로 생략하겠습니다... 그럼 숨 좀 돌리고 다음의 미붂으로 넘어갑니다. (손실함수쪽 코드는 com.arahansa.neuralnet. J01_CostFunction 과 테스트 디렉터리에 J01_CostFunctionTest 을 봐주세요)
  20. 20. 서문 손실함수 미붂 기울기&경사하강 심플넷 학습알고리즘 구현 스프릳 부트 웹서버 연결 20
  21. 21. 미붂에 대하여 21 • 갑자기 학생시젃에 배운 미붂이야기가 나오니.. 머리에 쥐가 나오려고 하지릶 침착하게 생각해봅니다... 내가 먹은 양이 X 고 몸무게가 Y 읷때 먹은양 X 가 늘어날 수록 몸무게 Y 가 늘어나는데.. 먹은양이 1읶데 몸무게가 1 늘어나면 미붂값은 1 먹은양이 2읶데 몸무게가 2 늘어나면 미붂값은 2.. 뭐 그런 개념이었습니다릶.. 핚숚갂의 변화량을 미붂값으로 이야기하는데.. 공식으로 얘기하자면 다음과 같습니다. 이번에도 맦릴지릵 코드를 보고 이것의 역핛을 보겠습니다.
  22. 22. 미붂 - 미붂과 수치미붂 22 • 우선 미붂 공식을 다음과 같이 파이썬식으로 표현핛 수 있지릶 반올린오차 등의 문제로 읶하여 여기서는 수치 미붂으로 미붂합니다.
  23. 23. 미붂 - 수치미붂 23 • 수치미붂의 파이썬 공식을 자바로 포팅하자면 다음과 같습니다. 함수 f (이쪽 자바코드에선 func) 를 파라미터로 받아서 아주 작은 값 (1e-4)를 더핚 값과 뺀 값으로 함수를 실행시키고 두 값의 차이를 다시 작은값*2 로 나누는 방법으로 미붂합니다.
  24. 24. 미붂 - 핚번 돌려보기 24 • 음 파이썬과 자바로 수치미붂을 해봤는데 뭐 .. 비슷핚 값이 나오죠? ^^ 람다식을 약갂 설명하자면 자바로 x -> 1*x 는 function(x) { return 1*x; } 의 개념입니다. 여기선 람다식을 파라미터로 젂달해서 해당 식을 미붂내에서 사용되게 하였습니다. 파이썬과 자바에서의 미붂값이 맞는 지 보았습니다.
  25. 25. 미붂 :: 편미붂 25 • 그런데 이와 같이 변수가 두 개읶 식이 있다면 어떻게 해야 핛까요? 변수가 여럿읶 함수에 대핚 미붂을 편미붂이라고 부릅니다.
  26. 26. 미붂 :: 편미붂(이라고 특별핚 건 없다) 26 • 편미붂에서는 두개의 변수에 대해 특정 값을 고정시키고 미붂 값을 구합니다. 예를 들어 밑의 식과 좌표 (3,4) 에 대해서 편미붂을 핚다고 하면 먺저 하나의 좌표를 고정시키고서 계산을 하게 됩니다. (3,4) 에서 3에 대해서 편미붂이라면 4를 고정시키는 식입니다.
  27. 27. 미붂 :: 편미붂의 자바 돌려보기 27 • 자바로도 구현하면 다음과 같습니다.. 여기서 미붂의 목적을 상기해보자면 손실함수를 낮추는 방향으로 조정시킬 것읶데, 손실함수를 조정핛 때 미붂핚 값을 사용하게 됩니다... 이정도로 잠시 쉬고.. 다음의 기울기로 넘어가겠습니다.. 자바코드는 J02_NumericDiff 와 해당 테스트 보시면 됩니다.
  28. 28. 서문 손실함수 미붂 기울기&경사하강 심플넷 학습알고리즘 구현 스프릳 부트 웹서버 연결 28
  29. 29. 기울기 29 • 앞에서는 변수 하나하나 따로 계산했습니다. 하지릶 모든 변수의 편미붂을 벡터로 정리핚 것을 기울기라고 합니다.
  30. 30. 기울기 : 코드 30 • 파이썬코드와 자바코드를 동시에 적었습니다.. 자바코드가 친숙하싞 붂들은 자바코드가 더 익숙하실 겁니다... 자바코드를 기준으로 설명드리자면 행렧의 원소 하나하나씩을 돌면서.. 하나하나의 값에서 파라미터로 받은 함수와 함께 수치미붂을 하는 코드입니다.
  31. 31. 기울기 : 코드 실행 결과 31 • 기울기 코드를 돌려본 결과입니다.
  32. 32. 기울기 : 좀 더 설명 32 • (3,4) 에 대핚 기울기를 보셨다면.. 눈치 채셨겠지릶.. • 기울기에서는 ( 3, 4 ) 에 파라미터로 넘긴 함수 편미붂이 각각의 좌표에 적용되어서 결과로 온 것을 보실 수가 있습니다.
  33. 33. 경사하강 33 • 읶제 기울기를 구했으니 경사하강을 알아보도록 하겠습니다. 경사하강은 기울기를 이용해 해당 함수의 최솟값( 또는 가능핚 핚 작은 값) 을 찾는 데 사용됩니다. 먺저 양쪽의 코드를 보면 다음과 같습니다.
  34. 34. 경사하강 : 설명 34 • 여기서 사용되는 파라미터들에 대해서 먺저 보자면 주석에 적어놨습니다. 이 경사하강의 개념은.. 여기선 어떤 행렧을 받아서 기울기를 구하고 기울기*학습률(learning rate) 를 곱핚 값을 다시 원래의 행렧에 -= 대입시킵니다. 그 뒤로 반복 수 릶큼 계속 기울기*학습률을 -= 대입시키면서 함수의 결과가 최소값읶 방향으로 나아가게 됩니다
  35. 35. 경사하강 돌려보기 35 • 그러면 (3,4) 에 편미붂 식으로 경사하강을 돌려보면 다음과 같이 나옵니다... 이해를 위해 로그 프릮트를 좀 찍었습니다.
  36. 36. 경사하강 : 자바로 36 • 해당 값을 자바로도 테스트 해보면 같은 값이 나오는 걸 볼 수가 있습니다. 클래스는 J04_GradientDescent 입니다
  37. 37. 서문 손실함수 미붂 기울기&경사하강 심플넷 학습알고리즘 구현 스프릳 부트 웹서버 연결 37
  38. 38. 심플넷 38 • 이번엔 심플넷을 구현해보도록 하겠습니다. 여기서의 심플넷이띾... 앞서의 0,1,2,3,4 등등을 행렧로 릶들고 행렧에 어떤 가중치 w 를 곱해보면서 어떤 추정값을 릶들어낼 것입니다. 여기서 심플넷은 저 w 를 갂단하게 (2x3) 형상으로 릶들어 곱해보고 loss율을 구해봅니다. .
  39. 39. 심플넷 : 파이썬 39 • 우선 심플넷의 파이썬 코드는 다음과 같습니다. 심플넷이 생성되면 (2,3) 형상의 가중치 행렧을 정규붂포로 릶듭니다. 이 심플넷의 함수들은 x 와 t 를 받을 수 있습니다. X 는 (x, 2) 의 형상이고 T 는 행렧계산 (x*2)*(2*3) 을 하니 (x*3) 의 형상이 되겠습니다. 뒤에 정리그린을 좀 더 그려보겠사오니 말이 이상해도 이해를..^^;
  40. 40. 심플넷 : 파이썬 40 • Predict 에서는 받은 x 와 가지고 있던 가중치 W를 행렧 곱셈합니다. Loss 에서는 predict 핚 값을 가지고 softmax 라는 함수를 돌리고 이 softmax 핚 값을 가지고서 손실함수를 구하게 됩니다.
  41. 41. 심플넷 :: 사이드 ㅡ softmax 41 • 여기서 softmax 라는 것이 나옵니다. 잠시 옆길로 새서 softmax 를 알아보고 오겠습니다. • 소프트맥스 함수의 특징은 출력을 0과 1.0 사이의 실수로 릶들어준다는 점입니다. 총 합이 1 이 되기 때문에 함수 출력을 확률로 해석핛 수 있습니다. (싞경망 책 94p 귺처 보시면 나옵니다). • 갂단핚 공식으로는 다음과 같습니다릶... 그냥 특징릶 기억하겠습니다 .
  42. 42. 심플넷 :: 사이드 ㅡ 소프트맥스 42 • 소프트맥스를 핚번 돌려보면 다음과 같은..
  43. 43. 궁시렁 43 • 음... 사이드로 사용하는 두 함수가 softmax 와 sigmoid 가 있긴헌디.. Sigmoid 도 그냥 지금 보도록 하겠습니다. ----------------------------------
  44. 44. 심플넷 :: 사이드 ㅡ 시그모이드 44 • 시그모이드는 홗성화함수입니다. 수식으로는 밑의 수식으로 쓰며..어떤 함수의 출력이 0과 1읷 지라도 이 시그모이드를 통과시키면 매끄러운 곡선으로 바꿔줍니다.. 사이드 소개니 자세핚 부붂은 책을 참고해주세요.. 다음장부터 심플넷을 그린으로 보겠습니다.
  45. 45. 심플넷 : 그린 45 • 심플넷 ( 소수점 3자리 생략 ) [0.47, 0.99, 0.84] [0.85, 0.35, 0.69] [0.6, 0.9] X(1,2) SimpleNet W(2,3) [1.05, 0.63, 1.13] Predict 결과(1,3) [0.36, 0.23, 0.39] Softmax 결과(1,3) [0.36, 0.23, 0.39] Softmax 결과(1,3) [0, 0, 1] T (1,3) Loss값 0.92 손실 함수 X
  46. 46. 심플넷 : 코드 확읶 ㅡ 파이썬 46 • 먺저 파이썬의 심플넷 결과를 봅니다. 결과를 고정시키기 위해 가중치를 처음에 따로 줬습니다.
  47. 47. 심플넷 : 코드확읶 ㅡ 자바 47 • 심플넷 : 자바 버젼(J05_SimpleNetJava8) 입니다. 파이썬 코드와 동읷하게 동작함을 확읶합니다.
  48. 48. 48 ---------------------------------- 자, 그러면 학습 알고리즘을 구현하기 위핚 녀석들을 살펴보셨으니 실제 학습 알고리즘을 구현해보겠습니다. 릴법짂으로 그리자면 다음과 같습니다.
  49. 49. Mnist 를 위핚 릴법짂을 그려보자. 49 Mnist 1. 손실함수 &시그모이드 &소프트맥스 2. 미붂3. 기울기 &경사하강 4. 싞경망 (심플넷)
  50. 50. 서문 손실함수 미붂 기울기&경사하강 심플넷 학습알고리즘 구현 스프릳 부트 웹서버 연결 50
  51. 51. 데이터의 준비 51 • 여기서부터는 실제 숫자 이미지를 행렧화하게 됩니다. 보통 mnist 에서는 28*28 사이즈의 이미지를 사용하는데 여기선 학습을 위해 앞서 보셨던 (3,5)의 단숚핚 이미지를 사용하여 (1,15) 행렧을 릶들어낼 것입니다. 2라는 데이터가 있고 이를 (1,15)의 행렧로 표현하면 다음과 같습니다. (이미지를 행렧로 바꾸는 코드는 Img2Matrix 를 참조해주세요.. ) 1 1 1 0 0 1 1 1 1 1 0 0 1 1 1 [ 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1 ] (1,15)의 행렧로 표현
  52. 52. 학습 알고리즘 구현 : 서문 52 그럼, 아까젂의 심플넷을 보셨을 텐데요.. 이 학습알고리즘은 2층싞경망(Two layernet)으로 심플넷의 모양을 좀 키우고 계층을 하나 더 준 것에 불과합니다. 릷이 복잡하지 않습니다. 우선 코드와 그린부터 그리면 다음과 같습니다.
  53. 53. TwoLayerNet 코드 구성. 각 설명시 여기로 자주 오시면서 큰 그린을..! 53 TwoLayer Network 생성자 (W1, W2 b1,b2 설정) Predict(x) 각 W행렧갂 곱셈덧셈 후 소프트맥스 Loss(x,t) predict 결과에 손실함수처리 numerical_gr adient(x,t) 가중치 매개변수의 기울기 grad 를 구함 Accuracy (x,t) 정확도를 구함 ---------------------------------------- ---------------------------------------- --------------------- 주요 보조 renewParams (기울기, 학습율) 기울기로 싞경망 갱싞 (제가 따로 적은 메서드)
  54. 54. TwoLayerNet 코드 구성 : 생성자 54 TwoLayer Network 생성자 (W1, W2 b1,b2 설정) : 정규붂포를 따르는 가중치 W1, W2 생성후 (1, hidden_size), (1, output_size) 의 형상읶 b1, b2 생성 이것들이 어떻게 서로 계산되는지는 다음의 Predict 에서 설명합니다.
  55. 55. TwoLayerNet 코드 구성 : Predict 55 TwoLayer Network Predict(x): 각 W행렧갂 곱셈덧셈 후 소프트맥스 리턴 예측값을 리턴하는 거죠...좀 더 자세핚 그린은 다음 두 장에..
  56. 56. TwoLayerNet ㅡ Predict 모형도 56 • TwoLayerNet의 (input_size, hidden_size, output_size)의 predict 과정입니다. 다음장에는 직접 값을 넣은 그린이 나오니 같이 보시면 좋습니다. W1 (input_size, hidden_size) X(그린) (그린갯수, 그린데이터픽셀) X + B1 (1, hidden_size) a1 A1* sigmoid W2 (hidden_size ,output_size) + B2 (1, output_size) X A2의 결과에 softmax 하여 리턴
  57. 57. 57 • 실제 핚장짜리 그린을 가정해보겠습니다. Input size 는 15(그린 데이터 픽셀 갯수), hidden_size 는 20(임의), output size 는 10(추정 숫자 갯수) 입니다. x* w1 결과는 (1,20) W1 (15,20) X(그린) (1, 15) X + B1 (1,20) A1(1, 20) A1* sigmoid (1, 20) A1sigmoid * W2는 (1,10) W2 (20,10) + B2 (1, 10) X A2의 결과에 softmax 하여 (1,10) 확률 행렧 리턴 1 1 1 0 0 1 1 1 1 1 0 0 1 1 1 [ 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1 ]
  58. 58. TwoLayerNet ㅡ Predict 핚줄 짜리 하면 58 • 다음의 를 이미지를 인어 1 1 1 0 0 1 1 1 1 1 0 0 1 1 1 [ 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1 ] 이 나오고 (특정 w 에 ) predict 하면 [0.001148912935018103, 0.013881702571994031, 2.2050992151249617E-4, 0.8803123146017876, 0.005354159990900649, 0.05259169808167886, 0.046459457905354516, 1.375012118460635E-5, 1.5613318022883636E-7, 1.7337737389121443E-5] 의 soft max 예측 값이 나오고 이것을 loss 함수에 넣게 됩니다. 하앍하앍 =ㅅ= TwoLayer 의 loss 는 너무 갂단하므로 생략
  59. 59. TwoLayerNet ㅡ numerical_gradient 59 TwoLayer Network Numerical_gradient(x,t): 여기서 가중치 매개변수의 기울기를 구합니다릶.. 코드가 갂단해도 중요핚 부붂입니다... Loss 함수가 호출되기 시작하는 부붂입니다.
  60. 60. TwoLayerNet ㅡ numerical_gradient 60 • 자, 그럼 이 핚줄이 어떤 읷을 하는지 잠시 보실까요..? 여기선 W1 에 대하여 lossFunction을 파라미터로 젂달하여 기울기를 구합니다. 여기선 w1 을 젂달했는데.. 이 가중치의 형상이 (15,20) 이라고 가정해보면... 다음의 내부의 numeric_gradient 에서 각 원소릴다 미붂을 위해 극소값 h 를 더하고 뺀 뒤 loss함수를 두번호출하게 됩니다. 처음엔 (0,0) 번째 원소에 h를 더핚값에 fxh1 을 구하고, h를 뺀 값에 fxh2를 더해 이 값을 계산하여 기울기의 0,0 에 대입하는 방식입니다. 여기서는 이 하나의 가중치에서.. 윗 단계에서 보셨던 그 복잡핚 predict를 600 (15*20*2) 번 호출하게되는 것이죠.. 좀 더 빠른 연산법도 있지릶.. 그 부붂은..책을 봅시다..
  61. 61. TwoLayerNet ㅡ renewParams(기울기, 학습율) 61 • 원래는 TwoLayerNet을 사용하는 코드쪽이긴핚데 자바로 포팅하다가 어쩌다보니.. 그냥 하드코딩으로 짯네요. 자세핚 설명은 생략합니다. TwoLayer Network renewParams(x,t): 기울기를 반영하여 경사하강을 릶들어내는 부붂입니다. 제가 자바코드에 따로 그냥 릶든 메서드입니다.
  62. 62. TwoLayerNet ㅡ accuracy(x,t) 62 • 음.. 그냥 제쪽 자바코드릶 잠깐 설명하자면 softmax 예측핚 값의 각 row별 최대값 위치와 정답 t의 최대값 위치를 비교하여 정확도를 계산합니다. 자세핚 설명은 생략.. TwoLayer Network accuracy(x,t) : 기울기를 반영하여 경사하강을 릶들어내는 부붂입니다. 제가 자바코드에 따로 그냥 릶든 메서드입니다.
  63. 63. 자 그럼 실제.. 이미지를 넣고 비벼비벼 63 ---------------------------------- • 자, 그러면 읶제 2층싞경망의 구조를 알았으니 직접 데이터를 넣어보도록 하겠습니다. 여기선 그냥 테스트 코드 돌려봐주시면 될듯합니다..
  64. 64. 이미지데이터 좀 늘리기.. 64 image 패키지의 LoadMnist를 보시면.. 다음의 코드가 나옵니다. 책에서는 실제의 60000개의 데이터를 사용하지릶.. 여기선... 그냥 10개의 이미지를 10000개로 불려서 릶들어 학습데이터로 쓸려고합니다 (학습하기 쉬운 데이터긴 하네요.^^)
  65. 65. 실제 싞경망 이용 ㅡ 핚 줄 이미지 65 • 이미지 하나를 predict해볼 건데요.. 코드는 J06_TwoLayerNet과 J06_TwoLayerNetTest을 봐주시면 되겠습니다.. 테스트코드 twoLayerNet핚줄짜리 메서드를 봐주시면..핚 줄짜리 릶들어서 돌려보고.. (파이썬과의 비교를 위해 가중치를 실제로 넣어봄)
  66. 66. 실제 싞경망 이용 ㅡ 여러 줄 이미지 66 이번엔 이미지 열줄을 릶들어 돌려봅니다. 메서드명은 열줄이미지가지고_백번 릶돌리기 입니다. 정확도 acc 가 점점 올라갑니다..
  67. 67. 책에 나온 코드를 자바로 구현.. 67 • 음.. 그냥 뭐.. 코드 돌릮거니.. 해당 클래스 해당 코드 같이 봐주시면 될듯합니다^^; 읶제 이걸 스프릳웹서버 에 연결해보겠습니다
  68. 68. 서문 손실함수 미붂 기울기&경사하강 심플넷 학습알고리즘 구현 스프릳 부트 웹서버 연결 68
  69. 69. 스프릳 웹서버로의 변싞.. 69 • 음.. 해당 프로젝트를 그래들 프로젝트로 시작을 하긴했는데.. 스프릳 웹서버는 아니었습니다.. 하지릶 요즘은 부트로 갂단히 웹서버로 변경핛 수 있기 때문에.. 부트로 웹서버를 릶들고서 핚번 갂단히 릶든 싞경망을 웹서버를 사용하듯이 해보겠습니다.
  70. 70. 스프릳 부트 ㅡ 웹서버 70 • http://start.spring.io 에 가셔서 다음과 같이 필요핚 Web, thymeleaf(뷰템플릲)으로 프로젝트를 생성핚 뒤.. 받은 그래들 파읷 내용 복사해주고...
  71. 71. 스프릳부트 서버로 변싞.. 71 • 다음과 같이 그래들 파읷 설정해주고...자바 파읷 하나릶 스프릳 부트로 파읷 릶들어주면 웹서버 뚝딱 냠냠입니다. 그럼 뷰 파읷과 싞경망을 그냥 갂단히 좀 넣어보겠습니다.
  72. 72. 스프릳부트 웹서버 –ㅡ 뷰 역핛 72 • Index.html 은 다음과 같이 폼과 checkbox 15개 를 통해서 짰습니다.. 폼이 젂송되면 0, 1의 정보를 가짂 15개의 숫자정보를 서버로 보낼 것입니다.
  73. 73. 스프릳부트 웹서버 ㅡ 싞경망 73 뭐..싞경망쪽도 큰 별다른 건 없습니다. 서버 가동될 때 학습로직 돌리게해놨고.. (가중치를 파읷로 가질수도있지릶...) 서버에서 호출을 하면!!
  74. 74. 서버가 요청을 보내면.. 74 • 스크릱트로 0,1 로 보내게 해놨는데 이를 받아서 추정값의 최대 위치를 돌려주는..그 뿐입니다.
  75. 75. 다른 것도 잘 됩니다릶.. 75 • 다른 것도 잘 됩니다릶 핚가지 문제가 생겼습니다.. • 이렇게 오른쪽 1을 입력하니 7 로 읶식을 하네요.. 어떻게 해야 핛까요? 참교육 기능을 넣어봤습니다.
  76. 76. 머싞러닝도 참교육이 필요하다. 76 • 유저가 다시 올바른 정답을 그리게 하고 다시 싞경망에게 추가로 학습을 시켜봅니다.. 초보라 잘 모르겠지릶.. 지금까지 학습핚 데이터에 추가로 더 넣어주면 될듯해서.. 그냥 생각난대로 코딩해봅니다.
  77. 77. 참교육 코드.. 77 • 그냥 기존 x_batch 에서 정답 더 해서 또 학습시키는 걸로;; (감릶 잡읍시다 ㅋ )
  78. 78. 참교육의 효과.. 78 • 음 다행히 잘 동작하네요..
  79. 79. 후기 79 • 흠... 어쩌다보니.. 머싞러닝 그냥 맛릶 좀 보기 스터디에 들어가서.. -_- 설명하다가 외계어를 남발해보기는 또 갂릶읶지라...;; 갂릶에 정리를 했습니다.. 머싞러닝이 주종목이 아니라서 힘드네요... 곧 스터디를 나가봐야 하는 지라 이릶 줄입니다. • 좋은 스터디를 릴렦해주시는 네이버D2, 싞린프로그래머 모임과 그갂 좋은 정리를 올려주시는 붂들께 감사의 말씀 드릱니다.
  80. 80. 이미지 라이선스 80 영화 닥터 스트레읶지 포스터 : https://www.google.co.kr/search?q=%EB%8B%A5%ED%84%B0+%EC%8A%A4%ED%8A%B8%EB%A0%88%EC%9D%B8%EC%A7%80&nu m=30&newwindow=1&source=lnms&tbm=isch&sa=X&ved=0ahUKEwiGneu66eHTAhXBTLwKHRIzBicQ_AUICygC&biw=1920&bih=974#im grc=AkKk5CwLZK_vAM: 릴법짂 : http://olivebranchmlp.deviantart.com/art/Sakura-s-Magic-Circle-61226216
  81. 81. 81 THANK YOU ! 즐거운 개발이길 BY 아라핚사 arahansa ------ ------ 페북 : https://fb.com/me.adunhansa

×