2. Keras
• 딥러닝 라이브러리
• Tensorflow와 Theano를 backend로 사용
• 특장점
• 쉽고 빠른 구현 (레이어, 활성화 함수, 비용 함수, 최적화 등 모듈화)
• CNN, RNN 지원
• CPU/GPU 지원
• 확장성 (새 모듈을 매우 간단하게 추가 가능)
• 파이선 코드로 모델 생성
3. 설치
• 쉽게 anaconda 이용 설치
conda create -n keras python=3.5
source activate keras
pip install tensorflow
conda install scipy
pip install keras
pip install h5py
4. 밑바닥딥러닝 4장 Keras 구현 예
(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')
학습 프로세스 설정
학습 데이터로 학습
레이어 구성
7. Sequential 모델로 쉽게 레이어 구성
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'))
8. 다양한 레이어 제공
• Dense : 완전 연결 NN 레이어
• Activation : 활성화 레이어
• Dropout : 드롭아웃 레이어
• BatchNormalization : 배치 정규화
• Convolution2D : 콘볼루션 레이어
• MaxPooling2D : Max 풀링 레이어
• LSTM, SimpleRNN, GRU : RNN 레이어
• 등등
9. Dense 기초
• Dense의 입출력 관련
• output_dim: 출력 개수
• input_dim: 입력 개수
• input_shape: 입력 형상
model = Sequential()
# 입력 16, 출력 32
model.add(Dense(32, input_shape=(16,)))
# 첫 번째 레이어 이후로는 입력 개수 지정 필요 없음
# 앞 레이어의 출력 개수가 입력 개수가 됨
# 입력 32, 출력 64
model.add(Dense(64))
10. Dense 기초
• Dense의 가중치 초기화, 가중치 정규화(감소)
• init: 초기화 함수 이름 (weights가 없을 때 적용)
• weights: 가중치 초기값
• W_regularizer: 가중치 정규화
• b_regularizer: bias 정규화
• bias: bias를 포함할지 여부
from keras.regularizers import l2
model.add(Dense(64, input_dim=64, init='he_normal', W_regularizer=l2(0.01)))
11. 활성화 함수
• softmax
• relu
• tanh
• sigmoid
• hard_sigmoid
• 등등
model.add(Activation('relu'))
model.add(Activation('softmax'))
12. 학습 프로세스 정의
옵티마이저
• SGD
• RMSprop
• Adagrad
• Adam
• 이 외 Adadelta, Adamax,
Nadam
loss 함수
• mean_squared_error
• binary_crossentropy
• categorical_crossentropy
• sparse_categorical_crossentro
py
• 등등
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
13. 학습: model.fit()
• x: 입력 데이터
• y: 라벨
• batch_size : 배치 크기
• nb_epoch: 학습 epoch 횟수
• verbose: 로깅
• 0:없음, 1:프로그레스바, 2, epoch 당
• validation_split: 0~1사이 실수
• 검증 용도로 사용할 홀드아웃 데이터 비율
• validation_data: (x, y) 검증 데이터
• validation_split은 무시
• shuffle: 각 epoch마다 샘플을 섞을지 여부
his = model.fit(X_train, Y_train,
batch_size=batch_size,
nb_epoch=nb_epoch,
verbose=2,
validation_data=(X_test, Y_test))
14. 평가: model.evaluate()
• 파라미터
• x, y: 테스트 데이터, 라벨
• batch_size=32: 배치 크기
• verbose=1: 출력모드(0, 1)
• sample_weight: 샘플 가중치
• 리턴
• 테스트 loss 값(모델이 메트릭이 없으면)
또는 스칼라 값 목록(모델이 다른 메트릭을 계산하면)
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
15. Callback
• 학습 과정 데이터 관찰 용도
• 다양한 콜백 제공
• ModelCheckPoint
• EarlyStopping
• RemoteMonitor
• TensorBoard
• 등등
• 커스텀 구현 지원
tensorcallback = TensorBoard(log_dir='./logs',
histogram_freq=0,
write_graph=True,
write_images=False)
his = model.fit(X_train, Y_train,
…,
callbacks=[tensorcallback])
텐서보드 예