What is the difference between partial fit and warm start?

前端 未结 4 1496
闹比i
闹比i 2021-02-01 21:45

Context:

I am using Passive Aggressor from scikit library and confused whether to use warm start or partial fit.

Efforts hitherto

4条回答
  •  情话喂你
    2021-02-01 22:01

    If warm_start = False, each subsequent call to .fit() (after an initial call to .fit() or partial_fit()) will reset the model's trainable parameters for the initialisation. If warm_start = True, each subsequent call to .fit() (after an initial call to .fit() or partial_fit()) will retain the values of the model's trainable parameters from the previous run, and use those initially. Regardless of the value of warm_start, each call to partial_fit() will retain the previous run's model parameters and use those initially.

    Example using MLPRegressor:

    import sklearn.neural_network
    import numpy as np
    np.random.seed(0)
    x = np.linspace(-1, 1, num=50).reshape(-1, 1)
    y = (x * 1.5 + 2).reshape(50,)
    cold_model = sklearn.neural_network.MLPRegressor(hidden_layer_sizes=(), warm_start=False, max_iter=1)
    warm_model = sklearn.neural_network.MLPRegressor(hidden_layer_sizes=(), warm_start=True, max_iter=1)
    
    cold_model.fit(x,y)
    print cold_model.coefs_, cold_model.intercepts_
    #[array([[0.17009494]])] [array([0.74643783])]
    cold_model.fit(x,y)
    print cold_model.coefs_, cold_model.intercepts_
    #[array([[-0.60819342]])] [array([-1.21256186])]
    #after second run of .fit(), values are completely different
    #because they were re-initialised before doing the second run for the cold model
    
    warm_model.fit(x,y)
    print warm_model.coefs_, warm_model.intercepts_
    #[array([[-1.39815616]])] [array([1.651504])]
    warm_model.fit(x,y)
    print warm_model.coefs_, warm_model.intercepts_
    #[array([[-1.39715616]])] [array([1.652504])]
    #this time with the warm model, params change relatively little, as params were
    #not re-initialised during second call to .fit()
    
    cold_model.partial_fit(x,y)
    print cold_model.coefs_, cold_model.intercepts_
    #[array([[-0.60719343]])] [array([-1.21156187])]
    cold_model.partial_fit(x,y)
    print cold_model.coefs_, cold_model.intercepts_
    #[array([[-0.60619347]])] [array([-1.21056189])]
    #with partial_fit(), params barely change even for cold model,
    #as no re-initialisation occurs
    
    warm_model.partial_fit(x,y)
    print warm_model.coefs_, warm_model.intercepts_
    #[array([[-1.39615617]])] [array([1.65350392])]
    warm_model.partial_fit(x,y)
    print warm_model.coefs_, warm_model.intercepts_
    #[array([[-1.39515619]])] [array([1.65450372])]
    #and of course the same goes for the warm model
    

提交回复
热议问题