# Defining your custom model

*Your PyTorch models can be used with NNSVS.*

NNSVS allows you to define your custom model easily. If you want your custom model to be used with NNSVS, you can implement your own by inheriting the `nnsvs.base.BaseModel`

class.

## Write your PyTorch model

Note

If you are not familiar with PyTorch, please check the PyTorch’s documentation first.

A simplest example is shown below.

```
from nnsvs.base import BaseModel
from torch import nn
class MyModel(BaseModel):
"""My awesome neural network
Args:
in_dim (int): input dimension
hidden_dim (int): hidden dimension
out_dim (int): output dimension
"""
def __init__(self, in_dim, hidden_dim, out_dim):
super().__init__()
self.model = nn.Sequential(
nn.Linear(in_dim, hidden_dim),
nn.ReLU(),
nn.Linear(hidden_dim, out_dim)
)
def forward(self, x, lengths=None, y=None):
"""Forward pass
Args:
x (torch.Tensor): input tensor
lengths (torch.Tensor): input sequence lengths
y (torch.Tensor): target tensor (optional)
Returns:
torch.Tensor: output tensor
"""
return self.model(x)
```

The above is a toy example defining a model with simple two-layer feed-forward neural networks with ReLU activation function. `lengths`

and `y`

are optional arguments.
The model name, number of arguments, and model architecture are totally customizable.

If you follow the `nnsvs.base.BaseModel`

interface, your model can be used as time-lag/duration/acoustic models.

## Specify your model in model configs

Once you implement your model, you can use your model by changing your model configs like:

```
netG:
_target_: ${path.to.your.model}
# the followings are arguments passed to your model's __init__ method
in_dim: 331
hidden_dim: 32
out_dim: 1
```

Note that your model must be in the `PYTHONPATH`

. If you edit `nnsvs/model.py`

directly, you can specify your new model as:

```
netG:
_target_: nnsvs.model.MyModel
# the followings are arguments passed to your model's __init__ method
in_dim: 331
hidden_dim: 32
out_dim: 1
```

If you add a new file at `nnsvs/test.py`

for example, you can refer your model by:

```
netG:
_target_: nnsvs.test.MyModel
# the followings are arguments passed to your model's __init__ method
in_dim: 331
hidden_dim: 32
out_dim: 1
```

That’s it.

## Available model types

You may want to know what models are implemented and what are missing? Please check the following docs for the available models:

Generic models: nnsvs.model

Acoustic models: nnsvs.acoustic_models

Post-filteres: nnsvs.postfilters

If you find you model works well, please feel to free to make pull requests to the NNSVS repository.