2017-12-12 4 views
1

사소한 질문에 사과드립니다. 적절한 장소가 아닌 경우 더 나은 정보원을 알려주십시오.Keras, 유효성 검사 데이터 전용 인쇄 메트릭

validation_data에 대해서만 keras 메트릭을 인쇄하는 방법이 있습니까?

몇 가지 신기원 별 측정 항목 (예 : 정밀도, 회상 및 f1 점수)을 추적하고 싶습니다. keras git 히스토리에서 사용할 수있는 몇 가지 편리한 메소드가 있지만, 테스트/유효성 검사 시간에 수행하는 동안 일괄 적으로 일괄 계산할 때는 이해가되지 않습니다.

그래서 교육 메트릭은 내 로그를 혼란스럽게합니다. 그들을 음소거하는 방법이 있습니까?

EDIT : 나는 Callback의 하위 클래스를 사용할 수 있지만 그 방법은 신기원에 대해서만 수행 할 수 있음을 알고 있습니다. 그러나 그 방법은 신기원 별 유효성 검사 데이터에 대한 두 가지 예측을하고 있습니다. 하나는 콜백이고 다른 하나는 유효성을 계산하기위한 후드 아래에서 수행 한 것입니다. 손실.

답변

1

ProgbarLoggerverbose > 0 경우에만 모델에 콜백이 추가됩니다. 소스 코드 training.py에서 :

if verbose: 
    if steps_per_epoch is not None: 
     count_mode = 'steps' 
    else: 
     count_mode = 'samples' 
    callbacks += [cbks.ProgbarLogger(count_mode)] 

그래서 가능한 해결 방법은 다음과 같습니다

  • 이 억제 fit()에서 verbose=0을 지정 서브 클래스 ProgbarLogger
  • ProgbarLogger 내장과를 무시하도록 코드를 변경 교육 지표
  • 을 호출 할 때이 콜백 추가 교육 지표는 이제 억제 할 것

    from keras.callbacks import ProgbarLogger 
    
    class ValOnlyProgbarLogger(ProgbarLogger): 
        def __init__(self, verbose, count_mode='samples'): 
         # Ignore the `verbose` argument specified in `fit()` and pass `count_mode` upstream 
         self.verbose = verbose 
         super(ValOnlyProgbarLogger, self).__init__(count_mode) 
    
        def on_train_begin(self, logs=None): 
         # filter out the training metrics 
         self.params['metrics'] = [m for m in self.params['metrics'] if m.startswith('val_')] 
         self.epochs = self.params['epochs'] 
    
    input_tensor = Input(shape=(256,)) 
    out = Dense(10)(input_tensor) 
    model = Model(input_tensor, out) 
    model.compile(loss='mse', optimizer='adam', metrics=['mae', 'cosine']) 
    model.fit(X, Y, validation_data=(XX, YY), verbose=0, 
          callbacks=[ValOnlyProgbarLogger(verbose=1)]) 
    

    예를 들어

210 : 당신이 fit_generator 대신 fit으로 사용하는 경우 있음을

Epoch 1/1 
1000/1000 [==============================] - 0s 392us/step - val_loss: 0.2479 - val_mean_absolute_error: 0.3988 - val_cosine_proximity: -0.7022 

주, 당신은 지정해야합니다 ValOnlyProgbarLogger을 초기화 할 때 count_mode='steps'

+0

감사합니다. 꽤 괜찮습니다. 그것은 내가 훈련 메트릭 계산을 전혀 건너 뛸 수 있다면 좋을 것이지만, 나는 검증 시간에만 더 복잡한 것들을 할 수 있고 그들과 훈련을 늦추지 않을 수 있습니다. 나는 획기적인 시간에 여분의 예측에 대한 훈련 시간에 여분의 메트릭 계산의 비용에 비중을 둘 것입니다. – filippo