open:keras-빨리-훑어보기

Keras 빨리 훑어보기

  • 딥러닝 라이브러리
    • Tensorflow 와 Theano를 backend로 사용
  • 특장점
    • 쉽고 빠른 구현(레이어, 활성화 함수, 비용 함수, 최적화 등 모듈화)
    • CNN, RNN 지원
    • CPU/GPU 지원
    • 확장성 (새 모듈을 매우 간단하게 추가 가능)
    • 파이썬 코드로 모델 생성
  • 쉽게 anaconda 이용 설치
snippet.shell
conda create -n keras python=3.5
source activate keras
 
pip install tensorflow
conda install scipy
pip install keras
pip install h5py
snippet.python
(X_train, Y_train), (X_test, Y_test) = load_mnist(normalize=True, one_hot_label=True)
 
model = Sequential()
model.add(Dense(100, input_shape(784,)))
model.add(Activation('sigmoid'))
model.add(Dense(10))
model.add(Activation('softmax'))
 
sgd = SGD(lr = 0.1)
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
 
batch_size = 100
nb_epoch = 16 # X_train: (60000, 784), 1 epoch = 100*600
model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch, verbose=0, validation_data=(X_test, Y_test))
 
# 모델 저장
model.save('mlp.h5')
 
# 모델을 사용해서 예측
from keras.models import load_model
 
model = load_model('mlp.h5')
 
pc = model.predict_classes(X_test[0:100, :], 100)
print(pc) # [7 2 1 0 4 1 ...]
 
pb= model.predict_proba(X_test[0:100, :], 100)
print(pb) # [[1.44900128e-04 2.8030103e-06 ...]]
snippet.python
model = Sequential()
nb_filter = 30
kernal_size = (5, 5)
input_shape = (img_rows, img_cols, 1)
 
model.add(Convolution2D(nb_filter, kernal_size[0], kernal_size[1], border_mode='valid', input_shape=input_shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size(2,2)))
 
model.add(Flatten())
model.add(Dense(100))
model.add(Activation('relu'))
model.add(Dense(10))
model.add(Activation('softmax'))
 
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X_train, Y_train, batch_size=100, nb_epoch=10, verbose=1, validation_data=(X_test, Y_test))
snippet.python
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
 
model = Sequential()
model.add(Dense(512, input_shape=(784,))) # 입력 784, 출력 512
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(512)) # 입력 512(이전 레이어 입력), 출력 512
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(10)) # 입력 512, 출력 10
model.add(Activation('softmax'))
  • Dense: 완전 연결 NN 레이어
  • Activation: 활성화 레이어
  • Dropout: 드롭아웃 레이어
  • BatchNormalization: 배치 정규화
  • Convolution2D: 컨볼루션 레이어
  • MaxPooling2D: Max 풀링 레이어
  • LSTM, SimpleRNN, GRU: RNN 레이어
  • 등등
  • Dense 의 입출력 관련
    • outputdim: 출력 개수
      - input
      dim: 입력 개수
    • input_shape: 입력 형상
snippet.python
model = Sequential()
model.add(Dense(32, input_shape=(16,))) # 입력 16, 출력 32
 
# 첫 번째 레이어 이후로는 입력 개수 지정 필요 없음
# 앞 레이어의 출력 개수가 입력 개수가 됨
# 입력 32, 출력 64
model.add(Dense(64))
  • Dense의 가중치 초기화, 가중치 정규화(감소)
    • init: 초기화 함수 이름(weights가 없을 때 적용)
    • weights: 가중치 초기값
    • Wregularizer: 가중치 정규화
      - b
      regularizer: bias 정규화
    • bias: bias를 포함할지 여부
snippet.python
from keras.regularizers import l2
model.add(Dense(64, input_dim=64, init='he_normal', W_regularizer=l2(0.01)))
  • softmax
  • relu
  • tanh
  • sigmoid
  • hard_sigmoid
snippet.python
model.add(Activation('relu'))
...
model.add(Activation('softmax'))
  • SGD
  • RMSprop
  • Adagrad
  • Adam
  • 이 외 Adadelta, Adamax, Nadam
  • meansquarederror
  • binarycrossentropy
    - categorical
    crossentropy
  • sparsecategoricalcrossentropy
  • 등등
snippet.python
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
  • x: 입력 데이터
  • y: 라벨
  • batchsize: 배치 크기
    - nb
    epoch: 학습 epoch 횟수
  • verbose: 로깅 (0:없음, 1:프로그래스바, 2:epoch당)
  • validationsplit: 0~1 사이 실수 (검증 용도로 사용할 홀드아웃 데이터 비율)
    - validation
    data:(x, y) 검증 데이터 (validation_split은 무시)
  • shuffle: 각 epoch마다 샘플을 섞을지 여부
snippet.python
his = model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch, verbose=2, validation_data=(X_test, Y_test))
  • 파라미터
    • x, y: 테스트 데이터, 라벨
    • batchsize = 32: 배치 크기
      - verbose = 1: 출력모드(0, 1)
      - sample
      weight: 샘플 가중치
snippet.python
score = model.evaluate(X_test, Y_test, verbose=0)
print(model.metrics_names) # loss, acc
print('Test score', score[0]) # loss
print('Test accuracy:', score[1]) # acc
  • 리턴
    • 테스트 loss 값(모델이 메트릭이 없으면) 또는 스칼라 값 목록(모델이 다른 메트릭을 계산하면)
  • 학습 과정 데이터 관찰 용도
  • 다양한 콜백 제공
    • ModelCheckPoint
    • EarlyStopping
    • RemoteMonitor
    • TensorBoard
    • 등등
  • 커스텀 구현 지원
snippet.python
tensorcallback = TensorBoard(log_dir='./logs', histogram_freq=0, write_graph=True, write_images=False)
his = model.fit(X_train, Y_train, ..., callbacks=[tensorcallback])
  • open/keras-빨리-훑어보기.txt
  • 마지막으로 수정됨: 2020/06/02 09:25
  • 저자 127.0.0.1