달력

09

« 2018/09 »

  •  
  •  
  •  
  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  
  •  
  •  
  •  
  •  
  •  

케라스 Keras 모델 저장, 재사용 


원본 : https://tykimos.github.io/2017/06/10/Model_Save_Load/ 에 있는 강좌를 정리했습니다.

위 링크는 김태영님의 케라스 강의 사이트입니다.


딥러닝 Deep Learning 케라스 Keras 에서 아래와 같은 방법으로 모델을 재사용할 수 있습니다.


load_model 로 위 스크린샷처럼 모델을 저장하도록 지정하고, 처음 실행하면

처음부터 loss 로스 1.15 에서 시작. 최종 acc 정확도는 0.906 (90.6%)

90.6% 로 학습된 결과가 mnist_mlp_model.h5 라는 파일로 저장됩니다.


모델 구조 확인하기. 뭐 이건 그냥 참고용으로 보여주기에요.


load_model 로 아까 저장했던 mnist_mlp_model.h5 모델파일을 불러와서 학습하고 평가후 저장합니다.

이렇게 실행하면 처음부터 loss 로스 0.32 에서 시작. 최종 acc 정확도는 0.92 (92%) 가 됩니다.


위 스크린샷에서 In [3] 이 셀만 계속 실행해보면 정확도가 계속 올라가는걸 볼 수 있습니다.

