# Deep Learning with PyTorch

This course introduces the foundations of deep learning, covering supervised learning, neural network architectures, loss functions, and gradient-based optimization. It also presents the practical development of neural networks through data preparation, training, evaluation, diagnosis, and systematic experimentation.

The course combines conceptual lessons, implementation-focused tutorials, reference pages, and projects, with most examples and applications drawn from computer vision. It is designed to be useful both as teaching material and for independent study. No previous experience with PyTorch is required, but readers should be comfortable with Python and basic linear algebra.

## How to use this material

The course contains several types of material, each serving a different purpose.

- **Lessons** provide the main conceptual sequence. They start with supervised learning and progressively introduce neural networks, training workflows, performance analysis, convolutional networks, deeper architectures, and representation learning. Most lessons include a guided lab to reinforce each concept.

- **Tutorials** focus on implementation. They introduce NumPy and PyTorch in detail, and develop practical implementations of neural networks, convolutional models, transfer learning, and metric learning.

- **Quick Reference** provides concise summaries of common PyTorch workflows and operations. It is intended primarily as a reference while working through the other material.

- **Projects** present larger computer-vision tasks that can be solved with deep learning. They include problems in image classification, image retrieval, object localization, and crowd counting.

If you are learning deep learning for the first time, follow the *Lessons* in order and complete the associated guided labs. Use the *Tutorials* when you need more detail on implementation, and the *Quick Reference* as a compact source for frequently used PyTorch operations.

## Lectures

The lecture slides provide a higher-level presentation of several topics developed in the written material.

| Slides                                     | Description                             |
| ------------------------------------------ | --------------------------------------- |
| [Lecture01.pdf](../lectures/Lecture01.pdf) | Supervised learning and neural networks |
| [Lecture02.pdf](../lectures/Lecture02.pdf) | Training and evaluating neural networks |
| [Lecture03.pdf](../lectures/Lecture03.pdf) | Convolutional neural networks           |
| [Lecture04.pdf](../lectures/Lecture04.pdf) | Representation learning                 |

## Code

Several reusable utilities introduced in the course are also available as standalone Python files.

| File                               | Description                                     |
| ---------------------------------- | ----------------------------------------------- |
| [training.py](../code/training.py) | Reusable training and evaluation utilities      |
| [finetune.py](../code/finetune.py) | Utilities for transfer learning and fine-tuning |
| [triplet.py](../code/triplet.py)   | Utilities for training with triplet loss        |

<!--
## License

Except as otherwise noted, the course content is licensed under the [Creative Commons Attribution-NonCommercial-ShareAlike License](http://creativecommons.org/licenses/by-nc-sa/4.0/), and the code samples are licensed under the [MIT License](https://opensource.org/licenses/MIT).
-->