2016년 3월 1일 화요일

keras test

# 레이어 중간 값을 확인할 수 있는 방법
from keras.layers.core import Dense, Dropout, Activation, Flatten
from keras.layers.convolutional import Convolution2D
from keras.layers.normalization import BatchNormalization
from keras import backend as K
from keras.layers import Input
from keras.datasets import mnist, cifar10

(X_train, y_train), (X_test, y_test) = cifar10.load_data()
X_train = X_train.reshape(X_train.shape[0], 3, 32, 32).astype('float32')
X_train = (X_train - np.mean(X_train))/np.std(X_train)

inputs = Input(shape=(3,32,32))
bn1 = BatchNormalization(axis=1)(inputs)
act1 = Activation('relu')(bn1)
conv1 = Convolution2D(32, 3, 3, border_mode='same')(act1)
func1 = K.function([inputs], [conv1]) #conv1대신 act1 등 입력가능
val1 = func1([X_train[0:1]])[0]  # [0]을 붙인 것은 val1이 list로 나오기 때문



# test용 입력을 만드는 방법
inp = np.random.randn(2,3,32,32)
rez = model.predict(inp[0:1])
rez.shape


# layers의 shape 출력
model.summay()




(Ref.)
[1] Keras FAQ.

댓글 1개:

  1. [SSD - object detection 학습 절차]
    학습을 시작할 때 랜덤 가중치로 인해 loss가 아주 크게 나오는 것을 적당하게 작은 값으로 낮추어야 한다. 이를 위해 준비된 data 셋(계산량 과도를 피하기 위해 너무 data수가 많지 않게 함)에 대해 base_lr는 비교적 크게(3e-4)해서 학습한다.
    학습이 잘 되지 않으면 transfer learning에서 freeze시킬 전반부 층의 수를 늘린다(14층->20층).


    loss가 적절한 크기로 줄면(loss=1.2~3정도, val_loss=1.7 내외), 다른 data set를 이용하여 재학습한다.
    이때 base_lr=3e-6정도로 줄여서 안정된 학습이 되도록 한다. 보통 loss=1.0, val_loss=0.75내외 정도에서 성공적인 결과를 보였다.






    답글삭제