달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
반응형

출처 : https://tykimos.github.io/2017/01/27/Keras_Talk/

 

케라스 이야기

케라스(Keras) - 그 간결함에 빠지다. 케라스는 파이썬으로 구현된 쉽고 간결한 딥러닝 라이브러리입니다. 딥러닝 비전문가라도 각자 분야에서 손쉽게 딥러닝 모델을 개발하고 활용할 수 있도록 �

tykimos.github.io

케라스(Keras) - 그 간결함에 빠지다.

케라스는 파이썬으로 구현된 쉽고 간결한 딥러닝 라이브러리입니다. 딥러닝 비전문가라도 각자 분야에서 손쉽게 딥러닝 모델을 개발하고 활용할 수 있도록 케라스는 직관적인 API를 제공하고 있습니다. 내부적으로는 텐서플로우(TensorFlow), 티아노(Theano), CNTK 등의 딥러닝 전용 엔진이 구동되지만 케라스 사용자는 복잡한 내부 엔진을 알 필요는 없습니다. 직관적인 API로 쉽게 다층퍼셉트론 모델, 컨볼루션 신경망 모델, 순환 신경망 모델 또는 이를 조합한 모델은 물론 다중 입력 또는 다중 출력 등 다양한 구성을 할 수 있습니다.


케라스 주요 특징

케라스는 아래 4가지의 주요 특징을 가지고 있습니다.

  • 모듈화 (Modularity)
    • 케라스에서 제공하는 모듈은 독립적이고 설정 가능하며, 가능한 최소한의 제약사항으로 서로 연결될 수 있습니다. 모델은 시퀀스 또는 그래프로 이러한 모듈들을 구성한 것입니다.
    • 특히 신경망 층, 비용함수, 최적화기, 초기화기법, 활성화함수, 정규화기법은 모두 독립적인 모듈이며, 새로운 모델을 만들기 위해 이러한 모듈을 조합할 수 있습니다.
  • 최소주의 (Minimalism)
    • 각 모듈은 짥고 간결합니다.
    • 모든 코드는 한 번 훏어보는 것으로도 이해가능해야 합니다.
    • 단 반복 속도와 혁신성에는 다소 떨어질 수가 있습니다.
  • 쉬운 확장성
    • 새로운 클래스나 함수로 모듈을 아주 쉽게 추가할 수 있습니다.
    • 따라서 고급 연구에 필요한 다양한 표현을 할 수 있습니다.
  • 파이썬 기반
    • Caffe 처럼 별도의 모델 설정 파일이 필요없으며 파이썬 코드로 모델들이 정의됩니다.

이 멋진 케라스를 개발하고 유지보수하고 있는 사람은 구글 엔지니어인 프랑소와 쏠레(François Chollet)입니다.


케라스 기본 개념

케라스의 가장 핵심적인 데이터 구조는 바로 모델입니다. 케라스에서 제공하는 시퀀스 모델로 원하는 레이어를 쉽게 순차적으로 쌓을 수 있습니다. 다중 출력이 필요하는 등 좀 더 복잡한 모델을 구성하려면 케라스 함수 API를 사용하면 됩니다. 케라스로 딥러닝 모델을 만들 때는 다음과 같은 순서로 작성합니다. 다른 딥러닝 라이브러리와 비슷한 순서이지만 훨씬 직관적이고 간결합니다.

  1. 데이터셋 생성하기
    • 원본 데이터를 불러오거나 시뮬레이션을 통해 데이터를 생성합니다.
    • 데이터로부터 훈련셋, 검증셋, 시험셋을 생성합니다.
    • 이 때 딥러닝 모델의 학습 및 평가를 할 수 있도록 포맷 변환을 합니다.
  2. 모델 구성하기
    • 시퀀스 모델을 생성한 뒤 필요한 레이어를 추가하여 구성합니다.
    • 좀 더 복잡한 모델이 필요할 때는 케라스 함수 API를 사용합니다.
  3. 모델 학습과정 설정하기
    • 학습하기 전에 학습에 대한 설정을 수행합니다.
    • 손실 함수 및 최적화 방법을 정의합니다.
    • 케라스에서는 compile() 함수를 사용합니다.
  4. 모델 학습시키기
    • 훈련셋을 이용하여 구성한 모델로 학습시킵니다.
    • 케라스에서는 fit() 함수를 사용합니다.
  5. 학습과정 살펴보기
    • 모델 학습 시 훈련셋, 검증셋의 손실 및 정확도를 측정합니다.
    • 반복횟수에 따른 손실 및 정확도 추이를 보면서 학습 상황을 판단합니다.
  6. 모델 평가하기
    • 준비된 시험셋으로 학습한 모델을 평가합니다.
    • 케라스에서는 evaluate() 함수를 사용합니다.
  7. 모델 사용하기
    • 임의의 입력으로 모델의 출력을 얻습니다.
    • 케라스에서는 predict() 함수를 사용합니다.

