Search code examples
pythonmachine-learningneural-networkkeras

How to record val_loss and loss per batch in keras


I'm using the callback function in keras to record the loss and val_loss per epoch, But I would like to a do the same but per batch. I found a callback function called on_batch_begin(self,batch,log={}), but I not sure how to use it.


Solution

  • Here is an example of custom callback. Following and modifying an example from here:

    class LossHistory(keras.callbacks.Callback):
        def on_train_begin(self, logs={}):
            self.losses = []
            self.val_losses = []
    
        def on_batch_end(self, batch, logs={}):
            self.losses.append(logs.get('loss'))
            self.val_losses.append(logs.get('val_loss'))
    
    model = Sequential()
    model.add(Dense(10, input_dim=784, init='uniform'))
    model.add(Activation('softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
    
    history = LossHistory()
    model.fit(X_train, Y_train, batch_size=128, nb_epoch=20, verbose=0, validation_split=0.1,
              callbacks=[history])
    
    print history.losses
    # outputs
    '''
    [0.66047596406559383, 0.3547245744908703, ..., 0.25953155204159617, 0.25901699725311789]
    '''
    print history.val_losses