반응형


Sigmoid 함수는 주어진 값을 0~1사이의 값으로 변환 시켜주는 함수입니다.


머신러닝에서 많이 사용하는 함수입니다. 값이 커지거나 작아지거나 할때 가중치가 너무 무리하게 커지는 것을 방지 하기 위한 용도로 사용합니다.


sigmoid 함수 : 

 



입력-- 입력 레이어  -- 히든 레이어 1---- 히든 레이어 2 ------- 히든 레이어 N -- 출력 레이어 -- 출력


레이어 

  x = ax*b 

  x' = sigmoid(x) 


  0<x'<1


아주 많이 사용하는 함수였죠.!!!


그러나 Back propagation 시에 sigmoid 함수를 사용하게 되면, 깊이가 깊은 중첩된 레이어에서는 좋은 결과를 내지 못하게 됩니다.


이유는 sigmoid 함수를 통하게 되면 어떤 값이든 0~1 사이 값이 됩니다.

예를 들면 -10 이라는 결과를 sigmoid를 통과 시키고 나면 0.001 과 같이 0에 가까운 값이 되어 버립니다.

0에 가까운 값이 나오면, 이를 이용해서 어떤 입력에 곱해졌을때 영향이 매우 미미해지게 되죠.



2006년까지 이 문제가 풀리지 않았습니다.


하지만 ReLU의 등장으로 이 문제를 극복해냈습니다.


ReLU

Rectified Linear Unit


알고리즘 : x = max(0, x)


0보다 작은 값은 0

0보다 큰 값은 계속 커짐


큰값, 즉, 영향을 많이 미치는 값은 그 영향력을 그대로 이전 함수에 전달합니다.


ReLU 함수를 사용함으로 해서 영향력이 큰 변수 값들은 계속 다음 레이어에 큰 영향을 미치도록 만들었고,

Back propagation 될때도 변화량이 크게 되어 깊이가 깊은 Deeeeeeeeep learning에서도 좋은 결과를 얻게 되었습니다.




두 함수의 사용법은 아래와 같습니다.


L1 = tf.sigmoid(tf.matmul(X,W1) + b1)   <- sigmoid

L1 = tf.nn.relu(tf.matmul(X1,W1) + b1)   <- ReLU



이외의 다양한 Activation 함수들이 있는데 다음과 같습니다.


Activation Function

Sigmoid

ReLU

Leaky ReLU

ELU

Maxout

tanh



'머신러닝 & 텐서플로 & 파이썬' 카테고리의 다른 글

drop out 과 앙상블(ensemble)  (0) 2018.01.26
초기값  (0) 2018.01.26
tensorboard: 학습 모니터  (0) 2018.01.26
데이타 프로세싱(data processing)  (0) 2018.01.25
머신러닝 : Overfitting (오버피팅)  (0) 2018.01.25
반응형



텐서플로우의 학습 내용을 로그를 통해서 확인하는 것 보다는 그래프와 같은 비쥬얼 툴을 이용해서 확인하는 것이 훨씬 더 효과적일 것입니다.


텐서보드(TensorBoard) 가 이런 면에서는 매우 유용한 툴 입니다.



학습과정에서 모니터링 하고 싶은 값들, 입력, 또는 출력, 등등... 을 그래프로 볼수 있도록 도와주는 툴입니다.


또 텐서플로우 내의 노드들, 텐서들의 graph 들도 GUI적으로 구성해서 볼 수 있습니다.



writer = tf.summary.FileWriter("./logs/xor_logs")


[터미널]

$ tensorboard -logdir = ./logs/xor_logs




리모트 서버에서 텐서플로우를 돌리고 모니터링 할 경우에 텐서보드의 결과를 서버에 접속해서 볼 수 도 있습니다.


ssh -L local_port:127.0.0.1:6006 username@serv.com


remote port: 6006 은 정해져 있는 포트입니다.


local> $ ssh -L 7007:127.0.0.1:6006 myid@277.333.444.555