손글씨 영상을 분류하는 모델을 케라스로 간단히 구현해봤습니다. 가로세로 픽셀이 28 x 28인 이미지를 입력받아 이를 784 벡터로 구성한 다음 이를 학습 및 평가하는 코드입니다. 이 간단한 코드로 93.4%의 정확도 결과를 얻었습니다. 각 함수의 설명 및 인자에 대한 설명은 여러 모델을 실습해보면서 하나씩 설명드리겠습니다.

# 0. 사용할 패키지 불러오기

from keras.utils import np_utils

from keras.datasets import mnist

from keras.models import Sequential

from keras.layers import Dense, Activation

 

# 1. 데이터셋 생성하기

(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train = x_train.reshape(60000, 784).astype('float32') / 255.0

x_test = x_test.reshape(10000, 784).astype('float32') / 255.0

y_train = np_utils.to_categorical(y_train)

y_test = np_utils.to_categorical(y_test)

 

# 2. 모델 구성하기

model = Sequential()

model.add(Dense(units=64, input_dim=28*28, activation='relu'))

model.add(Dense(units=10, activation='softmax'))

 

# 3. 모델 학습과정 설정하기

model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])

 

# 4. 모델 학습시키기

hist = model.fit(x_train, y_train, epochs=5, batch_size=32)

 

# 5. 학습과정 살펴보기

print('## training loss and acc ##')

print(hist.history['loss'])

print(hist.history['acc'])

 

# 6. 모델 평가하기

loss_and_metrics = model.evaluate(x_test, y_test, batch_size=32)

print('## evaluation loss and_metrics ##')

print(loss_and_metrics)

 

# 7. 모델 사용하기

xhat = x_test[0:1]

yhat = model.predict(xhat)

print('## yhat ##')

print(yhat)

Epoch 1/5 60000/60000 [==============================] - 2s - loss: 0.6861 - acc: 0.8214 Epoch 2/5 60000/60000 [==============================] - 2s - loss: 0.3472 - acc: 0.9021 Epoch 3/5 60000/60000 [==============================] - 2s - loss: 0.2972 - acc: 0.9159 Epoch 4/5 60000/60000 [==============================] - 2s - loss: 0.2671 - acc: 0.9243 Epoch 5/5 60000/60000 [==============================] - 2s - loss: 0.2444 - acc: 0.9311 ## training loss and acc ## [0.68605235149065658, 0.34716726491451261, 0.29719433775146803, 0.26708923313419025, 0.24437546383142472] [0.82138333333333335, 0.90213333333333334, 0.91591666666666671, 0.92433333333333334, 0.93113333333333337] 9728/10000 [============================>.] - ETA: 0s## evaluation loss and_metrics ## [0.229048886179924, 0.93520000000000003] ## yhat ## [[ 8.87035931e-05 1.47768702e-07 9.51653055e-04 3.75617994e-03 2.82607380e-06 4.90140701e-05 2.10885389e-08 9.94055033e-01 6.05004097e-05 1.03587494e-03]]


 

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

출처: https://m.blog.naver.com/wideeyed/221164668953

 

[Tensorflow][기초] argmax , argmin함수 소개 및 실습

[Tensorflow][기초] argmax , argmin함수 소개 및 실습 원핫인코딩때문에 자주 사용하게 되는 argmax 함수...

blog.naver.com

 

원핫인코딩때문에 자주 사용하게 되는 argmax 함수에 대해서 알아보자.

 

one-hot(원핫)인코딩이란? 단 하나의 값만 True이고 나머지는 모두 False인 인코딩을 말한다.

즉, 1개만 Hot(True)이고 나머지는 Cold(False)이다.

예를들면 [0, 0, 0, 0, 1]이다. 5번째(Zero-based 인덱스이므로 4)만 1이고 나머지는 0이다.

행렬을 자주 사용하는 연산에서는 4와 같은 스칼라값보다 [0, 0, 0, 0, 1]와 같은 행렬이 자주 사용된다.

 

