tensorflowmodelkerasevaluate

What is the difference between model.fit() an model.evaluate() in Keras?


I am using Keras with TensorFlow backend to train CNN models.

What is the between model.fit() and model.evaluate()? Which one should I ideally use? (I am using model.fit() as of now).

I know the utility of model.fit() and model.predict(). But I am unable to understand the utility of model.evaluate(). Keras documentation just says:

It is used to evaluate the model.

I feel this is a very vague definition.


Solution

  • fit() is for training the model with the given inputs (and corresponding training labels).

    evaluate() is for evaluating the already trained model using the validation (or test) data and the corresponding labels. Returns the loss value and metrics values for the model.

    predict() is for the actual prediction. It generates output predictions for the input samples.

    Let us consider a simple regression example:

    # input and output
    x = np.random.uniform(0.0, 1.0, (200))
    y = 0.3 + 0.6*x + np.random.normal(0.0, 0.05, len(y))
    

    enter image description here

    Now lets apply a regression model in keras:

    # A simple regression model
    model = Sequential()
    model.add(Dense(1, input_shape=(1,)))
    model.compile(loss='mse', optimizer='rmsprop')
    
    # The fit() method - trains the model
    model.fit(x, y, nb_epoch=1000, batch_size=100)
    
    Epoch 1000/1000
    200/200 [==============================] - 0s - loss: 0.0023
    
    # The evaluate() method - gets the loss statistics
    model.evaluate(x, y, batch_size=200)     
    # returns: loss: 0.0022612824104726315
    
    # The predict() method - predict the outputs for the given inputs
    model.predict(np.expand_dims(x[:3],1)) 
    # returns: [ 0.65680361],[ 0.70067143],[ 0.70482892]