server> $ tensorboard -logdir =./logs/xor_logs



local PC 에서 http://127.0.0.1:7000 로 접속 (browser)


이렇게 하면 port forward된 서버쪽의 텐서보드가 서버 역할을 하면서 브라우저에 확인할 수 있습니다.


'머신러닝 & 텐서플로 & 파이썬' 카테고리의 다른 글

초기값  (0) 2018.01.26
Sigmoid , ReLU  (0) 2018.01.26
데이타 프로세싱(data processing)  (0) 2018.01.25
머신러닝 : Overfitting (오버피팅)  (0) 2018.01.25
머신러닝 스터디를 위한 youtube 강의  (0) 2018.01.23
반응형

머신러닝에서 경사하강법(gradient decent )이라는 변화량이 최소인 곳으로 이동하면서 트레이팅을 하는 기법이 있는데,

이때 하강 거리? 속도를 조절하기 위해서 learning rate 이라는 것을 사용하게 됩니다.

그런데 이 learning rate이 너무 크게 잡히게 되면, 변화량을 측정할 수 있는 값보다 커지게 되어 원하지 않는 방향으로 벗어나게 됩니다.


그래서 learning rate은 작은 값(적당히 .. 작은... 얼마로 잡아야 하는지는 데이타에 따라 다름)으로 하여야 합니다.



그런데 learning rate과 관련해서 또다른 주의 사항이 있는데,입력된 데이타가 한 방향으로 치우친 경우입니다.

치우쳤다는 표현은, 

예를 들면 2차원 data가 있는 경우에, 이 데이타들이 x축이나 y축 또는 어떤 직선형태로 길게 늘어져 있는 형태로 이뤄져 있는 경우들입니다.


learning rate이 어떤 축으로는 적당하지만 어떤 축으로는 적당하지 않고 너무 큰 값이 되거나 작은 값이 될 수 있습니다.


이경우 정상적인 트레이닝이 이뤄지지 않을 가능성이 생기는 것이죠.


이를 위해 data를 보정이 필요하게 됩니다.



그런 기법중 몇가지를 예로 들어보겠습니다.



중심축 이동 : data가 특정 축에 편중되어있을때, 원점을 중심으로 이동하는 벙법

normalize :  넓게 펼쳐져 있는 값들을 특정 구간으로 비율 변화를 시키는 방법


텐서플로우의 MinMaxScaler : 양 축의 값들을 균등하게 배치하는 방법.








반응형

오버피팅이란 것은 무엇인가?



머신러닝은 학습에 의핸 판단을 하는것입니다. 그래서 학습을 위한 데이타들이 필요하고 이 데이타를 기반으로 판단하게 되는데,

이 학습데이타에 너무 딱 맞게 모델을 설계하게 되면, 학습 데이타 이외의 실제 데이타에서 나쁜 결과가 나오게 됩니다.



오버피팅을 줄이는 방법~


1. 트레이닝 데이타를 많이 가지는것.

2. feature의 개수를 줄이는 방법

3. Regularization



Regularization 은 일반화 시키자는 것.


데이타들을 트레이닝 할때 모델을 결정하는 선들이 구불어지게 되는데,

이 구부러지는 것들을 좀 펼쳐서 처리하는 방법입니다.




L = loss

i = training set

\lambda = regularization strength

               0 이면 일반화 하지 않겠다.

               1 이면 매우 강하게 하겠다.

               0.001 크게 중요하진 않아..



l2reg = 0.001 * tf.reduce_sum(tf.square(W))





layer가 깊을 수록 overfitting 가능성이 커집니다.

이유는 layer 가 깊을수로 변수들이 추가되고 해당 변수들에 가중치가 커지게 되면서 유연성이 떨어지게 됩니다.


반응형

Udacity machine learning


https://www.youtube.com/watch?v=ICKBWIkfeJ8&list=PLAwxTw4SYaPkQXg8TkVdIvYv4HfLG7SiH



[sklearn naive bayes] -- googl search



gaussianNB

http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.GaussianNB.html