가장 많이 사용하는 2가지 사례를 알아보자.

 

1) 원핫인코딩된 데이터중 가장 큰 값은 당연히 "1"일 것이고 해당 (Zero-based)인덱스를 리턴한다.

 

=> 5번째 값이 가장 큰 값 1이므로 4 출력

 

 

2) Softmax를 통해 나온 결과중 최대값의 인덱스를 얻고자 할 때 사용한다.

 

=> 3번째 값이 가장 큰 값 0.5이므로 2 출력

 

참고로 최대 값이 2개 이상인 경우 더 앞선 인덱스 값이 나온다.

 

=> 5가 최대 값이고 0, 1 모두 가능하지만 더 앞선 0이 나온다.

 

 

 

argmax와 유사하게 argmin이 존재한다. 최소값의 인덱스를 얻고자 할 때 사용한다.

 

=> 2번째 값이 가장 작은 값 0.1이므로 1 출력

 

 

 

[argmax 설명 링크]

https://www.tensorflow.org/api_docs/python/tf/argmax

 

[argmin 설명 링크]

https://www.tensorflow.org/api_docs/python/tf/argmin

 

 

이제 실습을 통해 조금 더 익혀보자.

 

 

 

 

 

끝.

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

서버 방화벽으로 6006포트가 막힌 원격 PC에서 서버의 텐서보드를 모니터링하는 방법! & 같은 방법으로 서버의 jupyter lab을 원격 PC에서 여러 개 접속하기

서버 환경에서 python 코드를 돌려 tensorboard 로그가 쌓이고 있는 상황에서 서버에서 tensorboard를 보려면 일단 텐서보드 서버를 아래와 같이 실행한다. (로그 경로 지정)

$ tensorboard --logdir="./log"

이렇게 로그 폴더만 지정해 주고, 서버의 웹 브라우저에서
http://localhost:6006 으로 접속하면 된다.

그리고 해당 서버의 6006 포트가 방화벽으로 막혀 있지 않다면 원격 PC에서 위 http 주소에 localhost대신 서버 ip를 지정해주면 볼 수 있다.

만약 방화벽으로 막혀있으면 당연 접속이 안될 것인데, 우회하는 방법이 있다.

원리는 바로 ssh로 port forwarding을 이용하는 것이다. (당연히 서버에 ssh 포트는 방화벽으로 열려있어야 한다.)

위와 같은 조건에서 PC에 16006 포트를 만들고 이 포트와 서버의 6006 포트를 ssh로 연결한다.

PC에서 서버로 ssh 접속을 다음과 같이 한다. (윈도우면 cmd창을 띄우고 작업)

ssh -L 16006:localhost:6006 [ID]@[ServerIP]

서버의 ssh 포트번호가 22가 아니면 -p [port] 를 추가한다.
ssh 접속이 완료되면, PC에서 브라우저를 띄우고 아래 주소로 접속
http://localhost:16006

Jupyter Lab Remote Connect

Jupyter Lab이나 Jupyter Notebook도 마찬가지로 서버의 로컬에서만 접속 가능한 경우에 원격 접속을 위해 동일하게 처리할 수 있다.
먼저 안전하게 설정 파일 생성과 접속암호를 아래와 같이 만든다.

$jupyter notebook --generate-config $jupyter notebook password 암호 입력

암호 설정 방법은 수동으로도 할 수 있다. ~/.jupyter/ 폴더 내에 생성된 설정 파일을 보면 복잡하지만 가능하다. 간단하게 하려면 위 방식을 이용하자.

서버에서 작업할 디렉터리로 이동 후, 쥬피터 랩 실행

$ jupyter lab ... http://localhost:port ...

위와 같이 포트 번호를 안내해 준다. 이미 할당되어 있으면 변경되므로 확인.
(쥬피터를 디렉터리를 달리하여 여러 개 실행할 수도 있다.)

PC에서 서버로 ssh 접속을 다음과 같이 한다. (윈도우면 cmd창을 띄우고 작업) -L 뒤에 PC포트:localhost:서버포트
서버 포트는 서버 연결포트이니 당연히 쥬피터 포트를 보고 입력해 준다.

ssh -L 8890:localhost:8890 [ID]@[ServerIP]

PC에서 로컬호스트의 생성한 PC포트로 접속한다. (위와 같이 PC포트 서버 포트가 일치할 필요는 없다. 로컬 포트는 할당되지 않은 임의의 포트로 지정해도 된다.)
http://localhost:8890
암호를 입력하고 연결하면 된다.

