:index:`MP6`: AutoVC voice conversion
##########################################

This MP will use pytorch to train and test an AutoVC voice conversion system.

* Pytorch is intentionally easy to learn, but even so,
  it's worth spending some time with the
  `pytorch tutorial <https://pytorch.org/tutorials/beginner/basics/quickstart_tutorial.html>`_.

In this MP, you will train an LSTM voice conversion system.

* mp6.zip will contains the code.  You should download the code,
  unzip it into some directory, and then type ``jupyter-lab`` to get started.
* mp6_notebook.html will be an example of what the Jupyter notebook will
  look like, once you've finished everything.

* The MP uses a lot of torch-specific functions.  You can find documentation for  all of
  those functions `here <https://pytorch.org/docs/stable/index.html>`_.
    * Your ``LineEar.__init__`` method will use
      `torch.nn.parameter.Parameter <https://pytorch.org/docs/stable/generated/torch.nn.parameter.Parameter.html>`_.
    * Your ``LineEar.forward`` method will use
      `torch.matmul <https://pytorch.org/docs/stable/generated/torch.matmul.html>`_.
    * Your module ``EllEssTeeEmm`` will put
      `torch.nn.LSTMCells <https://pytorch.org/docs/stable/generated/torch.nn.LSTMCell.html>`_.
      into two
      `torch.nn.ModuleLists <https://pytorch.org/docs/stable/generated/torch.nn.ModuleList.html>`_ --
      one called ``self.forward_layers``, one called ``self.reverse_layers``.
    * Your module ``GeeArrYou`` will put
      `torch.nn.GRUCells <https://pytorch.org/docs/stable/generated/torch.nn.GRUCell.html>`_.
      into two
      `torch.nn.ModuleLists <https://pytorch.org/docs/stable/generated/torch.nn.ModuleList.html>`_ --
      one called ``self.forward_layers``, one called ``self.reverse_layers``.
    * Your ``Encoder.__init__``, ``Decoder.__init__``, and ``Postnet.__init__`` will each put
      `Conv1d <https://pytorch.org/docs/stable/generated/torch.nn.Conv1d.html>`_,
      `BatchNorm1d <https://pytorch.org/docs/stable/generated/torch.nn.BatchNorm1d.html>`_,
      and `ReLU <https://pytorch.org/docs/stable/generated/torch.nn.ReLU.html>`_ layers
      into a
      `torch.nn.ModuleLists <https://pytorch.org/docs/stable/generated/torch.nn.ModuleList.html>`_ --
      called ``self.convolutions``.
      They will then create an ``EllEssTeeEmm`` module called ``self.recurrent``,
      and a ``LineEar`` called ``self.fc_projection``.


* ``python grade.py`` is how you will grade your code on your local machine.
  
* When it works on your machine, then you can try uploading **only**
  the file ``submitted.py`` to the MP6 assignment on Gradescope.