모델을 재사용한다는 이야기입니다. 이제 저 모델 파일만 있다면 colab (https://colab.research.google.com/) 등 어디에서나 학습된 모델을 다시 사용할 수 있습니다.


이렇게 만들어진 모델을 다른곳에서 재사용 하려면 소스가 있는 곳과 동일한 폴더에 복사해둔 다음,

아래와 같이 불러와서 사용하면 됩니다.


소스는 아래 첨부파일을 참조하여 주세요 ~


모델 저장 소스코드 : 주피터 노트북 Jupyter Notebook

Model.Save.ipynb


모델 재사용 소스코드 : 주피터 노트북 Jupyter Notebook

Model.ReUse.ipynb


Posted by 멋지다마라송

[정리] 모두를 위한 딥러닝 10 - ReLU & 초기값 정하기   by 김성훈 


강의 웹사이트 : http://hunkim.github.io/ml/

Lec = 강의 / Lab = 실습


시그모이드 결과값은 0<f(x)<1 이기 때문에 이를 체인룰에 따라 계속 곱하다보면 (레이어가 많으면) 

0.01 * 0.03 * 0.2 와 같은 형태가 되기 때문에 결국 한없이 0 에 가까워지게 됩니다. 

즉, 입력값 X 가 결과값 f(x), Y 에 미치는 영향이 거의 없게 됩니다.  

따라서, 학습을 깊게 여러번 하면 할수록 에러가 커지는 현상이 일어납니다. 이건 오버피팅 Over Fitting 과 다릅니다.


이를 극복하기 위한 함수가 렐루 ReLU 입니다. (위 그림에서 검정색이 시그모이드 sigmoid, 자주색이 렐루 ReLU 함수)

렐루는 0 이하는 0 으로, 그 이상값은 자기 자신의 값을 갖는 함수입니다.


이 두가지 함수를 비교하기 위해 텐서보드 tensorboard 를 이용해보겠습니다.

텐서보드로 분석할 수 있도록 로그를 남긴 다음, 텐서보드를 띄워서 웹브라우저로 확인하면 됩니다.

생각보다 메모리나 CPU 를 많이 사용하는, 좀 무거운 라이브러리입니다.

(텐서보드 이미지 추가)


정확도 비교.

1번 방법 = 시그모이드를 사용하여 레이어 3개 ~ 10개 사용하기.

# weights & bias for nn layers
with tf.name_scope("L1") as scope:
W1 = tf.Variable(tf.random_normal([784, 256]))
b1 = tf.Variable(tf.random_normal([256]))
L1 = tf.sigmoid(tf.matmul(X, W1) + b1)
w1_hist = tf.summary.histogram("weights1", W1)
b1_hist = tf.summary.histogram("biases1", b1)
layer1_hist = tf.summary.histogram("L1", L1)

with tf.name_scope("L2") as scope:
W2 = tf.Variable(tf.random_normal([256, 256]))
b2 = tf.Variable(tf.random_normal([256]))
L2 = tf.sigmoid(tf.matmul(L1, W2) + b2)
w2_hist = tf.summary.histogram("weights2", W2)
b2_hist = tf.summary.histogram("biases2", b2)
layer2_hist = tf.summary.histogram("L2", L2)

이런 형태로 레이어를 3개, 10개 만듭니다.


2번 방법 = 렐루 relu 를 사용하여 레이어 3개 ~ 10개 사용하기.

# weights & bias for nn layers
with tf.name_scope("L1") as scope:
W1 = tf.Variable(tf.random_normal([784, 256]))
b1 = tf.Variable(tf.random_normal([256]))
L1 = tf.nn.relu(tf.matmul(X, W1) + b1)
w1_hist = tf.summary.histogram("weights1", W1)
b1_hist = tf.summary.histogram("biases1", b1)
layer1_hist = tf.summary.histogram("L1", L1)

with tf.name_scope("L2") as scope:
W2 = tf.Variable(tf.random_normal([256, 256]))
b2 = tf.Variable(tf.random_normal([256]))
L2 = tf.nn.relu(tf.matmul(L1, W2) + b2)
w2_hist = tf.summary.histogram("weights2", W2)
b2_hist = tf.summary.histogram("biases2", b2)
layer2_hist = tf.summary.histogram("L2", L2)

이런 형태로 레이어를 3개, 10개 만듭니다.

두 소스에서 sigmoid / relu 이 부분만 다릅니다.


4개의 소스를 비교해보면 

 

 Sigmoid 3 Layer

 ReLU 3 Layer

 Sigmoid 10 Layer

 ReLU 10 Layer

 정확도

 94.21 %

 95.87 %

 94.31 %

 93.00 %


엠니스트 MNIST 는 위 4가지 중에서 렐루 3 레이어로 만들때 가장 좋은 결과가 나왔습니다.

즉, 너무 많은 레이어는 결과가 더 나빠지기도 합니다.


그리고, 초기값 잘 설정하는게 중요합니다.

(정리중)

RBM : Restricted Boatman (Boltzman) Machine

자비어 : xavier

MSRA



Posted by 멋지다마라송

[정리] 모두를 위한 딥러닝 09 - XOR 풀기  by 김성훈 


강의 웹사이트 : http://hunkim.github.io/ml/

Lec = 강의 / Lab = 실습


XOR 게이트는 입력값 두개를 받아서, 두개가 다르면 (1,0) 또는 (0,1) 이런 형태이면 1 참값을 리턴하는 함수입니다.


XOR 게이트는 한개의 선형 리니어 함수로는 풀 수 없고, 여러개를 이용하면 풀 수 있습니다.


이렇게 3개로 연결해서 만들면 됩니다.


여기에서는 w1, b1 값이 주어졌는데, 이 값 말고도 다른 값도 찾을 수 있습니다.

이 슬라이드에서 5, -8 / -7, 3 / -11, 6 이런 값들이 이미 주어졌지만, 이 값들은 학습을 통해 찾아야 합니다.


이를 위해 백 프로파게이션 기법을 이용합니다.

출력으로 나온 에러 loss 를 다시 뒤에서부터 계산하는 방법입니다. (계산할때에는 편미분을 사용합니다.)


아래 슬라이드에서 보면 빨간색 가장 위에 글자. 편미분 : w 가 f 에 미치는 영향. 이걸 먼저 보겠습니다. 

최종적으로 입력값이 가장 마지막에 있는 f 에 미치는 영향.이 필요한건데, 아래와 같이 구할 수 있습니다.

w 가 f 에 미치는 영향 = g 가 f 에 미치는 영향 * x 가 f 에 미치는 영향 = 편미분 f/g * 편미분 g/x  = 1 * w


이렇게 편미분을 뒤에서부터 계산하면 아주 쉽게 이 값들을 구할 수 있습니다.

편미분들의 곱으로 전체를 나타내는 방법이 바로 백 프로파게이션 이며, 이를 체인룰 이라고도 합니다.

특히 가장 마지막에 있는 함수 f 를 Activation Function 이라고 부릅니다.

자, 그런데 이 함수가 시그모이드 형태를 띄고 있다면 문제가 있습니다.

1 또는 0 에 수렴하기 때문에 무조건 1 보다 작게 됩니다.

그러니 f 결과값, 즉 액티베이션 함수의 결과값을 곱하면 (이런 로직이 생긴다) 0 보다 한없이 작아지게 됩니다.

다음번에 이걸 풀어보겠습니다.


참고로, 이렇게 그려지는 그래프를 텐서보드로 확인하는 방법입니다. (소스 09-4)

D:\marasong\Workspace\DeepLearningZeroToAll-master>tensorboard --logdir=./logs/xor_logs_r0_01

실행한 다음 웹 브라우저로 확인해 볼 수 있습니다.

Posted by 멋지다마라송
2018.02.07 15:19

유용한 사이트 모음 Tech/머신러닝2018.02.07 15:19

머신러닝 관련, 유용한 사이트 모음 


유재준님 : http://jaejunyoo.blogspot.com/2018/02/minimizing-negative-log-likelihood-in-kor.html

머신러닝에서 자주 사용되는 함수와 개념, 알고리즘을 알기 쉽게 풀어서 설명해둔 사이트입니다.

수학 수식도 보기좋게 정리해주셔서 (어떻게 했는지 궁금;;) 깔끔하고요.

GAN 관련 게시글도 많고 쉽게 올려주셔서 아주 좋습니다.


음성합성 손석희 : https://carpedm20.github.io/tacotron/

약간 어색한 감이 없지 않습니다만, 음성 합성에 대한 재미있는 체험 사이트입니다.

깃헙에 소스도 공개되어 있고요. (소스를 본적은 없어서 모두 공개인지는 모르겠습니다)

장난 전화를 걸어도 이제 구분하기 어려운 시대가 오는거 같아 무섭기도 합니다..


음향인식기 : http://cscp2.sogang.ac.kr/CSE5311/index.php/Tensor_Flow%EB%A5%BC_%EC%9D%B4%EC%9A%A9%ED%95%9C_%EC%9D%8C%ED%96%A5%EC%9D%B8%EC%8B%9D%EA%B8%B0_%EC%A0%9C%EC%9E%91


이홍규님 강좌 : https://medium.com/mathpresso/mathpresso-%EB%A8%B8%EC%8B%A0-%EB%9F%AC%EB%8B%9D-%EC%8A%A4%ED%84%B0%EB%94%94-11-cnn-convolution-neural-nerwork-1-8c3a77991c3a

이홍규님의 머신러닝 사이트입니다.

쉬운 설명에 방대한 자료가 많은 도움이 됩니다.


강화학습 쿠키런 슬라이드 : https://www.slideshare.net/carpedm20/ai-67616630


http://aikorea.org/blog/

RNN 관련해서 영어를 한글로 번역해서 올려두는곳 같습니다.

자료 갱신이 잘 안되는거 같은데, 그래도 읽어볼만한 글들이 꽤 있습니다.


https://github.com/openai/gym

머신러닝을 아타리 게임에 적용하는 방법입니다.

자세한 설명이 되어있지만, 라이브러리 버전이나 OS 버전별로 에러가 많이 생겨서 쉽지는 않습니다.


Posted by 멋지다마라송
2018.02.06 11:54

MNIST-CNN 강의 Tech/머신러닝2018.02.06 11:54

MNIST-CNN 강의 


https://medium.com/mathpresso/mathpresso-%EB%A8%B8%EC%8B%A0-%EB%9F%AC%EB%8B%9D-%EC%8A%A4%ED%84%B0%EB%94%94-11-cnn-convolution-neural-nerwork-1-8c3a77991c3a


Posted by 멋지다마라송


티스토리 툴바