Written with StackEdit.



출처: https://crazyj.tistory.com/161?category=753579 [크레이지J의 탐구생활]

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

 

 

keras 손실함수 중에 아래 두 개가 비슷하지만 사용할 때는 완전히 다르다.

주의가 필요하다.

 

+ categorical_crossentropy ; 다중 분류 손실함수. one-hot encoding 클래스

출력값이 one-hot encoding 된 결과로 나오고 실측 결과와의 비교시에도 실측 결과는 one-hot encoding 형태로 구성된다.

예를 들면 출력 실측값이 아래와 같은 형태(one-hot encoding)로 만들어 줘야 하는 과정을 거쳐야 한다.

[[0 0 1]

[0 1 0]

[1 0 0]]  (배치 사이즈 3개인 경우)

네트웍 레이어 구성시 마지막에 Dense(3, activation='softmax') 로 3개의 클래스 각각 별로 positive 확률값이 나오게 된다.

[0.2, 0.3, 0.5]

위 네트웍 출력값과 실측값의 오차값을 계산한다.

model.compile(optimizer=.., loss='categorical_entropy')

 

+ sparse_categorical_crossentropy ; 다중 분류 손실함수. 위와 동일하지만 , integer type 클래스라는 것이 다르다.

예를 들면 출력 실측값이 아래와 같은 형태로 one-hot encoding 과정을 하지 않아도 된다. 

[0, 1, 2]  (배치 사이즈 3개로 했을 때)

 

네트웍 구성은 동일하게 Dense(3, activation='softmax')로 하고 출력값도 3개가 나오게 된다.

단 실측 출력값을 입력하는 부분에서 별도로 one-hot encoding을 할 필요가 없이 정수값 그대로 주고, 손실함수를  sparse_categorical_crossentropy 로 바꿔주기만 하면 된다.

model.compile(optimizer=.., loss='sparse_categorical_entropy')

 



출처: https://crazyj.tistory.com/153 [크레이지J의 탐구생활]

 

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

https://www.tensorflow.org/

 

TensorFlow

모두를 위한 엔드 투 엔드 오픈소스 머신러닝 플랫폼입니다. 도구, 라이브러리, 커뮤니티 리소스로 구성된 TensorFlow의 유연한 환경입니다.

www.tensorflow.org

https://teachablemachine.withgoogle.com/

 

Teachable Machine

Train a computer to recognize your own images, sounds, & poses. A fast, easy way to create machine learning models for your sites, apps, and more – no expertise or coding required.

teachablemachine.withgoogle.com

 

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

[keras] categorical_crossentropy vs sparse_categorical_crossentropy

출처: https://crazyj.tistory.com/153 [크레이지J의 탐구생활]

 

[keras] categorical_crossentropy vs sparse_categorical_crossentropy

keras 손실함수 중에 아래 두 개가 비슷하지만 사용할 때는 완전히 다르다. 주의가 필요하다. + categorical_crossentropy ; 다중 분류 손실함수. one-hot encoding 클래스 출력값이 one-hot encoding 된 결과로..

crazyj.tistory.com

30. Sigmoid 보다 ReLU가 더 좋아 (lec 10-1)

출처: https://pythonkim.tistory.com/40 [파이쿵]

 

30. Sigmoid 보다 ReLU가 더 좋아 (lec 10-1)

신앙처럼 여겨왔던 sigmoid를 능가하는 존재가 나타났다. 여기서는 Deep Learning의 성능을 향상시키는 다양한 방법들에 대해 알려준다. sigmoid는 logistic classification에서 어디에 속하는지 분류를 하기 �

pythonkim.tistory.com

logit, sigmoid, softmax의 관계

https://opentutorials.org/module/3653/22995

 

logit, sigmoid, softmax의 관계 - 한 페이지 머신러닝

[logit, sigmoid, softmax의 관계] 이번에는 logit, sigmoid, softmax의 관계에 대해서 알아보겠습니다. 이것들이 서로 다 다른 개념같지만 서로 매우 밀접하게 관련이 있는데요. 그림의 가운데 부분에서 세

opentutorials.org

 

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

참고 블로그

수학포기자를 위한 딥러닝-#2 머신러닝 개념 이해

https://bcho.tistory.com/1139

반응형
Posted by 친절한 웬디양~ㅎㅎ
|