Skip to content

mlp() defines a multilayer perceptron model (a.k.a. a single layer, feed-forward neural network). This function can fit classification and regression models.

There are different ways to fit this model, and the method of estimation is chosen by setting the model engine. The engine-specific pages for this model are listed below.

¹ The default engine. ² Requires a parsnip extension package for classification and regression.

More information on how parsnip is used for modeling is at


  mode = "unknown",
  engine = "nnet",
  hidden_units = NULL,
  penalty = NULL,
  dropout = NULL,
  epochs = NULL,
  activation = NULL,
  learn_rate = NULL



A single character string for the prediction outcome mode. Possible values for this model are "unknown", "regression", or "classification".


A single character string specifying what computational engine to use for fitting.


An integer for the number of units in the hidden model.


A non-negative numeric value for the amount of weight decay.


A number between 0 (inclusive) and 1 denoting the proportion of model parameters randomly set to zero during model training.


An integer for the number of training iterations.


A single character string denoting the type of relationship between the original predictors and the hidden unit layer. The activation function between the hidden and output layers is automatically set to either "linear" or "softmax" depending on the type of outcome. Possible values depend on the engine being used.


A number for the rate at which the boosting algorithm adapts from iteration-to-iteration (specific engines only). This is sometimes referred to as the shrinkage parameter.


This function only defines what type of model is being fit. Once an engine is specified, the method to fit the model is also defined. See set_engine() for more on setting the engine, including how to set engine arguments.

The model is not trained or fit until the fit() function is used with the data.

Each of the arguments in this function other than mode and engine are captured as quosures. To pass values programmatically, use the injection operator like so:

value <- 1
mlp(argument = !!value)


#> # A tibble: 6 × 2
#>   engine mode          
#>   <chr>  <chr>         
#> 1 keras  classification
#> 2 keras  regression    
#> 3 nnet   classification
#> 4 nnet   regression    
#> 5 brulee classification
#> 6 brulee regression    

mlp(mode = "classification", penalty = 0.01)
#> Single Layer Neural Network Model Specification (classification)
#> Main Arguments:
#>   penalty = 0.01
#> Computational engine: nnet