Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add custom model example to docs. #1758

Merged
merged 3 commits into from
Jan 15, 2022
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 29 additions & 1 deletion docs/src/models/advanced.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,34 @@

Here we will try and describe usage of some more advanced features that Flux provides to give more control over model building.

## Custom Model Example

Here is a basic example of a custom model. It simply adds the input to the result from the neural network.

```julia
struct CustomModel
chain::Chain
end

function (m::CustomModel)(x)
return m.chain(x) + x

# You can put arbitrary code here, but note that everything here will be differentiated.
Gregliest marked this conversation as resolved.
Show resolved Hide resolved
# Zygote does not allow some operations, like mutating arrays.
Gregliest marked this conversation as resolved.
Show resolved Hide resolved
end

# Call @functor to allow for training. Described below in more detail.
Flux.@functor CustomModel
```

You can then use the model like:

```julia
chain = Chain(Dense(10, 10))
model = CustomModel(chain)
model(rand(10))
```

## Customising Parameter Collection for a Model

Taking reference from our example `Affine` layer from the [basics](basics.md#Building-Layers-1).
Expand Down Expand Up @@ -68,7 +96,7 @@ by simply deleting it from `ps`:

```julia
ps = params(m)
delete!(ps, m[2].bias)
delete!(ps, m[2].bias)
```

## Custom multiple input or output layer
Expand Down