For most tasks, you can use built-in layers. If there is not a built-in layer that you need for your task, then you can define your own custom layer. You can specify a custom loss function using a custom output layer and define custom layers with learnable and state parameters. After defining a custom layer, you can check that the layer is valid, GPU compatible, and outputs correctly defined gradients. For a list of supported layers, see List of Deep Learning Layers.
trainingOptions function does not
provide the training options that you need for your task, or custom output layers do
not support the loss functions that you need, then you can define a custom training
loop. For models that layer graphs do not support, you can define a custom model as
a function. To learn more, see Define Custom Training Loops, Loss Functions, and Networks.