Copy disabled (too large)
Download .txt
Showing preview only (15,823K chars total). Download the full file to get everything.
Repository: rasbt/deeplearning-models
Branch: master
Commit: 18e046926551
Files: 206
Total size: 33.8 MB
Directory structure:
gitextract_bct7j2tf/
├── .gitignore
├── .pep8speaks.yml
├── LICENSE
├── README.md
├── pytorch-lightning_ipynb/
│ ├── cnn/
│ │ ├── cnn-alexnet-cifar10.ipynb
│ │ ├── cnn-alexnet-grouped-cifar10.ipynb
│ │ ├── cnn-allconv.ipynb
│ │ ├── cnn-basic.ipynb
│ │ ├── cnn-densenet121-cifar10.ipynb
│ │ ├── cnn-densenet121-mnist.ipynb
│ │ ├── cnn-he-init.ipynb
│ │ ├── cnn-lenet5-cifar10.ipynb
│ │ ├── cnn-lenet5-mnist.ipynb
│ │ ├── cnn-lenet5-quickdraw.ipynb
│ │ ├── cnn-mobilenet-v2-cifar10-2.ipynb
│ │ ├── cnn-mobilenet-v2-cifar10.ipynb
│ │ ├── cnn-mobilenet-v3-large-cifar10.ipynb
│ │ ├── cnn-mobilenet-v3-small-cifar10.ipynb
│ │ ├── cnn-nin-cifar10.ipynb
│ │ ├── cnn-vgg16-celeba.ipynb
│ │ ├── cnn-vgg16.ipynb
│ │ └── cnn-vgg19.ipynb
│ ├── data-augmentation/
│ │ └── autoaugment/
│ │ ├── helper_utilities.py
│ │ ├── with-autoaugment.ipynb
│ │ ├── with-trivialaugment.ipynb
│ │ └── without-augmentation.ipynb
│ ├── kfold/
│ │ ├── baseline-light-cnn-mnist.ipynb
│ │ └── kfold-light-cnn-mnist.ipynb
│ ├── mlp/
│ │ ├── mlp-basic.ipynb
│ │ ├── mlp-batchnorm.ipynb
│ │ ├── mlp-dropout.ipynb
│ │ └── template_classification_basic.ipynb
│ ├── ordinal/
│ │ ├── CORAL-light_cement.ipynb
│ │ ├── CORN-light_cement.ipynb
│ │ ├── baseline-light_cement.ipynb
│ │ ├── beckham2016-light_cement.ipynb
│ │ ├── niu2016-light_cement.ipynb
│ │ └── polat2022-light_cement.ipynb
│ └── transformer/
│ ├── distilbert-finetune-last-layers.ipynb
│ ├── distilbert-finetune-scheduler.ipynb
│ ├── distilbert-finetuning-ii-amp/
│ │ ├── distilbert-finetuning-ii-2.ipynb
│ │ ├── distilbert-finetuning-ii-amp16.ipynb
│ │ └── distilbert-finetuning-ii-ampb16.ipynb
│ └── distilbert-finetuning-ii.ipynb
├── pytorch_ipynb/
│ ├── autoencoder/
│ │ ├── ae-basic-with-rf.ipynb
│ │ ├── ae-basic.ipynb
│ │ ├── ae-cnn-cvae.ipynb
│ │ ├── ae-cnn-cvae_no-out-concat.ipynb
│ │ ├── ae-conv-nneighbor-celeba.ipynb
│ │ ├── ae-conv-nneighbor-quickdraw-1.ipynb
│ │ ├── ae-conv-nneighbor.ipynb
│ │ ├── ae-conv-var.ipynb
│ │ ├── ae-cvae.ipynb
│ │ ├── ae-cvae_no-out-concat.ipynb
│ │ ├── ae-deconv-jaccard.ipynb
│ │ ├── ae-deconv-nopool.ipynb
│ │ ├── ae-deconv.ipynb
│ │ └── ae-var.ipynb
│ ├── basic-ml/
│ │ ├── logistic-regression.ipynb
│ │ ├── perceptron.ipynb
│ │ ├── softmax-regression-mlxtend-1.ipynb
│ │ └── softmax-regression.ipynb
│ ├── cnn/
│ │ ├── cnn-alexnet-cifar10-grouped.ipynb
│ │ ├── cnn-alexnet-cifar10.ipynb
│ │ ├── cnn-allconv.ipynb
│ │ ├── cnn-basic.ipynb
│ │ ├── cnn-densenet121-cifar10.ipynb
│ │ ├── cnn-densenet121-mnist.ipynb
│ │ ├── cnn-embetter-mobilenet.ipynb
│ │ ├── cnn-he-init.ipynb
│ │ ├── cnn-lenet5-cifar10.ipynb
│ │ ├── cnn-lenet5-mnist.ipynb
│ │ ├── cnn-lenet5-quickdraw.ipynb
│ │ ├── cnn-mobilenet-v2-cifar10.ipynb
│ │ ├── cnn-mobilenet-v3-large-cifar10.ipynb
│ │ ├── cnn-mobilenet-v3-small-cifar10.ipynb
│ │ ├── cnn-resnet101-celeba.ipynb
│ │ ├── cnn-resnet101-cifar10.ipynb
│ │ ├── cnn-resnet152-celeba.ipynb
│ │ ├── cnn-resnet18-celeba-dataparallel.ipynb
│ │ ├── cnn-resnet18-mnist.ipynb
│ │ ├── cnn-resnet34-celeba-dataparallel.ipynb
│ │ ├── cnn-resnet34-cifar10-pinmem.ipynb
│ │ ├── cnn-resnet34-mnist.ipynb
│ │ ├── cnn-resnet34-quickdraw.ipynb
│ │ ├── cnn-resnet50-celeba-dataparallel.ipynb
│ │ ├── cnn-resnet50-mnist.ipynb
│ │ ├── cnn-standardized.ipynb
│ │ ├── cnn-vgg16-cats-dogs.ipynb
│ │ ├── cnn-vgg16-celeba-data-parallel.ipynb
│ │ ├── cnn-vgg16-celeba.ipynb
│ │ ├── cnn-vgg16.ipynb
│ │ ├── cnn-vgg19.ipynb
│ │ ├── fc-to-conv.ipynb
│ │ ├── nin-cifar10.ipynb
│ │ ├── nin-cifar10_batchnorm.ipynb
│ │ ├── nin-cifar10_filter-response-norm.ipynb
│ │ └── resnet-ex-1.ipynb
│ ├── data/
│ │ ├── iris.data
│ │ └── perceptron_toydata.txt
│ ├── gan/
│ │ ├── dc-wgan-1.ipynb
│ │ ├── dcgan-cats-and-dogs.ipynb
│ │ ├── dcgan-celeba.ipynb
│ │ ├── gan-conv-smoothing.ipynb
│ │ ├── gan-conv.ipynb
│ │ ├── gan.ipynb
│ │ └── wgan-1.ipynb
│ ├── gnn/
│ │ ├── gnn-basic-1.ipynb
│ │ ├── gnn-basic-edge-1.ipynb
│ │ └── gnn-basic-graph-spectral-1.ipynb
│ ├── helper.py
│ ├── helper_data.py
│ ├── helper_evaluate.py
│ ├── helper_plotting.py
│ ├── helper_train.py
│ ├── helper_utils.py
│ ├── images/
│ │ └── alexnet/
│ │ └── grouped-convolutions.pptx
│ ├── kfold/
│ │ └── baseline-cnn-mnist.ipynb
│ ├── lightning/
│ │ ├── lightning-mlp-best-model.ipynb
│ │ └── lightning-mlp.ipynb
│ ├── mechanics/
│ │ ├── cnn-weight-sharing.ipynb
│ │ ├── custom-data-loader-afad.ipynb
│ │ ├── custom-data-loader-celeba.ipynb
│ │ ├── custom-data-loader-csv.ipynb
│ │ ├── custom-data-loader-fashionmnist.ipynb
│ │ ├── custom-data-loader-mnist.ipynb
│ │ ├── custom-data-loader-quickdraw.ipynb
│ │ ├── custom-data-loader-svhn.ipynb
│ │ ├── custom-data-loader_dating-historical-color-images.ipynb
│ │ ├── custom-dataloader-png/
│ │ │ └── custom-dataloader-example.ipynb
│ │ ├── dataloader-nesting.ipynb
│ │ ├── deterministic_benchmark.ipynb
│ │ ├── deterministic_benchmark_utils.py
│ │ ├── gradient-checkpointing-nin.ipynb
│ │ ├── manual-gradients.ipynb
│ │ ├── mlp-sequential.ipynb
│ │ ├── model-pipeline-vgg16.ipynb
│ │ ├── plot-jupyter-matplotlib.ipynb
│ │ ├── torchvision-transform-examples.ipynb
│ │ ├── transferlearning-vgg16.ipynb
│ │ └── validation-splits.ipynb
│ ├── mlp/
│ │ ├── mlp-basic.ipynb
│ │ ├── mlp-batchnorm.ipynb
│ │ ├── mlp-dropout.ipynb
│ │ └── mlp-fromscratch__sigmoid-mse.ipynb
│ ├── ordinal/
│ │ ├── CORAL_cement.ipynb
│ │ ├── CORN_cement.ipynb
│ │ ├── baseline_cement.ipynb
│ │ ├── beckham2016_cement.ipynb
│ │ ├── niu2016_cement.ipynb
│ │ └── polat2022_cement.ipynb
│ ├── related-libraries/
│ │ └── torchmetrics-update-forward.ipynb
│ ├── rnn/
│ │ ├── char_rnn-charlesdickens.ipynb
│ │ ├── rnn_bi_multilayer_lstm_own_csv_agnews.ipynb
│ │ ├── rnn_gru_packed_imdb.ipynb
│ │ ├── rnn_lstm_bi_imdb.ipynb
│ │ ├── rnn_lstm_packed_imdb-glove.ipynb
│ │ ├── rnn_lstm_packed_imdb.ipynb
│ │ ├── rnn_lstm_packed_own_csv_imdb.ipynb
│ │ ├── rnn_simple_imdb.ipynb
│ │ └── rnn_simple_packed_imdb.ipynb
│ ├── transfer/
│ │ └── transferlearning-vgg16-cifar10-1.ipynb
│ ├── transformer/
│ │ ├── 1_distilbert-as-feature-extractor.ipynb
│ │ ├── 1_distilbert-as-feature-extractor_without-dcollate.ipynb
│ │ ├── distilbert-benchmark/
│ │ │ ├── 1_just-hf.py
│ │ │ ├── 2_hf_with_lightning.py
│ │ │ └── shared.py
│ │ ├── distilbert-embetter-feature-extractor.ipynb
│ │ ├── distilbert-hf-finetuning.ipynb
│ │ ├── distilbert-hf-finetuning_without-dcollate.ipynb
│ │ └── distilbert-v0.ipynb
│ ├── tricks/
│ │ ├── cnn-alexnet-cifar10-batchincrease.ipynb
│ │ ├── cyclical-learning-rate.ipynb
│ │ └── gradclipping_mlp.ipynb
│ └── viz/
│ └── cnns/
│ └── cats-and-dogs/
│ ├── _cnn-basemodel__vgg16-cats-dogs.ipynb
│ ├── cnn-viz-grad__vgg16-cats-dogs.ipynb
│ ├── cnn-viz-guided-backprop__vgg16-cats-dogs.ipynb
│ ├── datautils.py
│ └── vgg16.py
├── templates/
│ └── pytorch_lightning/
│ ├── submit_command.sh
│ ├── template_classification_basic.ipynb
│ └── tune_classification_basic.py
└── tensorflow1_ipynb/
├── autoencoder/
│ ├── ae-basic.ipynb
│ ├── ae-conv-nneighbor.ipynb
│ └── ae-deconv.ipynb
├── basic-ml/
│ ├── logistic-regression.ipynb
│ ├── perceptron.ipynb
│ └── softmax-regression.ipynb
├── cnn/
│ ├── cnn-basic.ipynb
│ └── cnn-vgg16.ipynb
├── data/
│ └── perceptron_toydata.txt
├── gan/
│ ├── gan-conv-smoothing.ipynb
│ ├── gan-conv.ipynb
│ └── gan.ipynb
├── helper.py
├── mechanics/
│ ├── dataset-api.ipynb
│ ├── file-queues.ipynb
│ ├── image-data-chunking-hdf5.ipynb
│ ├── image-data-chunking-npz.ipynb
│ ├── saving-and-reloading-models.ipynb
│ └── tfrecords.ipynb
├── metric/
│ └── siamese-1.ipynb
└── mlp/
├── mlp-basic.ipynb
├── mlp-batchnorm.ipynb
├── mlp-dropout.ipynb
└── mlp-lowlevel.ipynb
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
# Other
.pytorch-lightning_ipynb_new/
# Log files
pytorch-lightning_ipynb/mlp/logs/
pytorch-lightning_ipynb/cnn/logs/
# Datasets
png-files
*-ubyte*
pytorch-lightning_ipynb/*/data
pytorch_ipynb/viz/cnns/cats-and-dogs/dogs-vs-cats
pytorch_ipynb/gan/dogs-vs-cats
pytorch_ipynb/viz/cnns/cats-and-dogs/dogs-vs-cats
pytorch_ipynb/rnn/yelp_review_polarity_csv/
pytorch_ipynb/rnn/ag_news_csv/
pytorch_ipynb/rnn/amazon_review_polarity_csv/
HistoricalColor-ECCV2012*
AFAD-Lite
tarball*
pytorch_ipynb/rnn/.data/
pytorch_ipynb/rnn/.vector_cache/
cifar-10-batches-py
celeba_gender_attr_test.txt
celeba_gender_attr_train.txt
iris.h5
test_32x32.mat
train_32x32.mat
code/model_zoo/pytorch_ipynb/svhn_cropped/
list_attr_celeba.txt
list_eval_partition.txt
img_align_celeba
quickdraw-*
*.csv
*.zip
*.npz
*.npy
*.tar.gz
*ubyte.gz
*archive.ics.uci.edu*
code/model_zoo/cifar-10
code/model_zoo/pytorch_ipynb/data
# Binary PyTorch models
*.pt
*.state_dict
# Temporary OS files
.DS_Store
# TensorFlow Checkpoint files
checkpoint
code/*/*.data-?????-of-?????
code/*/*.index
code/*/*.meta
code/model_zoo/tensorflow_ipynb/*.data-?????-of-?????
code/model_zoo/tensorflow_ipynb/*.index
code/model_zoo/tensorflow_ipynb/*.meta
code/model_zoo/tensorflow_ipynb/cifar-10/*
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
.hypothesis/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# IPython Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# dotenv
.env
# virtualenv
venv/
ENV/
# Spyder project settings
.spyderproject
# Rope project settings
.ropeproject
# Datasets
MNIST*
================================================
FILE: .pep8speaks.yml
================================================
# File : .pep8speaks.yml
scanner:
diff_only: True # If False, the entire file touched by the Pull Request is scanned for errors. If True, only the diff is scanned.
linter: flake8
flake8:
max-line-length: 89 # Default is 79 in PEP 8
ignore: # Errors and warnings to ignore
- W504 # line break after binary operator
- E402 # module level import not at top of file
- E731 # do not assign a lambda expression, use a def
- C406 # Unnecessary list literal - rewrite as a dict literal.
- E741 # ambiguous variable name
no_blank_comment: False # If True, no comment is made on PR without any errors.
descending_issues_order: False # If True, PEP 8 issues in message will be displayed in descending order of line numbers in the file
message: # Customize the comment made by the bot
opened: # Messages when a new PR is submitted
header: "Hello @{name}! Thanks for opening this PR. "
# The keyword {name} is converted into the author's username
footer: ""
# The messages can be written as they would over GitHub
updated: # Messages when new commits are added to the PR
header: "Hello @{name}! Thanks for updating this PR. "
footer: "" # Why to comment the link to the style guide everytime? :)
no_errors: "There are currently no PEP 8 issues detected in this Pull Request. Cheers! :beers: "
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2019-2022 Sebastian Raschka
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# Deep Learning Models
A collection of various deep learning architectures, models, and tips for TensorFlow and PyTorch in Jupyter Notebooks.
## Traditional Machine Learning
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Perceptron | 2D toy data | TBD | [](pytorch_ipynb/basic-ml/perceptron.ipynb) [](tensorflow1_ipynb/basic-ml/perceptron.ipynb) |
| Logistic Regression | 2D toy data | TBD | [](pytorch_ipynb/basic-ml/logistic-regression.ipynb) [](tensorflow1_ipynb/basic-ml/logistic-regression.ipynb)|
| Softmax Regression (Multinomial Logistic Regression) | MNIST | TBD | [](pytorch_ipynb/basic-ml/softmax-regression.ipynb) [](tensorflow1_ipynb/basic-ml/softmax-regression.ipynb) |
| Softmax Regression with MLxtend's plot_decision_regions on Iris | Iris | TBD | [](pytorch_ipynb/basic-ml/softmax-regression-mlxtend-1.ipynb) |
## Multilayer Perceptrons
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Multilayer Perceptron | MNIST | TBD | [](pytorch-lightning_ipynb/mlp/mlp-basic.ipynb) [](pytorch_ipynb/mlp/mlp-basic.ipynb) [](tensorflow1_ipynb/mlp/mlp-basic.ipynb) |
| Multilayer Perceptron with Dropout | MNIST | TBD | [](pytorch-lightning_ipynb/mlp/mlp-dropout.ipynb) [](pytorch_ipynb/mlp/mlp-dropout.ipynb) [](tensorflow1_ipynb/mlp/mlp-dropout.ipynb) |
|Multilayer Perceptron with Batch Normalization | MNIST | TBD | [](pytorch-lightning_ipynb/mlp/mlp-batchnorm.ipynb) [](pytorch_ipynb/mlp/mlp-batchnorm.ipynb) [](tensorflow1_ipynb/mlp/mlp-batchtnorm.ipynb) |
|Multilayer Perceptron with Backpropagation from Scratch | MNIST | TBD | [](pytorch_ipynb/mlp/mlp-fromscratch__sigmoid-mse.ipynb) [](tensorflow1_ipynb/mlp/mlp-fromscratch__sigmoid-mse.ipynb)|
## Convolutional Neural Networks
#### Basic
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Convolutional Neural Network | TBD | TBD | [](pytorch-lightning_ipynb/cnn/cnn-basic.ipynb) [](pytorch_ipynb/cnn/cnn-basic.ipynb) [](tensorflow1_ipynb/cnn/cnn-basic.ipynb) |
| CNN with He Initialization | TBD | TBD | [](pytorch-lightning_ipynb/cnn/cnn-he-init.ipynb) [](pytorch_ipynb/cnn/cnn-he-init.ipynb) |
#### Concepts
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Replacing Fully-Connected by Equivalent Convolutional Layers | TBD | TBD | [](pytorch_ipynb/cnn/fc-to-conv.ipynb) |
---
#### AlexNet
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| AlexNet Trained on CIFAR-10 | TBD | TBD | [](pytorch-lightning_ipynb/cnn/cnn-alexnet-cifar10.ipynb) [](pytorch_ipynb/cnn/cnn-alexnet-cifar10.ipynb) |
| AlexNet with Grouped Convolutions Trained on CIFAR-10 | TBD | TBD | [](pytorch-lightning_ipynb/cnn/cnn-alexnet-grouped-cifar10.ipynb) [](pytorch_ipynb/cnn/cnn-alexnet-grouped-cifar10.ipynb) |
#### DenseNet
|Title | Description | Daset | Notebooks |
| --- | --- | --- | --- |
| DenseNet-121 Digit Classifier Trained on MNIST | TBD | TBD | [](pytorch-lightning_ipynb/cnn/cnn-densenet121-mnist.ipynb) [](pytorch_ipynb/cnn/cnn-densenet121-mnist.ipynb) |
| DenseNet-121 Image Classifier Trained on CIFAR-10 | TBD | TBD | [](pytorch-lightning_ipynb/cnn/cnn-densenet121-cifar10.ipynb) [](pytorch_ipynb/cnn/cnn-densenet121-cifar10.ipynb) |
#### Fully Convolutional
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| "All Convolutionl Net" -- A Fully Convolutional Neural Network | TBD | TBD | [](pytorch-lightning_ipynb/cnn/cnn-allconv.ipynb) [](pytorch_ipynb/cnn/cnn-allconv.ipynb) |
#### LeNet
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| LeNet-5 on MNIST | TBD | TBD | [](pytorch-lightning_ipynb/cnn/cnn-lenet5-mnist.ipynb) [](pytorch_ipynb/cnn/cnn-lenet5-mnist.ipynb) |
| LeNet-5 on CIFAR-10 | TBD | TBD | [](pytorch-lightning_ipynb/cnn/cnn-lenet5-cifar10.ipynb) [](pytorch_ipynb/cnn/cnn-lenet5-cifar10.ipynb) |
| LeNet-5 on QuickDraw | TBD | TBD | [](pytorch-lightning_ipynb/cnn/cnn-lenet5-quickdraw.ipynb) [](pytorch_ipynb/cnn/cnn-lenet5-quickdraw.ipynb) |
#### MobileNet
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| MobileNet-v2 on Cifar-10 | TBD | TBD | [](pytorch-lightning_ipynb/cnn/cnn-mobilenet-v2-cifar10.ipynb) [](pytorch_ipynb/cnn/cnn-mobilenet-v2-cifar10.ipynb) |
| MobileNet-v3 small on Cifar-10 | TBD | TBD | [](pytorch-lightning_ipynb/cnn/cnn-mobilenet-v3-small-cifar10.ipynb) [](pytorch_ipynb/cnn/cnn-mobilenet-v3-small-cifar10.ipynb) |
| MobileNet-v3 large on Cifar-10 | TBD | TBD | [](pytorch-lightning_ipynb/cnn/cnn-mobilenet-v3-large-cifar10.ipynb) [](pytorch_ipynb/cnn/cnn-mobilenet-v3-large-cifar10.ipynb) |
| MobileNet-v3 large on MNIST via Embetter | TBD | TBD | [](pytorch_ipynb/cnn/cnn-embetter-mobilenet.ipynb) |
#### Network in Network
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Network in Network Trained on CIFAR-10 | TBD | TBD | [](pytorch-lightning_ipynb/cnn/cnn-nin-cifar10.ipynb) [](pytorch_ipynb/cnn/nin-cifar10.ipynb) |
#### VGG
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Convolutional Neural Network VGG-16 Trained on CIFAR-10 | TBD | TBD | [](pytorch-lightning_ipynb/cnn/cnn-vgg16.ipynb) [](pytorch_ipynb/cnn/cnn-vgg16.ipynb) [](tensorflow1_ipynb/cnn/cnn-vgg16.ipynb) |
| VGG-16 Smile Classifier | [CelebA](https://mmlab.ie.cuhk.edu.hk/projects/CelebA.html) | TBD | [](pytorch-lightning_ipynb/cnn/cnn-vgg16-celeba.ipynb) [](pytorch_ipynb/cnn/cnn-vgg16-celeba.ipynb) |
| VGG-16 Dogs vs Cats Classifier | TBD | TBD | [](pytorch_ipynb/cnn/cnn-vgg16-cats-dogs.ipynb) |
| Convolutional Neural Network VGG-19 | TBD | TBD | [](pytorch-lightning_ipynb/cnn/cnn-vgg19.ipynb) [](pytorch_ipynb/cnn/cnn-vgg19.ipynb) |
#### ResNet
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| ResNet and Residual Blocks | [MNIST](http://yann.lecun.com/exdb/mnist/) | TBD | [](pytorch_ipynb/cnn/resnet-ex-1.ipynb) |
| ResNet-18 Digit Classifier| [MNIST](http://yann.lecun.com/exdb/mnist/) | TBD | [](pytorch_ipynb/cnn/cnn-resnet18-mnist.ipynb) |
| ResNet-18 Gender Classifier | [CelebA](https://mmlab.ie.cuhk.edu.hk/projects/CelebA.html) | TBD | [](pytorch_ipynb/cnn/cnn-resnet18-celeba-dataparallel.ipynb) |
| ResNet-34 Digit Classifier | [MNIST](http://yann.lecun.com/exdb/mnist/) | TBD | [](pytorch_ipynb/cnn/cnn-resnet34-mnist.ipynb) |
| ResNet-34 Object Classifier | [QuickDraw](https://quickdraw.withgoogle.com) | TBD | [](pytorch_ipynb/cnn/cnn-resnet34-quickdraw.ipynb) |
| ResNet-34 Gender Classifier| [CelebA](https://mmlab.ie.cuhk.edu.hk/projects/CelebA.html) | TBD | [](pytorch_ipynb/cnn/cnn-resnet34-celeba-dataparallel.ipynb) |
| ResNet-50 Digit Classifier| [MNIST](http://yann.lecun.com/exdb/mnist/) | TBD | [](pytorch_ipynb/cnn/cnn-resnet50-mnist.ipynb) |
| ResNet-50 Gender Classifier | [CelebA](https://mmlab.ie.cuhk.edu.hk/projects/CelebA.html) | TBD | [](pytorch_ipynb/cnn/cnn-resnet50-celeba-dataparallel.ipynb) |
| ResNet-101 Gender Classifier| [CelebA](https://mmlab.ie.cuhk.edu.hk/projects/CelebA.html) | TBD | [](pytorch_ipynb/cnn/cnn-resnet101-celeba.ipynb) |
| ResNet-101| [CIFAR-10](https://www.cs.toronto.edu/~kriz/cifar.html) | TBD | [](pytorch_ipynb/cnn/cnn-resnet101-cifar10.ipynb) |
| ResNet-152 Gender Classifier| [CelebA](https://mmlab.ie.cuhk.edu.hk/projects/CelebA.html) | TBD | [](pytorch_ipynb/cnn/cnn-resnet152-celeba.ipynb) |
---
## Transformers
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Multilabel DistilBERT | [Jigsaw Toxic Comment Challenge](https://www.kaggle.com/competitions/jigsaw-toxic-comment-classification-challenge) | DistilBERT classifier fine-tuning | [](pytorch_ipynb/transformer/distilbert-multilabel.ipynb) |
| DistilBERT as feature extractor | [IMDB movie review](https://ai.stanford.edu/~amaas/data/sentiment/) | DistilBERT classifier with sklearn random forest and logistic regression | [](pytorch_ipynb/transformer/1_distilbert-as-feature-extractor.ipynb) |
| DistilBERT as feature extractor using `embetter` | [IMDB movie review](https://ai.stanford.edu/~amaas/data/sentiment/) | DistilBERT classifier with sklearn random forest and logistic regression using the scikit-learn `embetter` library | [](pytorch_ipynb/transformer/distilbert-embetter-feature-extractor.ipynb) |
| Fine-tune DistilBERT I | [IMDB movie review](https://ai.stanford.edu/~amaas/data/sentiment/) | Fine-tune only the last 2 layers of DistilBERT classifier | [](pytorch-lightning_ipynb/transformer/distilbert-finetune-last-layers.ipynb) |
| Fine-tune DistilBERT II | [IMDB movie review](https://ai.stanford.edu/~amaas/data/sentiment/) | Fine-tune the whole DistilBERT classifier | [](pytorch_ipynb/transformer/distilbert-hf-finetuning.ipynb) [](pytorch-lightning_ipynb/transformer/distilbert-finetuning-ii.ipynb) |
---
## Ordinal Regression and Deep Learning
Please note that the following notebooks below provide reference implementations to use the respective methods. They are not performance benchmarks.
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Baseline multilayer perceptron | Cement | A baseline multilayer perceptron for classification trained with the standard cross entropy loss | [](pytorch_ipynb/ordinal/baseline_cement.ipynb) [](pytorch-lightning_ipynb/ordinal/baseline-light_cement.ipynb) |
| CORAL multilayer perceptron | Cement | Implementation of [Rank Consistent Ordinal Regression for Neural Networks with Application to Age Estimation](https://www.sciencedirect.com/science/article/pii/S016786552030413X) 2020 | [](pytorch_ipynb/ordinal/CORAL_cement.ipynb) [](pytorch-lightning_ipynb/ordinal/CORAL-light_cement.ipynb) |
| CORN multilayer perceptron | Cement | Implementation of [Deep Neural Networks for Rank-Consistent Ordinal Regression Based On Conditional Probabilities](https://arxiv.org/abs/2111.08851) 2022 | [](pytorch_ipynb/ordinal/CORN_cement.ipynb) [](pytorch-lightning_ipynb/ordinal/CORN-light_cement.ipynb) |
| Binary extension multilayer perceptron | Cement | Implementation of [Ordinal Regression with Multiple Output CNN for Age Estimation](https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Niu_Ordinal_Regression_With_CVPR_2016_paper.pdf) 2016 | [](pytorch_ipynb/ordinal/niu2016_cement.ipynb) [](pytorch-lightning_ipynb/ordinal/niu2016-light_cement.ipynb) |
| Reformulated squared-error multilayer perceptron | Cement | Implementation of [A simple squared-error reformulation for ordinal classification](https://arxiv.org/abs/1612.00775) 2016 | [](pytorch_ipynb/ordinal/beckham2016_cement.ipynb) [](pytorch-lightning_ipynb/ordinal/beckham2016-light_cement.ipynb) |
| Class distance weighted cross-entropy loss | Cement | Implementation of [Class Distance Weighted Cross-Entropy Loss for Ulcerative Colitis Severity Estimation](https://arxiv.org/abs/2202.05167) 2022 | [](pytorch_ipynb/ordinal/polat2022_cement.ipynb) [](pytorch-lightning_ipynb/ordinal/polat2022-light_cement.ipynb) |
---
## Normalization Layers
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| BatchNorm before and after Activation for Network-in-Network CIFAR-10 Classifier | TBD | TBD | [](pytorch_ipynb/cnn/nin-cifar10_batchnorm.ipynb) |
| Filter Response Normalization for Network-in-Network CIFAR-10 Classifier | TBD | TBD | [](pytorch_ipynb/cnn/nin-cifar10_filter-response-norm.ipynb) |
## Metric Learning
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Siamese Network with Multilayer Perceptrons | TBD | TBD | [](tensorflow1_ipynb/metric/siamese-1.ipynb) |
## Autoencoders
#### Fully-connected Autoencoders
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Autoencoder (MNIST) | TBD | TBD | [](pytorch_ipynb/autoencoder/ae-basic.ipynb) [](tensorflow1_ipynb/autoencoder/ae-basic.ipynb) |
| Autoencoder (MNIST) + Scikit-Learn Random Forest Classifier | TBD | TBD | [](pytorch_ipynb/autoencoder/ae-basic-with-rf.ipynb) [](tensorflow1_ipynb/autoencoder/ae-basic-with-rf.ipynb) |
#### Convolutional Autoencoders
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Convolutional Autoencoder with Deconvolutions / Transposed Convolutions | TBD | TBD | [](pytorch_ipynb/autoencoder/ae-deconv.ipynb) [](tensorflow1_ipynb/autoencoder/ae-deconv.ipynb) |
| Convolutional Autoencoder with Deconvolutions and Continuous Jaccard Distance | TBD | TBD | [](pytorch_ipynb/autoencoder/ae-deconv-jaccard.ipynb) |
| Convolutional Autoencoder with Deconvolutions (without pooling operations) | TBD | TBD | [](pytorch_ipynb/autoencoder/ae-deconv-nopool.ipynb) |
| Convolutional Autoencoder with Nearest-neighbor Interpolation | TBD | TBD | [](pytorch_ipynb/autoencoder/ae-conv-nneighbor.ipynb) [](tensorflow1_ipynb/autoencoder/ae-conv-nneighbor.ipynb) |
| Convolutional Autoencoder with Nearest-neighbor Interpolation -- Trained on CelebA | TBD | TBD | [](pytorch_ipynb/autoencoder/ae-conv-nneighbor-celeba.ipynb) |
| Convolutional Autoencoder with Nearest-neighbor Interpolation -- Trained on Quickdraw | TBD | TBD | [](pytorch_ipynb/autoencoder/ae-conv-nneighbor-quickdraw-1.ipynb) |
#### Variational Autoencoders
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Variational Autoencoder | TBD | TBD | [](pytorch_ipynb/autoencoder/ae-var.ipynb) |
| Convolutional Variational Autoencoder | TBD | TBD | [](pytorch_ipynb/autoencoder/ae-conv-var.ipynb) |
#### Conditional Variational Autoencoders
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Conditional Variational Autoencoder (with labels in reconstruction loss) | TBD | TBD | [](pytorch_ipynb/autoencoder/ae-cvae.ipynb) |
| Conditional Variational Autoencoder (without labels in reconstruction loss) | TBD | TBD | [](pytorch_ipynb/autoencoder/ae-cvae_no-out-concat.ipynb) |
| Convolutional Conditional Variational Autoencoder (with labels in reconstruction loss) | TBD | TBD | [](pytorch_ipynb/autoencoder/ae-cnn-cvae.ipynb) |
| Convolutional Conditional Variational Autoencoder (without labels in reconstruction loss) | TBD | TBD | [](pytorch_ipynb/autoencoder/ae-cnn-cvae_no-out-concat.ipynb) |
## Generative Adversarial Networks (GANs)
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Fully Connected GAN on MNIST | TBD | TBD | [](pytorch_ipynb/gan/gan.ipynb) [](tensorflow1_ipynb/gan/gan.ipynb) |
| Fully Connected Wasserstein GAN on MNIST | TBD | TBD | [](pytorch_ipynb/gan/wgan-1.ipynb) |
| Convolutional GAN on MNIST | TBD | TBD | [](pytorch_ipynb/gan/gan-conv.ipynb) [](tensorflow1_ipynb/gan/gan-conv.ipynb) |
| Convolutional GAN on MNIST with Label Smoothing | TBD | TBD | [](pytorch_ipynb/gan/gan-conv-smoothing.ipynb) [](tensorflow1_ipynb/gan/gan-conv-smoothing.ipynb) |
| Convolutional Wasserstein GAN on MNIST | TBD | TBD | [](pytorch_ipynb/gan/dc-wgan-1.ipynb) |
| Deep Convolutional GAN (DCGAN) on Cats and Dogs Images | TBD | TBD | [](pytorch_ipynb/gan/dcgan-cats-and-dogs.ipynb) |
| Deep Convolutional GAN (DCGAN) on CelebA Face Images | TBD | TBD | [](pytorch_ipynb/gan/dcgan-celeba.ipynb) |
## Graph Neural Networks (GNNs)
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Most Basic Graph Neural Network with Gaussian Filter on MNIST | TBD | TBD | [](pytorch_ipynb/gnn/gnn-basic-1.ipynb) |
| Basic Graph Neural Network with Edge Prediction on MNIST | TBD | TBD | [](pytorch_ipynb/gnn/gnn-basic-edge-1.ipynb) |
| Basic Graph Neural Network with Spectral Graph Convolution on MNIST | TBD | TBD | [](pytorch_ipynb/gnn/gnn-basic-graph-spectral-1.ipynb) |
## Recurrent Neural Networks (RNNs)
#### Many-to-one: Sentiment Analysis / Classification
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| A simple single-layer RNN (IMDB) | TBD | TBD | [](pytorch_ipynb/rnn/rnn_simple_imdb.ipynb) |
| A simple single-layer RNN with packed sequences to ignore padding characters (IMDB) | TBD | TBD | [](pytorch_ipynb/rnn/rnn_simple_packed_imdb.ipynb) |
| RNN with LSTM cells (IMDB) | TBD | TBD | [](pytorch_ipynb/rnn/rnn_lstm_packed_imdb.ipynb) |
| RNN with LSTM cells (IMDB) and pre-trained GloVe word vectors | TBD | TBD | [](pytorch_ipynb/rnn/rnn_lstm_packed_imdb-glove.ipynb) |
| RNN with LSTM cells and Own Dataset in CSV Format (IMDB) | TBD | TBD | [](pytorch_ipynb/rnn/rnn_lstm_packed_own_csv_imdb.ipynb) |
| RNN with GRU cells (IMDB) | TBD | TBD | [](pytorch_ipynb/rnn/rnn_gru_packed_imdb.ipynb) |
| Multilayer bi-directional RNN (IMDB) | TBD | TBD | [](pytorch_ipynb/rnn/rnn_lstm_bi_imdb.ipynb) |
| Bidirectional Multi-layer RNN with LSTM with Own Dataset in CSV Format (AG News) | TBD | TBD | [](pytorch_ipynb/rnn/rnn_bi_multilayer_lstm_own_csv_agnews.ipynb) |
#### Many-to-Many / Sequence-to-Sequence
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| A simple character RNN to generate new text (Charles Dickens) | TBD | TBD | [](pytorch_ipynb/rnn/char_rnn-charlesdickens.ipynb) |
## Model Evaluation
### K-Fold Cross-Validation
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Baseline CNN | MNIST | A simple baseline with traditional train/validation/test splits | [](pytorch_ipynb/kfold/baseline-cnn-mnist.ipynb) [](pytorch-lightning_ipynb/kfold/baseline-light-cnn-mnist.ipynb) |
| K-fold with `pl_cross` | MNIST | A 5-fold cross-validation run using the `pl_cross` library | [](pytorch-lightning_ipynb/kfold/kfold-light-cnn-mnist.ipynb) |
## Data Augmentation
| Title | Dataset | Description | Notebooks |
| -------------------------- | ------- | ----------- | ------------------------------------------------------------ |
| AutoAugment & TrivialAugment for Image Data | CIFAR-10 | Trains a ResNet-18 using AutoAugment and TrivialAugment | [](./pytorch-lightning_ipynb/data-augmentation/autoaugment) |
## Tips and Tricks
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Cyclical Learning Rate | TBD | TBD | [](pytorch_ipynb/tricks/cyclical-learning-rate.ipynb) |
| Annealing with Increasing the Batch Size (w. CIFAR-10 & AlexNet) | TBD | TBD | [](pytorch_ipynb/tricks/cnn-alexnet-cifar10-batchincrease.ipynb) |
| Gradient Clipping (w. MLP on MNIST) | TBD | TBD | [](pytorch_ipynb/tricks/gradclipping_mlp.ipynb) |
## Transfer Learning
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Transfer Learning Example (VGG16 pre-trained on ImageNet for Cifar-10) | TBD | TBD | [](pytorch_ipynb/transfer/transferlearning-vgg16-cifar10-1.ipynb) |
## Visualization and Interpretation
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Vanilla Loss Gradient (wrt Inputs) Visualization (Based on a VGG16 Convolutional Neural Network for Kaggle's Cats and Dogs Images) | TBD | TBD | [](pytorch_ipynb/viz/cnns/cats-and-dogs/cnn-viz-grad__vgg16-cats-dogs.ipynb) |
| Guided Backpropagation (Based on a VGG16 Convolutional Neural Network for Kaggle's Cats and Dogs Images) | TBD | TBD | [](pytorch_ipynb/viz/cnns/cats-and-dogs/cnn-viz-guided-backprop__vgg16-cats-dogs.ipynb) |
## PyTorch Workflows and Mechanics
#### PyTorch Lightning Examples
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| MLP in Lightning with TensorBoard -- continue training the last model | TBD | TBD | [](pytorch_ipynb/lightning/lightning-mlp.ipynb) |
| MLP in Lightning with TensorBoard -- checkpointing best model | TBD | TBD | [](pytorch_ipynb/lightning/lightning-mlp-best-model) |
#### Custom Datasets
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Custom Data Loader Example for PNG Files | TBD | TBD | [](pytorch_ipynb/mechanics/custom-dataloader-png/custom-dataloader-example.ipynb) |
| Using PyTorch Dataset Loading Utilities for Custom Datasets -- CSV files converted to HDF5 | TBD | TBD | [](pytorch_ipynb/mechanics/custom-data-loader-csv.ipynb) |
| Using PyTorch Dataset Loading Utilities for Custom Datasets -- Face Images from CelebA | TBD | TBD | [](pytorch_ipynb/mechanics/custom-data-loader-celeba.ipynb) |
| Using PyTorch Dataset Loading Utilities for Custom Datasets -- Drawings from Quickdraw | TBD | TBD | [](pytorch_ipynb/mechanics/custom-data-loader-quickdraw.ipynb) |
| Using PyTorch Dataset Loading Utilities for Custom Datasets -- Drawings from the Street View House Number (SVHN) Dataset | TBD | TBD | [](pytorch_ipynb/mechanics/custom-data-loader-svhn.ipynb) |
| Using PyTorch Dataset Loading Utilities for Custom Datasets -- Asian Face Dataset (AFAD) | TBD | TBD | [](pytorch_ipynb/mechanics/custom-data-loader-afad.ipynb) |
| Using PyTorch Dataset Loading Utilities for Custom Datasets -- Dating Historical Color Images | TBD | TBD | [](pytorch_ipynb/mechanics/custom-data-loader_dating-historical-color-images.ipynb) |
| Using PyTorch Dataset Loading Utilities for Custom Datasets -- Fashion MNIST | TBD | TBD | [](pytorch_ipynb/mechanics/custom-data-loader-quickdraw.ipynb) |
#### Training and Preprocessing
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| PyTorch DataLoader State and Nested Iterations | Toy | Explains DataLoader behavior when in nested functions | [](pytorch_ipynb/mechanics/dataloader-nesting.ipynb)|
| Generating Validation Set Splits | TBD | TBD | [](pytorch_ipynb/mechanics/validation-splits.ipynb) |
| Dataloading with Pinned Memory | TBD | TBD | [](pytorch_ipynb/cnn/cnn-resnet34-cifar10-pinmem.ipynb) |
| Standardizing Images | TBD | TBD | [](pytorch_ipynb/cnn/cnn-standardized.ipynb) |
| Image Transformation Examples | TBD | TBD | [](pytorch_ipynb/mechanics/torchvision-transform-examples.ipynb) |
| Char-RNN with Own Text File | TBD | TBD | [](pytorch_ipynb/rnn/char_rnn-charlesdickens.ipynb) |
| Sentiment Classification RNN with Own CSV File | TBD | TBD | [](pytorch_ipynb/rnn/rnn_lstm_packed_own_csv_imdb.ipynb) |
#### Improving Memory Efficiency
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Gradient Checkpointing Demo (Network-in-Network trained on CIFAR-10) | TBD | TBD | [](pytorch_ipynb/mechanics/gradient-checkpointing-nin.ipynb) |
#### Parallel Computing
|Title | Description | Notebooks |
| --- | --- | --- |
| Using Multiple GPUs with DataParallel -- VGG-16 Gender Classifier on CelebA | TBD | [](pytorch_ipynb/cnn/cnn-vgg16-celeba-data-parallel.ipynb) |
| Distribute a Model Across Multiple GPUs with Pipeline Parallelism (VGG-16 Example) | TBD | [](pytorch_ipynb/mechanics/model-pipeline-vgg16.ipynb) |
#### Other
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| PyTorch with and without Deterministic Behavior -- Runtime Benchmark | TBD | TBD | [](pytorch_ipynb/mechanics/deterministic_benchmark.ipynb) |
| Sequential API and hooks | TBD | TBD | [](pytorch_ipynb/mechanics/mlp-sequential.ipynb) |
| Weight Sharing Within a Layer | TBD | TBD | [](pytorch_ipynb/mechanics/cnn-weight-sharing.ipynb) |
| Plotting Live Training Performance in Jupyter Notebooks with just Matplotlib | TBD | TBD | [](pytorch_ipynb/mechanics/plot-jupyter-matplotlib.ipynb) |
#### Autograd
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Getting Gradients of an Intermediate Variable in PyTorch | TBD | TBD | [](pytorch_ipynb/mechanics/manual-gradients.ipynb) |
## TensorFlow Workflows and Mechanics
#### Custom Datasets
|Title | Description | Notebooks |
| --- | --- | --- |
| Chunking an Image Dataset for Minibatch Training using NumPy NPZ Archives | TBD | [](tensorflow1_ipynb/mechanics/image-data-chunking-npz.ipynb) |
| Storing an Image Dataset for Minibatch Training using HDF5 | TBD | [](tensorflow1_ipynb/mechanics/image-data-chunking-hdf5.ipynb) |
| Using Input Pipelines to Read Data from TFRecords Files | TBD | [](tensorflow1_ipynb/mechanics/tfrecords.ipynb) |
| Using Queue Runners to Feed Images Directly from Disk | TBD | [](tensorflow1_ipynb/mechanics/file-queues.ipynb) |
| Using TensorFlow's Dataset API | TBD | [](tensorflow1_ipynb/mechanics/dataset-api.ipynb) |
#### Training and Preprocessing
|Title | Dataset | Description | Notebooks |
| --- | --- | --- | --- |
| Saving and Loading Trained Models -- from TensorFlow Checkpoint Files and NumPy NPZ Archives | TBD | TBD | [](tensorflow1_ipynb/mechanics/saving-and-reloading-models.ipynb) |
## Related Libraries
|Title | Description | Notebooks |
| --- | --- | --- |
| TorchMetrics | How do we use it, and what's the difference between .update() and .forward()? | [](pytorch_ipynb/related-libraries/torchmetrics-update-forward.ipynb) |
================================================
FILE: pytorch-lightning_ipynb/cnn/cnn-alexnet-cifar10.ipynb
================================================
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "9c9ec640",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"torch : 1.10.1\n",
"pytorch_lightning: 1.5.1\n",
"torchmetrics : 0.6.2\n",
"matplotlib : 3.3.4\n",
"\n"
]
}
],
"source": [
"%load_ext watermark\n",
"%watermark -p torch,pytorch_lightning,torchmetrics,matplotlib"
]
},
{
"cell_type": "markdown",
"id": "f85dcc1e",
"metadata": {},
"source": [
"The three extensions below are optional, for more information, see\n",
"- `watermark`: https://github.com/rasbt/watermark\n",
"- `pycodestyle_magic`: https://github.com/mattijn/pycodestyle_magic\n",
"- `nb_black`: https://github.com/dnanhkhoa/nb_black"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "c28bc5ac",
"metadata": {},
"outputs": [],
"source": [
"%load_ext pycodestyle_magic\n",
"%flake8_on --ignore W291,W293,E703,E402,E999 --max_line_length=100"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "43d420d1",
"metadata": {},
"outputs": [
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 3;\n",
" var nbb_unformatted_code = \"%load_ext nb_black\";\n",
" var nbb_formatted_code = \"%load_ext nb_black\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%load_ext nb_black"
]
},
{
"cell_type": "markdown",
"id": "517d2bf4",
"metadata": {},
"source": [
"<a href=\"https://pytorch.org\"><img src=\"https://raw.githubusercontent.com/pytorch/pytorch/master/docs/source/_static/img/pytorch-logo-dark.svg\" width=\"90\"/></a> <a href=\"https://www.pytorchlightning.ai\"><img src=\"https://raw.githubusercontent.com/PyTorchLightning/pytorch-lightning/master/docs/source/_static/images/logo.svg\" width=\"150\"/></a>\n",
"\n",
"# AlexNet Trained on CIFAR-10"
]
},
{
"cell_type": "markdown",
"id": "d37a7a82",
"metadata": {},
"source": [
"AlexNet [1][2] trained on CIFAR-10 [3].\n",
"\n",
"### References\n",
"\n",
"- [1] L13.7 CNN Architectures & AlexNet (20:17), https://www.youtube.com/watch?v=-IHxe4-09e4\n",
"- [2] Imagenet classification with deep convolutional neural networks, https://proceedings.neurips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf\n",
"- [3] https://en.wikipedia.org/wiki/CIFAR-10"
]
},
{
"cell_type": "markdown",
"id": "0d9eeb2a",
"metadata": {},
"source": [
"## General settings and hyperparameters"
]
},
{
"cell_type": "markdown",
"id": "37bb3dc1",
"metadata": {},
"source": [
"- Here, we specify some general hyperparameter values and general settings."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "8350f2d0",
"metadata": {},
"outputs": [
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 4;\n",
" var nbb_unformatted_code = \"BATCH_SIZE = 256\\nNUM_EPOCHS = 40\\nLEARNING_RATE = 0.0001\\nNUM_WORKERS = 4\";\n",
" var nbb_formatted_code = \"BATCH_SIZE = 256\\nNUM_EPOCHS = 40\\nLEARNING_RATE = 0.0001\\nNUM_WORKERS = 4\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"BATCH_SIZE = 256\n",
"NUM_EPOCHS = 40\n",
"LEARNING_RATE = 0.0001\n",
"NUM_WORKERS = 4"
]
},
{
"cell_type": "markdown",
"id": "6517b50d",
"metadata": {},
"source": [
"- Note that using multiple workers can sometimes cause issues with too many open files in PyTorch for small datasets. If we have problems with the data loader later, try setting `NUM_WORKERS = 0` and reload the notebook."
]
},
{
"cell_type": "markdown",
"id": "7938d4cf",
"metadata": {},
"source": [
"## Implementing a Neural Network using PyTorch Lightning's `LightningModule`"
]
},
{
"cell_type": "markdown",
"id": "ddb917fd",
"metadata": {},
"source": [
"- In this section, we set up the main model architecture using the `LightningModule` from PyTorch Lightning.\n",
"- In essence, `LightningModule` is a wrapper around a PyTorch module.\n",
"- We start with defining our neural network model in pure PyTorch, and then we use it in the `LightningModule` to get all the extra benefits that PyTorch Lightning provides."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "061ba942",
"metadata": {},
"outputs": [
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 5;\n",
" var nbb_unformatted_code = \"import torch.nn as nn\\nimport torch.nn.functional as F\\n\\n\\n# Regular PyTorch Module\\nclass PyTorchModel(nn.Module):\\n def __init__(self, num_classes):\\n super().__init__()\\n self.features = nn.Sequential(\\n nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2),\\n nn.ReLU(inplace=True),\\n nn.MaxPool2d(kernel_size=3, stride=2),\\n nn.Conv2d(64, 192, kernel_size=5, padding=2),\\n nn.ReLU(inplace=True),\\n nn.MaxPool2d(kernel_size=3, stride=2),\\n nn.Conv2d(192, 384, kernel_size=3, padding=1),\\n nn.ReLU(inplace=True),\\n nn.Conv2d(384, 256, kernel_size=3, padding=1),\\n nn.ReLU(inplace=True),\\n nn.Conv2d(256, 256, kernel_size=3, padding=1),\\n nn.ReLU(inplace=True),\\n nn.MaxPool2d(kernel_size=3, stride=2),\\n )\\n self.avgpool = nn.AdaptiveAvgPool2d((6, 6))\\n self.classifier = nn.Sequential(\\n nn.Dropout(0.5),\\n nn.Linear(256 * 6 * 6, 4096),\\n nn.ReLU(inplace=True),\\n nn.Dropout(0.5),\\n nn.Linear(4096, 4096),\\n nn.ReLU(inplace=True),\\n nn.Linear(4096, num_classes)\\n )\\n\\n def forward(self, x):\\n x = self.features(x)\\n x = self.avgpool(x)\\n x = torch.flatten(x, start_dim=1)\\n logits = self.classifier(x)\\n return logits\";\n",
" var nbb_formatted_code = \"import torch.nn as nn\\nimport torch.nn.functional as F\\n\\n\\n# Regular PyTorch Module\\nclass PyTorchModel(nn.Module):\\n def __init__(self, num_classes):\\n super().__init__()\\n self.features = nn.Sequential(\\n nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2),\\n nn.ReLU(inplace=True),\\n nn.MaxPool2d(kernel_size=3, stride=2),\\n nn.Conv2d(64, 192, kernel_size=5, padding=2),\\n nn.ReLU(inplace=True),\\n nn.MaxPool2d(kernel_size=3, stride=2),\\n nn.Conv2d(192, 384, kernel_size=3, padding=1),\\n nn.ReLU(inplace=True),\\n nn.Conv2d(384, 256, kernel_size=3, padding=1),\\n nn.ReLU(inplace=True),\\n nn.Conv2d(256, 256, kernel_size=3, padding=1),\\n nn.ReLU(inplace=True),\\n nn.MaxPool2d(kernel_size=3, stride=2),\\n )\\n self.avgpool = nn.AdaptiveAvgPool2d((6, 6))\\n self.classifier = nn.Sequential(\\n nn.Dropout(0.5),\\n nn.Linear(256 * 6 * 6, 4096),\\n nn.ReLU(inplace=True),\\n nn.Dropout(0.5),\\n nn.Linear(4096, 4096),\\n nn.ReLU(inplace=True),\\n nn.Linear(4096, num_classes),\\n )\\n\\n def forward(self, x):\\n x = self.features(x)\\n x = self.avgpool(x)\\n x = torch.flatten(x, start_dim=1)\\n logits = self.classifier(x)\\n return logits\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import torch.nn as nn\n",
"import torch.nn.functional as F\n",
"\n",
"\n",
"# Regular PyTorch Module\n",
"class PyTorchModel(nn.Module):\n",
" def __init__(self, num_classes):\n",
" super().__init__()\n",
" self.features = nn.Sequential(\n",
" nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2),\n",
" nn.ReLU(inplace=True),\n",
" nn.MaxPool2d(kernel_size=3, stride=2),\n",
" nn.Conv2d(64, 192, kernel_size=5, padding=2),\n",
" nn.ReLU(inplace=True),\n",
" nn.MaxPool2d(kernel_size=3, stride=2),\n",
" nn.Conv2d(192, 384, kernel_size=3, padding=1),\n",
" nn.ReLU(inplace=True),\n",
" nn.Conv2d(384, 256, kernel_size=3, padding=1),\n",
" nn.ReLU(inplace=True),\n",
" nn.Conv2d(256, 256, kernel_size=3, padding=1),\n",
" nn.ReLU(inplace=True),\n",
" nn.MaxPool2d(kernel_size=3, stride=2),\n",
" )\n",
" self.avgpool = nn.AdaptiveAvgPool2d((6, 6))\n",
" self.classifier = nn.Sequential(\n",
" nn.Dropout(0.5),\n",
" nn.Linear(256 * 6 * 6, 4096),\n",
" nn.ReLU(inplace=True),\n",
" nn.Dropout(0.5),\n",
" nn.Linear(4096, 4096),\n",
" nn.ReLU(inplace=True),\n",
" nn.Linear(4096, num_classes)\n",
" )\n",
"\n",
" def forward(self, x):\n",
" x = self.features(x)\n",
" x = self.avgpool(x)\n",
" x = torch.flatten(x, start_dim=1)\n",
" logits = self.classifier(x)\n",
" return logits"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "449af085",
"metadata": {},
"outputs": [
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 6;\n",
" var nbb_unformatted_code = \"# %load ../code_lightningmodule/lightningmodule_classifier_basic.py\\nimport pytorch_lightning as pl\\nimport torchmetrics\\n\\n\\n# LightningModule that receives a PyTorch model as input\\nclass LightningModel(pl.LightningModule):\\n def __init__(self, model, learning_rate):\\n super().__init__()\\n\\n self.learning_rate = learning_rate\\n # The inherited PyTorch module\\n self.model = model\\n if hasattr(model, \\\"dropout_proba\\\"):\\n self.dropout_proba = model.dropout_proba\\n\\n # Save settings and hyperparameters to the log directory\\n # but skip the model parameters\\n self.save_hyperparameters(ignore=[\\\"model\\\"])\\n\\n # Set up attributes for computing the accuracy\\n self.train_acc = torchmetrics.Accuracy()\\n self.valid_acc = torchmetrics.Accuracy()\\n self.test_acc = torchmetrics.Accuracy()\\n\\n # Defining the forward method is only necessary\\n # if you want to use a Trainer's .predict() method (optional)\\n def forward(self, x):\\n return self.model(x)\\n\\n # A common forward step to compute the loss and labels\\n # this is used for training, validation, and testing below\\n def _shared_step(self, batch):\\n features, true_labels = batch\\n logits = self(features)\\n loss = torch.nn.functional.cross_entropy(logits, true_labels)\\n predicted_labels = torch.argmax(logits, dim=1)\\n\\n return loss, true_labels, predicted_labels\\n\\n def training_step(self, batch, batch_idx):\\n loss, true_labels, predicted_labels = self._shared_step(batch)\\n self.log(\\\"train_loss\\\", loss)\\n\\n # Do another forward pass in .eval() mode to compute accuracy\\n # while accountingfor Dropout, BatchNorm etc. behavior\\n # during evaluation (inference)\\n self.model.eval()\\n with torch.no_grad():\\n _, true_labels, predicted_labels = self._shared_step(batch)\\n self.train_acc(predicted_labels, true_labels)\\n self.log(\\\"train_acc\\\", self.train_acc, on_epoch=True, on_step=False)\\n self.model.train()\\n\\n return loss # this is passed to the optimzer for training\\n\\n def validation_step(self, batch, batch_idx):\\n loss, true_labels, predicted_labels = self._shared_step(batch)\\n self.log(\\\"valid_loss\\\", loss)\\n self.valid_acc(predicted_labels, true_labels)\\n self.log(\\n \\\"valid_acc\\\",\\n self.valid_acc,\\n on_epoch=True,\\n on_step=False,\\n prog_bar=True,\\n )\\n\\n def test_step(self, batch, batch_idx):\\n loss, true_labels, predicted_labels = self._shared_step(batch)\\n self.test_acc(predicted_labels, true_labels)\\n self.log(\\\"test_acc\\\", self.test_acc, on_epoch=True, on_step=False)\\n\\n def configure_optimizers(self):\\n optimizer = torch.optim.Adam(self.parameters(), lr=self.learning_rate)\\n return optimizer\";\n",
" var nbb_formatted_code = \"# %load ../code_lightningmodule/lightningmodule_classifier_basic.py\\nimport pytorch_lightning as pl\\nimport torchmetrics\\n\\n\\n# LightningModule that receives a PyTorch model as input\\nclass LightningModel(pl.LightningModule):\\n def __init__(self, model, learning_rate):\\n super().__init__()\\n\\n self.learning_rate = learning_rate\\n # The inherited PyTorch module\\n self.model = model\\n if hasattr(model, \\\"dropout_proba\\\"):\\n self.dropout_proba = model.dropout_proba\\n\\n # Save settings and hyperparameters to the log directory\\n # but skip the model parameters\\n self.save_hyperparameters(ignore=[\\\"model\\\"])\\n\\n # Set up attributes for computing the accuracy\\n self.train_acc = torchmetrics.Accuracy()\\n self.valid_acc = torchmetrics.Accuracy()\\n self.test_acc = torchmetrics.Accuracy()\\n\\n # Defining the forward method is only necessary\\n # if you want to use a Trainer's .predict() method (optional)\\n def forward(self, x):\\n return self.model(x)\\n\\n # A common forward step to compute the loss and labels\\n # this is used for training, validation, and testing below\\n def _shared_step(self, batch):\\n features, true_labels = batch\\n logits = self(features)\\n loss = torch.nn.functional.cross_entropy(logits, true_labels)\\n predicted_labels = torch.argmax(logits, dim=1)\\n\\n return loss, true_labels, predicted_labels\\n\\n def training_step(self, batch, batch_idx):\\n loss, true_labels, predicted_labels = self._shared_step(batch)\\n self.log(\\\"train_loss\\\", loss)\\n\\n # Do another forward pass in .eval() mode to compute accuracy\\n # while accountingfor Dropout, BatchNorm etc. behavior\\n # during evaluation (inference)\\n self.model.eval()\\n with torch.no_grad():\\n _, true_labels, predicted_labels = self._shared_step(batch)\\n self.train_acc(predicted_labels, true_labels)\\n self.log(\\\"train_acc\\\", self.train_acc, on_epoch=True, on_step=False)\\n self.model.train()\\n\\n return loss # this is passed to the optimzer for training\\n\\n def validation_step(self, batch, batch_idx):\\n loss, true_labels, predicted_labels = self._shared_step(batch)\\n self.log(\\\"valid_loss\\\", loss)\\n self.valid_acc(predicted_labels, true_labels)\\n self.log(\\n \\\"valid_acc\\\",\\n self.valid_acc,\\n on_epoch=True,\\n on_step=False,\\n prog_bar=True,\\n )\\n\\n def test_step(self, batch, batch_idx):\\n loss, true_labels, predicted_labels = self._shared_step(batch)\\n self.test_acc(predicted_labels, true_labels)\\n self.log(\\\"test_acc\\\", self.test_acc, on_epoch=True, on_step=False)\\n\\n def configure_optimizers(self):\\n optimizer = torch.optim.Adam(self.parameters(), lr=self.learning_rate)\\n return optimizer\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# %load ../code_lightningmodule/lightningmodule_classifier_basic.py\n",
"import pytorch_lightning as pl\n",
"import torchmetrics\n",
"\n",
"\n",
"# LightningModule that receives a PyTorch model as input\n",
"class LightningModel(pl.LightningModule):\n",
" def __init__(self, model, learning_rate):\n",
" super().__init__()\n",
"\n",
" self.learning_rate = learning_rate\n",
" # The inherited PyTorch module\n",
" self.model = model\n",
" if hasattr(model, \"dropout_proba\"):\n",
" self.dropout_proba = model.dropout_proba\n",
"\n",
" # Save settings and hyperparameters to the log directory\n",
" # but skip the model parameters\n",
" self.save_hyperparameters(ignore=[\"model\"])\n",
"\n",
" # Set up attributes for computing the accuracy\n",
" self.train_acc = torchmetrics.Accuracy()\n",
" self.valid_acc = torchmetrics.Accuracy()\n",
" self.test_acc = torchmetrics.Accuracy()\n",
"\n",
" # Defining the forward method is only necessary\n",
" # if you want to use a Trainer's .predict() method (optional)\n",
" def forward(self, x):\n",
" return self.model(x)\n",
"\n",
" # A common forward step to compute the loss and labels\n",
" # this is used for training, validation, and testing below\n",
" def _shared_step(self, batch):\n",
" features, true_labels = batch\n",
" logits = self(features)\n",
" loss = torch.nn.functional.cross_entropy(logits, true_labels)\n",
" predicted_labels = torch.argmax(logits, dim=1)\n",
"\n",
" return loss, true_labels, predicted_labels\n",
"\n",
" def training_step(self, batch, batch_idx):\n",
" loss, true_labels, predicted_labels = self._shared_step(batch)\n",
" self.log(\"train_loss\", loss)\n",
"\n",
" # Do another forward pass in .eval() mode to compute accuracy\n",
" # while accountingfor Dropout, BatchNorm etc. behavior\n",
" # during evaluation (inference)\n",
" self.model.eval()\n",
" with torch.no_grad():\n",
" _, true_labels, predicted_labels = self._shared_step(batch)\n",
" self.train_acc(predicted_labels, true_labels)\n",
" self.log(\"train_acc\", self.train_acc, on_epoch=True, on_step=False)\n",
" self.model.train()\n",
"\n",
" return loss # this is passed to the optimzer for training\n",
"\n",
" def validation_step(self, batch, batch_idx):\n",
" loss, true_labels, predicted_labels = self._shared_step(batch)\n",
" self.log(\"valid_loss\", loss)\n",
" self.valid_acc(predicted_labels, true_labels)\n",
" self.log(\n",
" \"valid_acc\",\n",
" self.valid_acc,\n",
" on_epoch=True,\n",
" on_step=False,\n",
" prog_bar=True,\n",
" )\n",
"\n",
" def test_step(self, batch, batch_idx):\n",
" loss, true_labels, predicted_labels = self._shared_step(batch)\n",
" self.test_acc(predicted_labels, true_labels)\n",
" self.log(\"test_acc\", self.test_acc, on_epoch=True, on_step=False)\n",
"\n",
" def configure_optimizers(self):\n",
" optimizer = torch.optim.Adam(self.parameters(), lr=self.learning_rate)\n",
" return optimizer"
]
},
{
"cell_type": "markdown",
"id": "007135a4",
"metadata": {},
"source": [
"## Setting up the dataset"
]
},
{
"cell_type": "markdown",
"id": "ebdfebbb",
"metadata": {},
"source": [
"- In this section, we are going to set up our dataset."
]
},
{
"cell_type": "markdown",
"id": "db9e40b9",
"metadata": {},
"source": [
"### Inspecting the dataset"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "ed84f607",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Files already downloaded and verified\n",
"\n",
"Training label distribution:\n",
"\n",
"Test label distribution:\n"
]
},
{
"data": {
"text/plain": [
"[(0, 1000),\n",
" (1, 1000),\n",
" (2, 1000),\n",
" (3, 1000),\n",
" (4, 1000),\n",
" (5, 1000),\n",
" (6, 1000),\n",
" (7, 1000),\n",
" (8, 1000),\n",
" (9, 1000)]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 7;\n",
" var nbb_unformatted_code = \"# %load ../code_dataset/dataset_cifar10_check.py\\nfrom collections import Counter\\nfrom torchvision import datasets\\nfrom torchvision import transforms\\nfrom torch.utils.data import DataLoader\\n\\n\\ntrain_dataset = datasets.CIFAR10(\\n root=\\\"./data\\\", train=True, transform=transforms.ToTensor(), download=True\\n)\\n\\ntrain_loader = DataLoader(\\n dataset=train_dataset,\\n batch_size=BATCH_SIZE,\\n num_workers=NUM_WORKERS,\\n drop_last=True,\\n shuffle=True,\\n)\\n\\ntest_dataset = datasets.CIFAR10(\\n root=\\\"./data\\\", train=False, transform=transforms.ToTensor()\\n)\\n\\ntest_loader = DataLoader(\\n dataset=test_dataset,\\n batch_size=BATCH_SIZE,\\n num_workers=NUM_WORKERS,\\n drop_last=False,\\n shuffle=False,\\n)\\n\\ntrain_counter = Counter()\\nfor images, labels in train_loader:\\n train_counter.update(labels.tolist())\\n\\ntest_counter = Counter()\\nfor images, labels in test_loader:\\n test_counter.update(labels.tolist())\\n\\nprint(\\\"\\\\nTraining label distribution:\\\")\\nsorted(train_counter.items())\\n\\nprint(\\\"\\\\nTest label distribution:\\\")\\nsorted(test_counter.items())\";\n",
" var nbb_formatted_code = \"# %load ../code_dataset/dataset_cifar10_check.py\\nfrom collections import Counter\\nfrom torchvision import datasets\\nfrom torchvision import transforms\\nfrom torch.utils.data import DataLoader\\n\\n\\ntrain_dataset = datasets.CIFAR10(\\n root=\\\"./data\\\", train=True, transform=transforms.ToTensor(), download=True\\n)\\n\\ntrain_loader = DataLoader(\\n dataset=train_dataset,\\n batch_size=BATCH_SIZE,\\n num_workers=NUM_WORKERS,\\n drop_last=True,\\n shuffle=True,\\n)\\n\\ntest_dataset = datasets.CIFAR10(\\n root=\\\"./data\\\", train=False, transform=transforms.ToTensor()\\n)\\n\\ntest_loader = DataLoader(\\n dataset=test_dataset,\\n batch_size=BATCH_SIZE,\\n num_workers=NUM_WORKERS,\\n drop_last=False,\\n shuffle=False,\\n)\\n\\ntrain_counter = Counter()\\nfor images, labels in train_loader:\\n train_counter.update(labels.tolist())\\n\\ntest_counter = Counter()\\nfor images, labels in test_loader:\\n test_counter.update(labels.tolist())\\n\\nprint(\\\"\\\\nTraining label distribution:\\\")\\nsorted(train_counter.items())\\n\\nprint(\\\"\\\\nTest label distribution:\\\")\\nsorted(test_counter.items())\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# %load ../code_dataset/dataset_cifar10_check.py\n",
"from collections import Counter\n",
"from torchvision import datasets\n",
"from torchvision import transforms\n",
"from torch.utils.data import DataLoader\n",
"\n",
"\n",
"train_dataset = datasets.CIFAR10(\n",
" root=\"./data\", train=True, transform=transforms.ToTensor(), download=True\n",
")\n",
"\n",
"train_loader = DataLoader(\n",
" dataset=train_dataset,\n",
" batch_size=BATCH_SIZE,\n",
" num_workers=NUM_WORKERS,\n",
" drop_last=True,\n",
" shuffle=True,\n",
")\n",
"\n",
"test_dataset = datasets.CIFAR10(\n",
" root=\"./data\", train=False, transform=transforms.ToTensor()\n",
")\n",
"\n",
"test_loader = DataLoader(\n",
" dataset=test_dataset,\n",
" batch_size=BATCH_SIZE,\n",
" num_workers=NUM_WORKERS,\n",
" drop_last=False,\n",
" shuffle=False,\n",
")\n",
"\n",
"train_counter = Counter()\n",
"for images, labels in train_loader:\n",
" train_counter.update(labels.tolist())\n",
"\n",
"test_counter = Counter()\n",
"for images, labels in test_loader:\n",
" test_counter.update(labels.tolist())\n",
"\n",
"print(\"\\nTraining label distribution:\")\n",
"sorted(train_counter.items())\n",
"\n",
"print(\"\\nTest label distribution:\")\n",
"sorted(test_counter.items())"
]
},
{
"cell_type": "markdown",
"id": "3b2403d4",
"metadata": {},
"source": [
"### Performance baseline"
]
},
{
"cell_type": "markdown",
"id": "8c800bfc",
"metadata": {},
"source": [
"- Especially for imbalanced datasets, it's pretty helpful to compute a performance baseline.\n",
"- In classification contexts, a useful baseline is to compute the accuracy for a scenario where the model always predicts the majority class -- we want our model to be better than that!"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "5d6f9749",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Majority class: 3\n",
"Accuracy when always predicting the majority class:\n",
"0.10 (10.00%)\n"
]
},
{
"data": {
"application/javascript": [
"\n",
" setTimeout(function() {\n",
" var nbb_cell_id = 8;\n",
" var nbb_unformatted_code = \"# %load ../code_dataset/performance_baseline.py\\nmajority_class = test_counter.most_common(1)[0]\\nprint(\\\"Majority class:\\\", majority_class[0])\\n\\nbaseline_acc = majority_class[1] / sum(test_counter.values())\\nprint(\\\"Accuracy when always predicting the majority class:\\\")\\nprint(f\\\"{baseline_acc:.2f} ({baseline_acc*100:.2f}%)\\\")\";\n",
" var nbb_formatted_code = \"# %load ../code_dataset/performance_baseline.py\\nmajority_class = test_counter.most_common(1)[0]\\nprint(\\\"Majority class:\\\", majority_class[0])\\n\\nbaseline_acc = majority_class[1] / sum(test_counter.values())\\nprint(\\\"Accuracy when always predicting the majority class:\\\")\\nprint(f\\\"{baseline_acc:.2f} ({baseline_acc*100:.2f}%)\\\")\";\n",
" var nbb_cells = Jupyter.notebook.get_cells();\n",
" for (var i = 0; i < nbb_cells.length; ++i) {\n",
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n",
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n",
" nbb_cells[i].set_text(nbb_formatted_code);\n",
" }\n",
" break;\n",
" }\n",
" }\n",
" }, 500);\n",
" "
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# %load ../code_dataset/performance_baseline.py\n",
"majority_class = test_counter.most_common(1)[0]\n",
"print(\"Majority class:\", majority_class[0])\n",
"\n",
"baseline_acc = majority_class[1] / sum(test_counter.values())\n",
"print(\"Accuracy when always predicting the majority class:\")\n",
"print(f\"{baseline_acc:.2f} ({baseline_acc*100:.2f}%)\")"
]
},
{
"cell_type": "markdown",
"id": "350d3627",
"metadata": {},
"source": [
"## A quick visual check"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "9261f0a1",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
gitextract_bct7j2tf/
├── .gitignore
├── .pep8speaks.yml
├── LICENSE
├── README.md
├── pytorch-lightning_ipynb/
│ ├── cnn/
│ │ ├── cnn-alexnet-cifar10.ipynb
│ │ ├── cnn-alexnet-grouped-cifar10.ipynb
│ │ ├── cnn-allconv.ipynb
│ │ ├── cnn-basic.ipynb
│ │ ├── cnn-densenet121-cifar10.ipynb
│ │ ├── cnn-densenet121-mnist.ipynb
│ │ ├── cnn-he-init.ipynb
│ │ ├── cnn-lenet5-cifar10.ipynb
│ │ ├── cnn-lenet5-mnist.ipynb
│ │ ├── cnn-lenet5-quickdraw.ipynb
│ │ ├── cnn-mobilenet-v2-cifar10-2.ipynb
│ │ ├── cnn-mobilenet-v2-cifar10.ipynb
│ │ ├── cnn-mobilenet-v3-large-cifar10.ipynb
│ │ ├── cnn-mobilenet-v3-small-cifar10.ipynb
│ │ ├── cnn-nin-cifar10.ipynb
│ │ ├── cnn-vgg16-celeba.ipynb
│ │ ├── cnn-vgg16.ipynb
│ │ └── cnn-vgg19.ipynb
│ ├── data-augmentation/
│ │ └── autoaugment/
│ │ ├── helper_utilities.py
│ │ ├── with-autoaugment.ipynb
│ │ ├── with-trivialaugment.ipynb
│ │ └── without-augmentation.ipynb
│ ├── kfold/
│ │ ├── baseline-light-cnn-mnist.ipynb
│ │ └── kfold-light-cnn-mnist.ipynb
│ ├── mlp/
│ │ ├── mlp-basic.ipynb
│ │ ├── mlp-batchnorm.ipynb
│ │ ├── mlp-dropout.ipynb
│ │ └── template_classification_basic.ipynb
│ ├── ordinal/
│ │ ├── CORAL-light_cement.ipynb
│ │ ├── CORN-light_cement.ipynb
│ │ ├── baseline-light_cement.ipynb
│ │ ├── beckham2016-light_cement.ipynb
│ │ ├── niu2016-light_cement.ipynb
│ │ └── polat2022-light_cement.ipynb
│ └── transformer/
│ ├── distilbert-finetune-last-layers.ipynb
│ ├── distilbert-finetune-scheduler.ipynb
│ ├── distilbert-finetuning-ii-amp/
│ │ ├── distilbert-finetuning-ii-2.ipynb
│ │ ├── distilbert-finetuning-ii-amp16.ipynb
│ │ └── distilbert-finetuning-ii-ampb16.ipynb
│ └── distilbert-finetuning-ii.ipynb
├── pytorch_ipynb/
│ ├── autoencoder/
│ │ ├── ae-basic-with-rf.ipynb
│ │ ├── ae-basic.ipynb
│ │ ├── ae-cnn-cvae.ipynb
│ │ ├── ae-cnn-cvae_no-out-concat.ipynb
│ │ ├── ae-conv-nneighbor-celeba.ipynb
│ │ ├── ae-conv-nneighbor-quickdraw-1.ipynb
│ │ ├── ae-conv-nneighbor.ipynb
│ │ ├── ae-conv-var.ipynb
│ │ ├── ae-cvae.ipynb
│ │ ├── ae-cvae_no-out-concat.ipynb
│ │ ├── ae-deconv-jaccard.ipynb
│ │ ├── ae-deconv-nopool.ipynb
│ │ ├── ae-deconv.ipynb
│ │ └── ae-var.ipynb
│ ├── basic-ml/
│ │ ├── logistic-regression.ipynb
│ │ ├── perceptron.ipynb
│ │ ├── softmax-regression-mlxtend-1.ipynb
│ │ └── softmax-regression.ipynb
│ ├── cnn/
│ │ ├── cnn-alexnet-cifar10-grouped.ipynb
│ │ ├── cnn-alexnet-cifar10.ipynb
│ │ ├── cnn-allconv.ipynb
│ │ ├── cnn-basic.ipynb
│ │ ├── cnn-densenet121-cifar10.ipynb
│ │ ├── cnn-densenet121-mnist.ipynb
│ │ ├── cnn-embetter-mobilenet.ipynb
│ │ ├── cnn-he-init.ipynb
│ │ ├── cnn-lenet5-cifar10.ipynb
│ │ ├── cnn-lenet5-mnist.ipynb
│ │ ├── cnn-lenet5-quickdraw.ipynb
│ │ ├── cnn-mobilenet-v2-cifar10.ipynb
│ │ ├── cnn-mobilenet-v3-large-cifar10.ipynb
│ │ ├── cnn-mobilenet-v3-small-cifar10.ipynb
│ │ ├── cnn-resnet101-celeba.ipynb
│ │ ├── cnn-resnet101-cifar10.ipynb
│ │ ├── cnn-resnet152-celeba.ipynb
│ │ ├── cnn-resnet18-celeba-dataparallel.ipynb
│ │ ├── cnn-resnet18-mnist.ipynb
│ │ ├── cnn-resnet34-celeba-dataparallel.ipynb
│ │ ├── cnn-resnet34-cifar10-pinmem.ipynb
│ │ ├── cnn-resnet34-mnist.ipynb
│ │ ├── cnn-resnet34-quickdraw.ipynb
│ │ ├── cnn-resnet50-celeba-dataparallel.ipynb
│ │ ├── cnn-resnet50-mnist.ipynb
│ │ ├── cnn-standardized.ipynb
│ │ ├── cnn-vgg16-cats-dogs.ipynb
│ │ ├── cnn-vgg16-celeba-data-parallel.ipynb
│ │ ├── cnn-vgg16-celeba.ipynb
│ │ ├── cnn-vgg16.ipynb
│ │ ├── cnn-vgg19.ipynb
│ │ ├── fc-to-conv.ipynb
│ │ ├── nin-cifar10.ipynb
│ │ ├── nin-cifar10_batchnorm.ipynb
│ │ ├── nin-cifar10_filter-response-norm.ipynb
│ │ └── resnet-ex-1.ipynb
│ ├── data/
│ │ ├── iris.data
│ │ └── perceptron_toydata.txt
│ ├── gan/
│ │ ├── dc-wgan-1.ipynb
│ │ ├── dcgan-cats-and-dogs.ipynb
│ │ ├── dcgan-celeba.ipynb
│ │ ├── gan-conv-smoothing.ipynb
│ │ ├── gan-conv.ipynb
│ │ ├── gan.ipynb
│ │ └── wgan-1.ipynb
│ ├── gnn/
│ │ ├── gnn-basic-1.ipynb
│ │ ├── gnn-basic-edge-1.ipynb
│ │ └── gnn-basic-graph-spectral-1.ipynb
│ ├── helper.py
│ ├── helper_data.py
│ ├── helper_evaluate.py
│ ├── helper_plotting.py
│ ├── helper_train.py
│ ├── helper_utils.py
│ ├── images/
│ │ └── alexnet/
│ │ └── grouped-convolutions.pptx
│ ├── kfold/
│ │ └── baseline-cnn-mnist.ipynb
│ ├── lightning/
│ │ ├── lightning-mlp-best-model.ipynb
│ │ └── lightning-mlp.ipynb
│ ├── mechanics/
│ │ ├── cnn-weight-sharing.ipynb
│ │ ├── custom-data-loader-afad.ipynb
│ │ ├── custom-data-loader-celeba.ipynb
│ │ ├── custom-data-loader-csv.ipynb
│ │ ├── custom-data-loader-fashionmnist.ipynb
│ │ ├── custom-data-loader-mnist.ipynb
│ │ ├── custom-data-loader-quickdraw.ipynb
│ │ ├── custom-data-loader-svhn.ipynb
│ │ ├── custom-data-loader_dating-historical-color-images.ipynb
│ │ ├── custom-dataloader-png/
│ │ │ └── custom-dataloader-example.ipynb
│ │ ├── dataloader-nesting.ipynb
│ │ ├── deterministic_benchmark.ipynb
│ │ ├── deterministic_benchmark_utils.py
│ │ ├── gradient-checkpointing-nin.ipynb
│ │ ├── manual-gradients.ipynb
│ │ ├── mlp-sequential.ipynb
│ │ ├── model-pipeline-vgg16.ipynb
│ │ ├── plot-jupyter-matplotlib.ipynb
│ │ ├── torchvision-transform-examples.ipynb
│ │ ├── transferlearning-vgg16.ipynb
│ │ └── validation-splits.ipynb
│ ├── mlp/
│ │ ├── mlp-basic.ipynb
│ │ ├── mlp-batchnorm.ipynb
│ │ ├── mlp-dropout.ipynb
│ │ └── mlp-fromscratch__sigmoid-mse.ipynb
│ ├── ordinal/
│ │ ├── CORAL_cement.ipynb
│ │ ├── CORN_cement.ipynb
│ │ ├── baseline_cement.ipynb
│ │ ├── beckham2016_cement.ipynb
│ │ ├── niu2016_cement.ipynb
│ │ └── polat2022_cement.ipynb
│ ├── related-libraries/
│ │ └── torchmetrics-update-forward.ipynb
│ ├── rnn/
│ │ ├── char_rnn-charlesdickens.ipynb
│ │ ├── rnn_bi_multilayer_lstm_own_csv_agnews.ipynb
│ │ ├── rnn_gru_packed_imdb.ipynb
│ │ ├── rnn_lstm_bi_imdb.ipynb
│ │ ├── rnn_lstm_packed_imdb-glove.ipynb
│ │ ├── rnn_lstm_packed_imdb.ipynb
│ │ ├── rnn_lstm_packed_own_csv_imdb.ipynb
│ │ ├── rnn_simple_imdb.ipynb
│ │ └── rnn_simple_packed_imdb.ipynb
│ ├── transfer/
│ │ └── transferlearning-vgg16-cifar10-1.ipynb
│ ├── transformer/
│ │ ├── 1_distilbert-as-feature-extractor.ipynb
│ │ ├── 1_distilbert-as-feature-extractor_without-dcollate.ipynb
│ │ ├── distilbert-benchmark/
│ │ │ ├── 1_just-hf.py
│ │ │ ├── 2_hf_with_lightning.py
│ │ │ └── shared.py
│ │ ├── distilbert-embetter-feature-extractor.ipynb
│ │ ├── distilbert-hf-finetuning.ipynb
│ │ ├── distilbert-hf-finetuning_without-dcollate.ipynb
│ │ └── distilbert-v0.ipynb
│ ├── tricks/
│ │ ├── cnn-alexnet-cifar10-batchincrease.ipynb
│ │ ├── cyclical-learning-rate.ipynb
│ │ └── gradclipping_mlp.ipynb
│ └── viz/
│ └── cnns/
│ └── cats-and-dogs/
│ ├── _cnn-basemodel__vgg16-cats-dogs.ipynb
│ ├── cnn-viz-grad__vgg16-cats-dogs.ipynb
│ ├── cnn-viz-guided-backprop__vgg16-cats-dogs.ipynb
│ ├── datautils.py
│ └── vgg16.py
├── templates/
│ └── pytorch_lightning/
│ ├── submit_command.sh
│ ├── template_classification_basic.ipynb
│ └── tune_classification_basic.py
└── tensorflow1_ipynb/
├── autoencoder/
│ ├── ae-basic.ipynb
│ ├── ae-conv-nneighbor.ipynb
│ └── ae-deconv.ipynb
├── basic-ml/
│ ├── logistic-regression.ipynb
│ ├── perceptron.ipynb
│ └── softmax-regression.ipynb
├── cnn/
│ ├── cnn-basic.ipynb
│ └── cnn-vgg16.ipynb
├── data/
│ └── perceptron_toydata.txt
├── gan/
│ ├── gan-conv-smoothing.ipynb
│ ├── gan-conv.ipynb
│ └── gan.ipynb
├── helper.py
├── mechanics/
│ ├── dataset-api.ipynb
│ ├── file-queues.ipynb
│ ├── image-data-chunking-hdf5.ipynb
│ ├── image-data-chunking-npz.ipynb
│ ├── saving-and-reloading-models.ipynb
│ └── tfrecords.ipynb
├── metric/
│ └── siamese-1.ipynb
└── mlp/
├── mlp-basic.ipynb
├── mlp-batchnorm.ipynb
├── mlp-dropout.ipynb
└── mlp-lowlevel.ipynb
SYMBOL INDEX (17 symbols across 1 files)
FILE: pytorch-lightning_ipynb/data-augmentation/autoaugment/helper_utilities.py
class LightningModel (line 12) | class LightningModel(L.LightningModule):
method __init__ (line 13) | def __init__(self, model, learning_rate):
method forward (line 25) | def forward(self, x):
method _shared_step (line 28) | def _shared_step(self, batch):
method training_step (line 36) | def training_step(self, batch, batch_idx):
method validation_step (line 46) | def validation_step(self, batch, batch_idx):
method test_step (line 53) | def test_step(self, batch, batch_idx):
method configure_optimizers (line 58) | def configure_optimizers(self):
class Cifar10DataModule (line 63) | class Cifar10DataModule(L.LightningDataModule):
method __init__ (line 64) | def __init__(
method prepare_data (line 76) | def prepare_data(self):
method setup (line 96) | def setup(self, stage=None):
method train_dataloader (line 113) | def train_dataloader(self):
method val_dataloader (line 123) | def val_dataloader(self):
method test_dataloader (line 133) | def test_dataloader(self):
function plot_val_acc (line 144) | def plot_val_acc(
function plot_loss_and_acc (line 167) | def plot_loss_and_acc(
Copy disabled (too large)
Download .json
Condensed preview — 206 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (16,157K chars).
[
{
"path": ".gitignore",
"chars": 2309,
"preview": "# Other\n.pytorch-lightning_ipynb_new/\n\n# Log files\npytorch-lightning_ipynb/mlp/logs/\npytorch-lightning_ipynb/cnn/logs/\n\n"
},
{
"path": ".pep8speaks.yml",
"chars": 1429,
"preview": "# File : .pep8speaks.yml\n\nscanner:\n diff_only: True # If False, the entire file touched by the Pull Request is scann"
},
{
"path": "LICENSE",
"chars": 1079,
"preview": "MIT License\n\nCopyright (c) 2019-2022 Sebastian Raschka\n\nPermission is hereby granted, free of charge, to any person obta"
},
{
"path": "README.md",
"chars": 34820,
"preview": "\n# Deep Learning Models\n\nA collection of various deep learning architectures, models, and tips for TensorFlow and PyTorc"
},
{
"path": "pytorch-lightning_ipynb/cnn/cnn-alexnet-cifar10.ipynb",
"chars": 775465,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"9c9ec640\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/cnn/cnn-alexnet-grouped-cifar10.ipynb",
"chars": 770025,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"a6fe1f2c\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/cnn/cnn-allconv.ipynb",
"chars": 333329,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"d6b34308\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/cnn/cnn-basic.ipynb",
"chars": 276908,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"37a4ca10\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/cnn/cnn-densenet121-cifar10.ipynb",
"chars": 769450,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"27500e8e\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/cnn/cnn-densenet121-mnist.ipynb",
"chars": 93512,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"d4312f94\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/cnn/cnn-he-init.ipynb",
"chars": 276461,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"14749f84\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/cnn/cnn-lenet5-cifar10.ipynb",
"chars": 90832,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"1212b481\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/cnn/cnn-lenet5-mnist.ipynb",
"chars": 96177,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"c60c3300\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/cnn/cnn-lenet5-quickdraw.ipynb",
"chars": 95502,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"8382b5bf\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/cnn/cnn-mobilenet-v2-cifar10-2.ipynb",
"chars": 725759,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"4de1313e\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/cnn/cnn-mobilenet-v2-cifar10.ipynb",
"chars": 728329,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"0af894ce\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/cnn/cnn-mobilenet-v3-large-cifar10.ipynb",
"chars": 787587,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"769229ce\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/cnn/cnn-mobilenet-v3-small-cifar10.ipynb",
"chars": 796250,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"c4a2457e\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/cnn/cnn-nin-cifar10.ipynb",
"chars": 761903,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"b127a562\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/cnn/cnn-vgg16-celeba.ipynb",
"chars": 882238,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"4af38d0c\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/cnn/cnn-vgg16.ipynb",
"chars": 737396,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"f451fcc1\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/cnn/cnn-vgg19.ipynb",
"chars": 737234,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"f21eca24\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/data-augmentation/autoaugment/helper_utilities.py",
"chars": 5765,
"preview": "import lightning as L\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport torch\nimport torch.nn.functional as F\ni"
},
{
"path": "pytorch-lightning_ipynb/data-augmentation/autoaugment/with-autoaugment.ipynb",
"chars": 262095,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"d8d2298c-29ea-4028-8d8f-004f1bfedeb4\",\n \"metadata\": {},\n \"so"
},
{
"path": "pytorch-lightning_ipynb/data-augmentation/autoaugment/with-trivialaugment.ipynb",
"chars": 425021,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"4b1589ad-eeff-4590-b235-c7882ff16ee3\",\n \"metadata\": {},\n \"so"
},
{
"path": "pytorch-lightning_ipynb/data-augmentation/autoaugment/without-augmentation.ipynb",
"chars": 82511,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"b3cbc7c0-a6d9-4f1b-907a-b7eaa0ce6eab\",\n \"metadata\": {},\n \"so"
},
{
"path": "pytorch-lightning_ipynb/kfold/baseline-light-cnn-mnist.ipynb",
"chars": 212073,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"metadata\": {},\n \"outputs\": [\n {\n \"name\":"
},
{
"path": "pytorch-lightning_ipynb/kfold/kfold-light-cnn-mnist.ipynb",
"chars": 177990,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"metadata\": {},\n \"outputs\": [\n {\n \"name\":"
},
{
"path": "pytorch-lightning_ipynb/mlp/mlp-basic.ipynb",
"chars": 319246,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"cc648582\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/mlp/mlp-batchnorm.ipynb",
"chars": 314282,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"a26e9ac9\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/mlp/mlp-dropout.ipynb",
"chars": 316746,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"d7bb5b4c\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/mlp/template_classification_basic.ipynb",
"chars": 13929,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"1e2086ae\",\n \"metadata\": {},\n \"source\": [\n \"The three exte"
},
{
"path": "pytorch-lightning_ipynb/ordinal/CORAL-light_cement.ipynb",
"chars": 145665,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"aebb3445\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/ordinal/CORN-light_cement.ipynb",
"chars": 125477,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"a5f4cdf9\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/ordinal/baseline-light_cement.ipynb",
"chars": 129104,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"66951a8c\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/ordinal/beckham2016-light_cement.ipynb",
"chars": 137952,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"b1739f6e\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/ordinal/niu2016-light_cement.ipynb",
"chars": 157751,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"8aa08564\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/ordinal/polat2022-light_cement.ipynb",
"chars": 122041,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"id\": \"b1739f6e\",\n \"metadata\": {},\n \"outputs\":"
},
{
"path": "pytorch-lightning_ipynb/transformer/distilbert-finetune-last-layers.ipynb",
"chars": 73724,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"3c5d72f4\",\n \"metadata\": {},\n \"source\": [\n \"# Finetuning a"
},
{
"path": "pytorch-lightning_ipynb/transformer/distilbert-finetune-scheduler.ipynb",
"chars": 40749,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"14ec0fd7\",\n \"metadata\": {},\n \"source\": [\n \"# Finetuning a"
},
{
"path": "pytorch-lightning_ipynb/transformer/distilbert-finetuning-ii-amp/distilbert-finetuning-ii-2.ipynb",
"chars": 33718,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"3c5d72f4\",\n \"metadata\": {},\n \"source\": [\n \"# Finetuning a"
},
{
"path": "pytorch-lightning_ipynb/transformer/distilbert-finetuning-ii-amp/distilbert-finetuning-ii-amp16.ipynb",
"chars": 33805,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"3c5d72f4\",\n \"metadata\": {},\n \"source\": [\n \"# Finetuning a"
},
{
"path": "pytorch-lightning_ipynb/transformer/distilbert-finetuning-ii-amp/distilbert-finetuning-ii-ampb16.ipynb",
"chars": 34003,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"3c5d72f4\",\n \"metadata\": {},\n \"source\": [\n \"# Finetuning a"
},
{
"path": "pytorch-lightning_ipynb/transformer/distilbert-finetuning-ii.ipynb",
"chars": 65017,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"3c5d72f4\",\n \"metadata\": {},\n \"source\": [\n \"# Finetuning a"
},
{
"path": "pytorch_ipynb/autoencoder/ae-basic-with-rf.ipynb",
"chars": 82779,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"Deep Learning Models -- A collectio"
},
{
"path": "pytorch_ipynb/autoencoder/ae-cnn-cvae_no-out-concat.ipynb",
"chars": 205549,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"Deep Learning Models -- A collectio"
},
{
"path": "pytorch_ipynb/autoencoder/ae-conv-nneighbor-celeba.ipynb",
"chars": 504325,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"colab_type\": \"text\",\n \"id\": \"11xi8CRmVA1d\"\n },\n"
},
{
"path": "pytorch_ipynb/autoencoder/ae-conv-nneighbor-quickdraw-1.ipynb",
"chars": 98988,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"colab_type\": \"text\",\n \"id\": \"11xi8CRmVA1d\"\n },\n"
},
{
"path": "pytorch_ipynb/autoencoder/ae-conv-nneighbor.ipynb",
"chars": 46642,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"Deep Learning Models -- A collectio"
},
{
"path": "pytorch_ipynb/autoencoder/ae-conv-var.ipynb",
"chars": 200635,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"Deep Learning Models -- A collectio"
},
{
"path": "pytorch_ipynb/autoencoder/ae-cvae.ipynb",
"chars": 203594,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"Deep Learning Models -- A collectio"
},
{
"path": "pytorch_ipynb/autoencoder/ae-cvae_no-out-concat.ipynb",
"chars": 202755,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"Deep Learning Models -- A collectio"
},
{
"path": "pytorch_ipynb/autoencoder/ae-deconv-jaccard.ipynb",
"chars": 47818,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"Deep Learning Models -- A collectio"
},
{
"path": "pytorch_ipynb/autoencoder/ae-deconv-nopool.ipynb",
"chars": 46396,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"Deep Learning Models -- A collectio"
},
{
"path": "pytorch_ipynb/autoencoder/ae-deconv.ipynb",
"chars": 47654,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"Deep Learning Models -- A collectio"
},
{
"path": "pytorch_ipynb/basic-ml/perceptron.ipynb",
"chars": 36666,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"Deep Learning Models -- A collectio"
},
{
"path": "pytorch_ipynb/basic-ml/softmax-regression-mlxtend-1.ipynb",
"chars": 32869,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"Deep Learning Models -- A collectio"
},
{
"path": "pytorch_ipynb/basic-ml/softmax-regression.ipynb",
"chars": 11606,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"Deep Learning Models -- A collectio"
},
{
"path": "pytorch_ipynb/cnn/cnn-alexnet-cifar10-grouped.ipynb",
"chars": 82338,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"colab_type\": \"text\",\n \"id\": \"UEBilEjLj5wY\"\n },\n"
},
{
"path": "pytorch_ipynb/cnn/cnn-alexnet-cifar10.ipynb",
"chars": 79693,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"colab_type\": \"text\",\n \"id\": \"UEBilEjLj5wY\"\n },\n"
},
{
"path": "pytorch_ipynb/cnn/cnn-allconv.ipynb",
"chars": 18025,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"Deep Learning Models -- A collectio"
},
{
"path": "pytorch_ipynb/cnn/cnn-densenet121-cifar10.ipynb",
"chars": 82312,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"colab_type\": \"text\",\n \"id\": \"UEBilEjLj5wY\"\n },\n"
},
{
"path": "pytorch_ipynb/cnn/cnn-embetter-mobilenet.ipynb",
"chars": 5852,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"4936d1e6-5e7d-4e22-ae35-8e888927ce2d\",\n \"metadata\": {},\n \"so"
},
{
"path": "pytorch_ipynb/cnn/cnn-mobilenet-v2-cifar10.ipynb",
"chars": 738357,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"Deep Learning Models -- A collectio"
}
]
// ... and 142 more files (download for full content)
About this extraction
This page contains the full source code of the rasbt/deeplearning-models GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 206 files (33.8 MB), approximately 4.0M tokens, and a symbol index with 17 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.