multinomialNB

http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.MultinomialNB.html


반응형

우선 tensorflow 를 activate 시킵니다.


~$source ~/tensorflow/bin/activate


(tensorflow)~$



아 첫 실행이네요. !! 두근두근!! 


일단 예제 file을 하나 만들죠!! python 으로 테스트용 소스코드를 작성 했습니다.


hello.py

import tensorflow as tf


hello = tf.constant ("hello, tensorflow!!!")

sess = tf.Session()

print(sess.run(hello))



그리고 나서 실행


(tensorflow)~$ python3 hello.py 


2017-11-23 16:13:38.323733: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX

b'hello, tensorflow!!!'


결과는 이렇게 나왔습니다.


중간에 "TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX" 이런 메세지가 나오는데 이건 따로 찾아봐야 겠네요.


이 메세지는  CPU 에서 지원하는 기능을 제대로 사용하지 못하는 binary를 사용했다 것이라서,  CPU/ GPU에 맞는 binary를 잘 찾아서 처리해야 겠네요.


하지만, 테스트 해보는데는 문제가 없었습니다.


반응형

요즘 인공지능이란 단어를 주변에서 많이들 하더군요.

내가 그동안 해오던 일과는 거리가 상당히 먼 그런 분야이고 진입장벽(?)이 상당히 높다라고 생각해서 관심을 안 갖고 있었는데, 주말에 서점에 가서약간 충격을 먹었습니다.

 

인공지능 입문과 관련된 서적들과 너무나도 많이 나와있더군요. 더욱 충격은 중고등학생들을 타겟으로 하는 책들도 있었다는 것입니다.

 

"아.. 인공지능이라는 것이 바로 옆에 와있었구나, 난 벌써 개발자로서는 뒤쳐진 단계가 되었구나." 하는 생각이었죠.

 

몇년 지나고 나면, 전파사에서 오래된 라디오를 수리해주시는 할아버지처럼 옛날 기술을 가진 기술자, 즉,  구멍가게에서 어린애들에게 위해서 C 나 C++ , Java로 코딩 컴파일 해주는 구멍가게 아저씨가 되어있을 것 같다는 그림이 머리속에 그려졌습니다.

 

그래서 일단 인공지능에 대한 계략적인 이해를 위해 여러자료를 찾아보고 웹상에서 돌아다녀 보다가, 인공지능 알고리즘?(기술) 중하나인 머신러닝이 요즘 핫!!! 한것 같아서 ( 좀 오래동안 핫 한듯!!) 이 부분에 대해서 스터디를 준비하게 되었습니다.

 

일단 쉽게 접근 할 수 있는 도구인 텐서 플로우를 기반으로 공부를 해볼 생각입니다.( 아.!!! 강좌를 하겠다는 의미 아니에요.^^ 그냥 제 개인 스터디)

 

스터디를 하면서 메모할만한 것들은 기록하고 남기긴 할것 같네요.

 

 

텐서 플로우 설치

 

 

Ubuntu 14.04 + python 3.4(virtualenv) + tensorflow(cpu) + pycharm + matplotlib

 

 

1. https://www.tensorflow.org/install/install_linux#InstallingVirtualenv 에서 virtual env 방법으로 설치

 

3.4 기준, CPU 사용(기본 동작에서는 GPU는 불필요)  (ubuntu 에서느 3.x 버전을 추천 하더군요)

 

2. 설치 도중에 아래 에러 발생하면 직접 package를 받아서 설치하면 됨)

 

 

troubleshoot 1

35190574 

SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify

  failed  

 

$ wget https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl

$ sudo pip install --upgrade tensorflow-0.5.0-cp27-none-linux_x86_64.whl

 

3. "import tensorflow as tf"를 할 때, 아래 에러 발생하면

AttributeError: type object 'NewBase' has no attribute 'is_abstract'  

 

아래 방법으로 Six package를 지정된 위치에 다시 설치해서 해결

sudo pip3 install six --upgrade --target="/usr/lib/python3/dist-packages"

 

 

 

 

