2017-12-21 10 views
0

데이터를 생성하는 데 ImageDataGeneratorflow_from_directory을 사용하고 model.fit_generator을 사용하여 을 사용하여 데이터를 저장합니다.모든 일괄 처리 또는 신기원 (Keras)의 콘솔에 유효성 검증 정확도 인쇄

이 기본값은 학습 데이터 세트에 대해서만 정확도를 출력하는 것입니다. 유효성 검사의 정확성을 터미널에 출력하는 옵션이없는 것 같습니다. 여기

내 코드의 관련 부분입니다 :

#train data generator 


print('Starting Preprocessing') 

train_datagen = ImageDataGenerator(preprocessing_function = preprocess) 

train_generator = train_datagen.flow_from_directory(
train_data_dir, 
target_size = (img_height, img_width), 
batch_size = batch_size, 
class_mode = 'categorical') #class_mode = 'categorical' 


#same for validation 
val_datagen = ImageDataGenerator(preprocessing_function = preprocess) 

validation_generator = val_datagen.flow_from_directory(
     validation_data_dir, 
     target_size = (img_height, img_width), 
     batch_size=batch_size, 
     class_mode='categorical') 





########################Model Creation################################### 

#create the base pre-trained model 
print('Finished Preprocessing, starting model creating \n') 
base_model = InceptionV3(weights='imagenet', include_top=False) 
x = base_model.output 
x = GlobalAveragePooling2D()(x) 
x = Dense(1024, activation='relu')(x) 
predictions = Dense(12, activation='softmax')(x) 
model = Model(input=base_model.input, output=predictions) 




for layer in model.layers[:-34]: 
    layer.trainable = False 
for layer in model.layers[-34:]: 
    layer.trainable = True 


from keras.optimizers import SGD 
model.compile(optimizer=SGD(lr=0.001, momentum=0.92), 
       loss='categorical_crossentropy', 
       metrics = ['accuracy']) 



#############SAVE Model ####################################### 


file_name = str(datetime.datetime.now()).split(' ')[0] + '_{epoch:02d}.hdf5' 
filepath = os.path.join(save_dir, file_name) 



checkpoints =ModelCheckpoint(filepath, monitor='val_acc', verbose=1, 
           save_best_only=False, save_weights_only=False, 
           mode='auto', period=2) 

###############Fit Model ############################# 

model.fit_generator(
train_generator, 
steps_per_epoch =total_samples//batch_size, 
epochs = epochs, 
validation_data=validation_generator, 
validation_steps=total_validation//batch_size, 
callbacks = [checkpoints], 
shuffle= True) 

UPDATE 출력 :

교육 전반에 걸쳐

, 난 단지 교육 정확성, 의 출력을 받고 있지만, 교육의 끝에있어, I "., 검증의 정확성을 모두 교육을 받고

Epoch 1/10 

    1/363 [..............................] - ETA: 1:05:58 - loss: 2.4976 - acc: 0.0640 
    2/363 [..............................] - ETA: 51:33 - loss: 2.4927 - acc: 0.0760 
    3/363 [..............................] - ETA: 48:55 - loss: 2.5067 - acc: 0.0787 
    4/363 [..............................] - ETA: 47:26 - loss: 2.5110 - acc: 0.0770 
    5/363 [..............................] - ETA: 46:30 - loss: 2.5021 - acc: 0.0824 
    6/363 [..............................] - ETA: 45:56 - loss: 2.5063 - acc: 0.0820 
+0

터미널에 출력되는 내용은 무엇입니까? 몇 가지 예를 들려 주시겠습니까? – Tay2510

+0

@ Tay2510 지금 당장은 모델을 실행할 수 없지만 기본적으로 자세한 [1] Keras 출력은 각 일괄 처리 후에 진행 상황을 출력합니다. – Moondra

+0

만약'verbose = 1'이라면, 터미널에'val_loss','val_acc' 출력이 있어야합니다. 그것이 내가 당신의 결과물을 보여달라고 요청한 이유입니다. – Tay2510

답변

2

아이디어는 각 시대 이후에 설정 검증을 통해 당신이하지 각 배치 한 후, 이동한다는 것입니다 해요. 모든 배치 후에 전체 유효성 검사 집합에서 모델의 성능을 평가해야하는 경우 많은 시간을 낭비하게됩니다.

각 신기원 이후에 훈련 및 유효성 검사에 모두 해당하는 손실 및 정확성을 갖게됩니다. 그러나 한 시대에는 교육의 손실과 정확성 만 이용할 수 있습니다.

+0

이렇게 할 방법이 없습니까? tensorflow (전송 학습 스크립트 사용)에서이 작업을 수행 할 수 있었고 병목 현상을 저장하면 문제가되지 않았습니다. – Moondra

+0

내 지식으로는이 일을하는 쉬운 방법이 없습니다. 모든 배치에서 유효성 검사 손실을 아는 것이 무엇인지 궁금합니다. – mpariente