troubleshoot 2

 

python 설치

1. 3.6 버전을 설치해서 문제 발생

2. 3.4 버전으로 tensorflow를 돌리기 

 

 

3.6 버전과 3.4 버전이 동시에 있어서 제 경우에는 문제가 발생했습니다.

이경우에 설치 방법은.

virtualenv --system-site-packages -p python3

=> virtualenv --system-site-packages -p python3.4

 

 

python 3.4 를 명시 하면 이 버전으로 환경이 구축 됩니다.

 

 

 

pip issue

(tensorflow)$ easy_install -U pip

 

pip 가 너무 옛날 거면 easy_install 이 잘 안됩니다.

 


(tensorflow)~/tensorflow $ easy_install-3.4 -U pip

Searching for pip

Reading https://pypi.python.org/simple/pip/

Download error on https://pypi.python.org/simple/pip/: [Errno 104] Connection reset by peer -- Some packages may not be found!

Couldn't retrieve index page for 'pip'

Scanning index of all packages (this may take a while)

Reading https://pypi.python.org/simple/

Download error on https://pypi.python.org/simple/: [Errno 104] Connection reset by peer -- Some packages may not be found!

Best match: pip 1.5.4

Adding pip 1.5.4 to easy-install.pth file

Installing pip2.7 script to /home/karzia/tensorflow/bin

Installing pip2 script to /home/karzia/tensorflow/bin

Installing pip script to /home/karzia/tensorflow/bin

 

Using /home/karzia/tensorflow/lib/python3.4/site-packages

Processing dependencies for pip

Finished processing dependencies for pip

 

 
https://pypi.python.org/simple/pip

 

여기 link로 가시면 browser에서 download 받으실 수 있습니다.

그리고 나서 pip install 을 실행하시면 됩니다.

 

(tensorflow)~/tensorflow $pip install ~/Downloads/pip-8.1.2.tar.gz

 

또는 proxy 설정을 통해서 진행할 수 있는데요.

 

~/tensorflow $ pip install --upgrade pip --proxy http://<프록시 서버주소> --trusted-host pypi.python.org

 

이렇게 해도 될것으로 예상 됩니다.

 

 

~/tensorflow $ pip3 install --upgrade tensorflow --proxy http://<프록시 서버주소> --trusted-host pypi.python.org

 

이렇게 해서 tensorflow upgrade는  성공 했으니까요.

 

 

 

Trouble shooting #2

 

Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)'),)': /simple/tensorflow/

 

 

=>

~/tensorflow $ pip install --upgrade pip  --cert 서티 파일 --proxy http://<프록시 서버주소> --trusted-host pypi.python.org

 

ex)

pip install <library_name> --trusted-host=pypi.org --trusted-host=pypi.python.org --trusted-host=files.pythonhosted.org --proxy=http://[proxy]

 

 

사용법

python3 -m venv <DIR> source <DIR>/bin/activate

 

activation 방법

...:~ $ source ~/tensorflow/bin/activa

 

(tensorflow)...:~ $

 

deactivation 방법

(tensorflow)...:~ $ deactivate

...:~ $

 

 

 

 

python 3.8 ubuntu에 설치하기

https://linuxize.com/post/how-to-install-python-3-8-on-ubuntu-18-04/

 

 

 

 

 

 

 

반응형


linux 설치하고 이것저것 하다보면, 당혹스러운 error들을 만나게 됩니다.





tput: no value for $TERM

이 에러는 어디선가 사용하고 있는 TERM이라는 환경변수가 선언 안되어있어서 생기는 문제입니다.

저의 경우는  /etc/profile.d/vte.sh 에서 사용하고 있었는데, 제가 S/W를 설치, 삭제 하다가 환경이 틀어진 모양입니다.



etc/profile.d 에

term.sh 를 만들고 거기에서 export를 시켰습니다.


export TERM=xterm 


당연히 xterm이 설치 되어있는 것이 좋겠죠?




+ Recent posts