├── requirements.txt
├── torchsampler
├── __init__.py
├── __about__.py
└── imbalanced.py
├── MANIFEST.in
├── setup.cfg
├── .pre-commit-config.yaml
├── .github
└── workflows
│ ├── publish.yml
│ ├── code-format.yml
│ └── ci_install-pkg.yml
├── LICENSE
├── setup.py
├── .gitignore
├── README.md
└── examples
└── imagefolder.ipynb
/requirements.txt:
--------------------------------------------------------------------------------
1 | torch>=1.3
2 | torchvision>=0.5
3 | pandas
4 | # only needed by __about__.py, which is deprecated:
5 | importlib_metadata; python_version<'3.8'
6 |
--------------------------------------------------------------------------------
/torchsampler/__init__.py:
--------------------------------------------------------------------------------
1 | from torchsampler.__about__ import * # noqa: F401 F403
2 | from torchsampler.imbalanced import ImbalancedDatasetSampler
3 |
4 | __all__ = [
5 | 'ImbalancedDatasetSampler',
6 | ]
7 |
--------------------------------------------------------------------------------
/MANIFEST.in:
--------------------------------------------------------------------------------
1 | # Manifest syntax https://setuptools.pypa.io/en/latest/deprecated/distutils/commandref.html#sdist-cmd
2 |
3 | # FIXME: switching to a src/ layout would obviate the need for this file entirely.
4 | # see https://setuptools.pypa.io/en/latest/userguide/package_discovery.html#src-layout
5 |
6 | # Exclude build configs
7 | exclude *.yml
8 | exclude *.yaml
9 |
10 | prune .github
11 | prune example*
12 |
--------------------------------------------------------------------------------
/setup.cfg:
--------------------------------------------------------------------------------
1 | [metadata]
2 | license_file = LICENSE
3 |
4 | [flake8]
5 | max-line-length = 120
6 | exclude = .tox,*.egg,build,temp
7 | select = E,W,F
8 | doctests = True
9 | verbose = 2
10 | # https://pep8.readthedocs.io/en/latest/intro.html#error-codes
11 | format = pylint
12 | # see: https://www.flake8rules.com/
13 | ignore =
14 | E731 # Do not assign a lambda expression, use a def
15 |
16 | [isort]
17 | known_first_party =
18 | kaggle_plantpatho
19 | tests
20 | notebooks
21 | line_length = 120
22 | order_by_type = False
23 | # 3 - Vertical Hanging Indent
24 | multi_line_output = 3
25 | include_trailing_comma = True
26 |
27 | [yapf]
28 | based_on_style = pep8
29 | spaces_before_comment = 2
30 | split_before_logical_operator = true
31 | COLUMN_LIMIT = 120
32 | COALESCE_BRACKETS = true
33 | DEDENT_CLOSING_BRACKETS = true
34 | ALLOW_SPLIT_BEFORE_DICT_VALUE = false
35 | BLANK_LINE_BEFORE_NESTED_CLASS_OR_DEF = true
36 | NO_SPACES_AROUND_SELECTED_BINARY_OPERATORS = false
37 |
--------------------------------------------------------------------------------
/.pre-commit-config.yaml:
--------------------------------------------------------------------------------
1 | default_language_version:
2 | python: python3.8
3 |
4 | ci:
5 | autofix_prs: true
6 | autoupdate_commit_msg: '[pre-commit.ci] pre-commit suggestions'
7 | autoupdate_schedule: quarterly
8 | # submodules: true
9 |
10 | repos:
11 | - repo: https://github.com/pre-commit/pre-commit-hooks
12 | rev: v4.1.0
13 | hooks:
14 | - id: end-of-file-fixer
15 | - id: trailing-whitespace
16 | - id: check-case-conflict
17 | - id: check-yaml
18 | - id: check-added-large-files
19 | - id: check-docstring-first
20 |
21 | - repo: https://github.com/PyCQA/isort
22 | rev: 5.10.1
23 | hooks:
24 | - id: isort
25 | name: imports
26 |
27 | - repo: https://github.com/pre-commit/mirrors-yapf
28 | rev: v0.32.0
29 | hooks:
30 | - id: yapf
31 | name: formatting
32 |
33 | - repo: https://github.com/PyCQA/flake8
34 | rev: 4.0.1
35 | hooks:
36 | - id: flake8
37 | name: PEP8
38 |
--------------------------------------------------------------------------------
/torchsampler/__about__.py:
--------------------------------------------------------------------------------
1 | import sys
2 |
3 | if sys.version_info < (3, 8):
4 | from importlib_metadata import distribution, PackageNotFoundError
5 | else:
6 | from importlib.metadata import distribution, PackageNotFoundError
7 |
8 | import warnings
9 |
10 | warnings.warn(
11 | "Use importlib.metadata.distribution('torchsampler').metadata instead of torchsampler.__about__.",
12 | category=DeprecationWarning
13 | )
14 |
15 | try:
16 | _m = distribution('torchsampler').metadata
17 | __version__ = _m['version']
18 | __author__ = _m['author']
19 | __author_email__ = _m['author-email']
20 | __license__ = _m['license']
21 | __homepage__ = _m['homepage']
22 | __doc__ = _m['summary']
23 | del _m
24 | except PackageNotFoundError:
25 | # package is not installed (i.e. we're probably in the build process itself)
26 | pass
27 |
28 | del sys, distribution, PackageNotFoundError, warnings
29 |
30 | __all__ = [
31 | "__author__",
32 | "__author_email__",
33 | "__doc__",
34 | "__homepage__",
35 | "__license__",
36 | "__version__",
37 | ]
38 |
--------------------------------------------------------------------------------
/.github/workflows/publish.yml:
--------------------------------------------------------------------------------
1 | # ref: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
2 |
3 | name: Publish Package
4 |
5 | on:
6 | # publish from the Releases page:
7 | release:
8 | types: [published]
9 |
10 | jobs:
11 | publish:
12 | name: Publish Package
13 |
14 | runs-on: ubuntu-latest
15 |
16 | steps:
17 | - uses: actions/checkout@v3
18 |
19 | - uses: actions/setup-python@v3
20 |
21 | - name: Install dependencies
22 | run: |
23 | python -m pip install --upgrade pip
24 | pip install build
25 |
26 | - name: Build
27 | run: python -m build
28 |
29 | - name: Publish to Github
30 | uses: softprops/action-gh-release@v1
31 | with:
32 | files: 'dist/*'
33 | fail_on_unmatched_files: true
34 | prerelease: ${{ contains(github.ref, 'rc') || contains(github.ref, 'dev') }}
35 |
36 | - name: Publish to PyPI
37 | uses: pypa/gh-action-pypi-publish@release/v1
38 | with:
39 | user: __token__
40 | password: ${{ secrets.PYPI_TOKEN }}
41 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Ming
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | """A setuptools based setup module."""
2 |
3 | from pathlib import Path
4 |
5 | from setuptools import setup
6 |
7 | PATH_HERE = Path(__file__).parent
8 |
9 | with open(PATH_HERE / 'requirements.txt', encoding='utf-8') as fp:
10 | requirements = [rq.rstrip() for rq in fp.readlines() if not rq.startswith('#')]
11 | long_description = (PATH_HERE / 'README.md').read_text()
12 |
13 | setup(
14 | name='torchsampler',
15 | use_scm_version=True,
16 | url="https://github.com/ufoym/imbalanced-dataset-sample",
17 | author="Ming, et al.",
18 | author_email="a@ufoym.com",
19 | license="MIT",
20 | description="A (PyTorch) imbalanced dataset sampler for oversampling low classes"
21 | "and undersampling high frequent ones.",
22 | long_description=long_description,
23 | long_description_content_type='text/markdown',
24 | packages=['torchsampler'],
25 | keywords='sampler,pytorch,dataloader',
26 | setup_requires=['setuptools_scm'],
27 | install_requires=requirements,
28 | python_requires='>=3.6',
29 | include_package_data=True,
30 | classifiers=[
31 | 'Environment :: Console',
32 | 'Natural Language :: English',
33 | 'Development Status :: 4 - Beta',
34 | 'Intended Audience :: Developers',
35 | 'License :: OSI Approved :: MIT License',
36 | 'Operating System :: OS Independent',
37 | 'Programming Language :: Python :: 3',
38 | ],
39 | )
40 |
--------------------------------------------------------------------------------
/.github/workflows/code-format.yml:
--------------------------------------------------------------------------------
1 | name: Code formatting
2 |
3 | # see: https://help.github.com/en/actions/reference/events-that-trigger-workflows
4 | on: # Trigger the workflow on push or pull request, but only for the main branch
5 | push: {}
6 | pull_request:
7 | branches: [master]
8 |
9 | jobs:
10 | pep8-check-flake8:
11 | runs-on: ubuntu-20.04
12 | steps:
13 | - uses: actions/checkout@master
14 | - uses: actions/setup-python@v2
15 | with:
16 | python-version: 3.7
17 | - name: Install dependencies
18 | run: |
19 | pip install flake8
20 | pip list
21 | shell: bash
22 | - name: PEP8
23 | run: |
24 | flake8 .
25 |
26 | imports-check-isort:
27 | runs-on: ubuntu-20.04
28 | steps:
29 | - uses: actions/checkout@master
30 | - uses: actions/setup-python@v2
31 | with:
32 | python-version: 3.8
33 | - name: Install isort
34 | run: |
35 | pip install isort
36 | pip list
37 | - name: isort
38 | run: |
39 | isort . --check --diff
40 |
41 | format-check-yapf:
42 | runs-on: ubuntu-20.04
43 | steps:
44 | - uses: actions/checkout@master
45 | - uses: actions/setup-python@v2
46 | with:
47 | python-version: 3.8
48 | - name: Install dependencies
49 | run: |
50 | pip install --upgrade pip
51 | pip install yapf
52 | pip list
53 | shell: bash
54 | - name: yapf
55 | run: |
56 | yapf --diff --parallel --recursive .
57 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | *.egg-info/
24 | .installed.cfg
25 | *.egg
26 | MANIFEST
27 |
28 | # PyInstaller
29 | # Usually these files are written by a python script from a template
30 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
31 | *.manifest
32 | *.spec
33 |
34 | # Installer logs
35 | pip-log.txt
36 | pip-delete-this-directory.txt
37 |
38 | # Unit test / coverage reports
39 | htmlcov/
40 | .tox/
41 | .coverage
42 | .coverage.*
43 | .cache
44 | nosetests.xml
45 | coverage.xml
46 | *.cover
47 | .hypothesis/
48 | .pytest_cache/
49 |
50 | # Translations
51 | *.mo
52 | *.pot
53 |
54 | # Django stuff:
55 | *.log
56 | local_settings.py
57 | db.sqlite3
58 |
59 | # Flask stuff:
60 | instance/
61 | .webassets-cache
62 |
63 | # Scrapy stuff:
64 | .scrapy
65 |
66 | # Sphinx documentation
67 | docs/_build/
68 |
69 | # PyBuilder
70 | target/
71 |
72 | # Jupyter Notebook
73 | .ipynb_checkpoints
74 |
75 | # pyenv
76 | .python-version
77 |
78 | # celery beat schedule file
79 | celerybeat-schedule
80 |
81 | # SageMath parsed files
82 | *.sage.py
83 |
84 | # Environments
85 | .env
86 | .venv
87 | env/
88 | venv/
89 | ENV/
90 | env.bak/
91 | venv.bak/
92 |
93 | # Spyder project settings
94 | .spyderproject
95 | .spyproject
96 |
97 | # Rope project settings
98 | .ropeproject
99 |
100 | # mkdocs documentation
101 | /site
102 |
103 | # mypy
104 | .mypy_cache/
105 |
--------------------------------------------------------------------------------
/.github/workflows/ci_install-pkg.yml:
--------------------------------------------------------------------------------
1 | name: Install pkg
2 |
3 | # see: https://help.github.com/en/actions/reference/events-that-trigger-workflows
4 | on: # Trigger the workflow on push or pull request, but only for the main branch
5 | push:
6 | branches: [master]
7 | pull_request:
8 | branches: [master]
9 |
10 | jobs:
11 | pkg-check:
12 | runs-on: ubuntu-20.04
13 |
14 | steps:
15 | - uses: actions/checkout@master
16 | - uses: actions/setup-python@v2
17 | with:
18 | python-version: 3.7
19 |
20 | - name: Check package
21 | run: |
22 | python setup.py check --metadata --strict
23 |
24 | - name: Create package
25 | run: |
26 | pip install --upgrade setuptools wheel
27 | python setup.py sdist
28 |
29 | - name: Verify package
30 | run: |
31 | pip install twine==3.2
32 | twine check dist/*
33 | python setup.py clean
34 |
35 | pkg-install:
36 | runs-on: ${{ matrix.os }}
37 | strategy:
38 | fail-fast: false
39 | matrix:
40 | os: [ubuntu-20.04, macOS-10.15] #, windows-2019
41 | python-version: [3.7] #, 3.8
42 |
43 | steps:
44 | - uses: actions/checkout@master
45 | - uses: actions/setup-python@v2
46 | with:
47 | python-version: ${{ matrix.python-version }}
48 |
49 | - name: Create package
50 | run: |
51 | python setup.py sdist
52 |
53 | - name: Install package
54 | run: |
55 | pip install virtualenv
56 | virtualenv vEnv
57 | source vEnv/bin/activate
58 | pip install dist/*
59 | cd .. & python -c "import torchsampler ; print(torchsampler.__version__)"
60 | deactivate
61 | rm -rf vEnv
62 |
--------------------------------------------------------------------------------
/torchsampler/imbalanced.py:
--------------------------------------------------------------------------------
1 | from typing import Callable
2 |
3 | import pandas as pd
4 | import torch
5 | import torch.utils.data
6 | import torchvision
7 |
8 |
9 | class ImbalancedDatasetSampler(torch.utils.data.sampler.Sampler):
10 | """Samples elements randomly from a given list of indices for imbalanced dataset
11 |
12 | Arguments:
13 | indices: a list of indices
14 | num_samples: number of samples to draw
15 | callback_get_label: a callback-like function which takes two arguments - dataset and index
16 | """
17 |
18 | def __init__(
19 | self,
20 | dataset,
21 | labels: list = None,
22 | indices: list = None,
23 | num_samples: int = None,
24 | callback_get_label: Callable = None,
25 | ):
26 | # if indices is not provided, all elements in the dataset will be considered
27 | self.indices = list(range(len(dataset))) if indices is None else indices
28 |
29 | # define custom callback
30 | self.callback_get_label = callback_get_label
31 |
32 | # if num_samples is not provided, draw `len(indices)` samples in each iteration
33 | self.num_samples = len(self.indices) if num_samples is None else num_samples
34 |
35 | # distribution of classes in the dataset
36 | df = pd.DataFrame()
37 | df["label"] = self._get_labels(dataset) if labels is None else labels
38 | df.index = self.indices
39 | df = df.sort_index()
40 |
41 | label_to_count = df["label"].value_counts()
42 |
43 | weights = 1.0 / label_to_count[df["label"]]
44 |
45 | self.weights = torch.DoubleTensor(weights.to_list())
46 |
47 | def _get_labels(self, dataset):
48 | if self.callback_get_label:
49 | return self.callback_get_label(dataset)
50 | elif isinstance(dataset, torch.utils.data.TensorDataset):
51 | return dataset.tensors[1]
52 | elif isinstance(dataset, torchvision.datasets.MNIST):
53 | return dataset.train_labels.tolist()
54 | elif isinstance(dataset, torchvision.datasets.ImageFolder):
55 | return [x[1] for x in dataset.imgs]
56 | elif isinstance(dataset, torchvision.datasets.DatasetFolder):
57 | return dataset.samples[:][1]
58 | elif isinstance(dataset, torch.utils.data.Subset):
59 | return dataset.dataset.imgs[:][1]
60 | elif isinstance(dataset, torch.utils.data.Dataset):
61 | return dataset.get_labels()
62 | else:
63 | raise NotImplementedError
64 |
65 | def __iter__(self):
66 | return (self.indices[i] for i in torch.multinomial(self.weights, self.num_samples, replacement=True))
67 |
68 | def __len__(self):
69 | return self.num_samples
70 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Imbalanced Dataset Sampler
2 |
3 | 
4 |
5 |
6 |
7 | ## Introduction
8 |
9 | In many machine learning applications, we often come across datasets where some types of data may be seen more than other types. Take identification of rare diseases for example, there are probably more normal samples than disease ones. In these cases, we need to make sure that the trained model is not biased towards the class that has more data. As an example, consider a dataset where there are 5 disease images and 20 normal images. If the model predicts all images to be normal, its accuracy is 80%, and F1-score of such a model is 0.88. Therefore, the model has high tendency to be biased toward the ‘normal’ class.
10 |
11 | To solve this problem, a widely adopted technique is called resampling. It consists of removing samples from the majority class (under-sampling) and / or adding more examples from the minority class (over-sampling). Despite the advantage of balancing classes, these techniques also have their weaknesses (there is no free lunch). The simplest implementation of over-sampling is to duplicate random records from the minority class, which can cause overfitting. In under-sampling, the simplest technique involves removing random records from the majority class, which can cause loss of information.
12 |
13 | 
14 |
15 | In this repo, we implement an easy-to-use PyTorch sampler `ImbalancedDatasetSampler` that is able to
16 | - rebalance the class distributions when sampling from the imbalanced dataset
17 | - estimate the sampling weights automatically
18 | - avoid creating a new balanced dataset
19 | - mitigate overfitting when it is used in conjunction with data augmentation techniques
20 |
21 |
22 |
23 |
24 |
25 | ## Usage
26 |
27 | For a simple start install the package via one of following ways:
28 |
29 | ```bash
30 | pip install torchsampler
31 | ```
32 |
33 |
34 | Simply pass an `ImbalancedDatasetSampler` for the parameter `sampler` when creating a `DataLoader`.
35 | For example:
36 |
37 | ```python
38 | from torchsampler import ImbalancedDatasetSampler
39 |
40 | train_loader = torch.utils.data.DataLoader(
41 | train_dataset,
42 | sampler=ImbalancedDatasetSampler(train_dataset),
43 | batch_size=args.batch_size,
44 | **kwargs
45 | )
46 | ```
47 |
48 | Then in each epoch, the loader will sample the entire dataset and weigh your samples inversely to your class appearing probability.
49 |
50 | ## Example: Imbalanced MNIST Dataset
51 |
52 | Distribution of classes in the imbalanced dataset:
53 |
54 |
55 |
56 |
57 | With Imbalanced Dataset Sampler:
58 |
59 |
60 | (left: test acc in each epoch; right: confusion matrix)
61 |
62 |
63 | Without Imbalanced Dataset Sampler:
64 |
65 |
66 | (left: test acc in each epoch; right: confusion matrix)
67 |
68 |
69 | Note that there are significant improvements for minor classes such as `2` `6` `9`, while the accuracy of the other classes is preserved.
70 |
71 | ## Contributing
72 |
73 | We appreciate all contributions. If you are planning to contribute back bug-fixes, please do so without any further discussion. If you plan to contribute new features, utility functions or extensions, please first open an issue and discuss the feature with us.
74 |
75 | ## Licensing
76 |
77 | [MIT licensed](https://github.com/ufoym/imbalanced-dataset-sampler/blob/master/LICENSE).
78 |
--------------------------------------------------------------------------------
/examples/imagefolder.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "from IPython import display\n",
10 | "\n",
11 | "# kill error when executing argparse in IPython console\n",
12 | "import sys; sys.argv=['']; del sys\n",
13 | "\n",
14 | "import os\n",
15 | "os.environ[\"CUDA_DEVICE_ORDER\"]=\"PCI_BUS_ID\" \n",
16 | "os.environ[\"CUDA_VISIBLE_DEVICES\"]=\"1\"\n",
17 | "\n",
18 | "from torchsampler import ImbalancedDatasetSampler"
19 | ]
20 | },
21 | {
22 | "cell_type": "code",
23 | "execution_count": 2,
24 | "metadata": {},
25 | "outputs": [],
26 | "source": [
27 | "import argparse\n",
28 | "import os\n",
29 | "import torch\n",
30 | "import torchvision\n",
31 | "import numpy as np\n",
32 | "import pandas as pd\n",
33 | "import sklearn.metrics as sm\n",
34 | "\n",
35 | "# parse arguments\n",
36 | "parser = argparse.ArgumentParser(description='Imbalanced Dataset Example')\n",
37 | "parser.add_argument('--data', metavar='DIR', default='./data/oven', help='path to dataset')\n",
38 | "parser.add_argument('--arch', '-a', metavar='ARCH', default='resnet18')\n",
39 | "parser.add_argument('--epochs', default=90, type=int, metavar='N',\n",
40 | " help='number of total epochs to run')\n",
41 | "parser.add_argument('-b', '--batch-size', default=256, type=int,\n",
42 | " metavar='N', help='mini-batch size (default: 256)')\n",
43 | "parser.add_argument('--lr', '--learning-rate', default=0.1, type=float,\n",
44 | " metavar='LR', help='initial learning rate')\n",
45 | "parser.add_argument('--momentum', default=0.9, type=float, metavar='M',\n",
46 | " help='momentum')\n",
47 | "parser.add_argument('--weight-decay', '--wd', default=1e-4, type=float,\n",
48 | " metavar='W', help='weight decay (default: 1e-4)')\n",
49 | "parser.add_argument('--no-cuda', action='store_true', default=False,\n",
50 | " help='disables CUDA training')\n",
51 | "parser.add_argument('--seed', type=int, default=42, metavar='S',\n",
52 | " help='random seed (default: 42)')\n",
53 | "args = parser.parse_args()\n",
54 | "use_cuda = not args.no_cuda and torch.cuda.is_available()\n",
55 | "\n",
56 | "torch.manual_seed(args.seed)\n",
57 | "device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n",
58 | "kwargs = {'num_workers': 1, 'pin_memory': True} if use_cuda else {}\n",
59 | "\n",
60 | "# Data loading code\n",
61 | "traindir = os.path.join(args.data, 'train')\n",
62 | "valdir = os.path.join(args.data, 'val')\n",
63 | "normalize = torchvision.transforms.Normalize(\n",
64 | " mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])\n",
65 | "\n",
66 | "train_dataset = torchvision.datasets.ImageFolder(\n",
67 | " traindir,\n",
68 | " torchvision.transforms.Compose([\n",
69 | " torchvision.transforms.RandomResizedCrop(224),\n",
70 | " torchvision.transforms.RandomHorizontalFlip(),\n",
71 | " torchvision.transforms.ToTensor(),\n",
72 | " normalize,\n",
73 | " ]))\n",
74 | "\n",
75 | "train_loader = torch.utils.data.DataLoader(\n",
76 | " train_dataset, batch_size=args.batch_size, \n",
77 | " shuffle=True, sampler=None, **kwargs)\n",
78 | "\n",
79 | "test_loader = torch.utils.data.DataLoader(\n",
80 | " torchvision.datasets.ImageFolder(\n",
81 | " valdir, torchvision.transforms.Compose([\n",
82 | " torchvision.transforms.Resize(256),\n",
83 | " torchvision.transforms.CenterCrop(224),\n",
84 | " torchvision.transforms.ToTensor(),\n",
85 | " normalize,\n",
86 | " ])), batch_size=args.batch_size, \n",
87 | " shuffle=False, **kwargs)\n"
88 | ]
89 | },
90 | {
91 | "cell_type": "code",
92 | "execution_count": 3,
93 | "metadata": {},
94 | "outputs": [],
95 | "source": [
96 | "def adjust_learning_rate(optimizer, epoch):\n",
97 | " \"\"\"Sets the learning rate to the initial LR decayed by 10 every 30 epochs\"\"\"\n",
98 | " lr = args.lr * (0.1 ** (epoch // 30))\n",
99 | " for param_group in optimizer.param_groups:\n",
100 | " param_group['lr'] = lr\n",
101 | "\n",
102 | "def process(train_loader, test_loader):\n",
103 | " \n",
104 | " model = torchvision.models.__dict__[args.arch]()\n",
105 | " if args.arch.startswith('alexnet') or args.arch.startswith('vgg'):\n",
106 | " model.features = torch.nn.DataParallel(model.features)\n",
107 | " model.cuda()\n",
108 | " else:\n",
109 | " model = torch.nn.DataParallel(model).cuda()\n",
110 | "\n",
111 | " # define loss function (criterion) and optimizer\n",
112 | " criterion = torch.nn.CrossEntropyLoss().cuda()\n",
113 | " optimizer = torch.optim.SGD(model.parameters(), args.lr,\n",
114 | " momentum=args.momentum,\n",
115 | " weight_decay=args.weight_decay)\n",
116 | "\n",
117 | " # train & test process\n",
118 | " def train(train_loader):\n",
119 | " model.train()\n",
120 | " for batch_idx, (data, target) in enumerate(train_loader): \n",
121 | " data, target = data.to(device), target.to(device)\n",
122 | " optimizer.zero_grad()\n",
123 | " output = model(data)\n",
124 | " loss = criterion(output, target)\n",
125 | " loss.backward()\n",
126 | " optimizer.step()\n",
127 | " \n",
128 | " print('\\rTraining %d/%d' % (batch_idx + 1, len(train_loader)), end='', flush=True)\n",
129 | "\n",
130 | " def test(test_loader):\n",
131 | " model.eval()\n",
132 | " correct = 0\n",
133 | " targets, preds = [], []\n",
134 | " with torch.no_grad():\n",
135 | " for data, target in test_loader:\n",
136 | " data, target = data.to(device), target.to(device)\n",
137 | " output = model(data)\n",
138 | " pred = output.max(1, keepdim=True)[1] # get the index of the max log-probability\n",
139 | " correct += pred.eq(target.view_as(pred)).sum().item()\n",
140 | " \n",
141 | " targets += list(target.cpu().numpy())\n",
142 | " preds += list(pred.cpu().numpy())\n",
143 | "\n",
144 | " test_acc = 100. * correct / len(test_loader.dataset)\n",
145 | " confusion_mtx = sm.confusion_matrix(targets, preds)\n",
146 | " return test_acc, confusion_mtx\n",
147 | " \n",
148 | " test_accs, confusion_mtxes = [], [] \n",
149 | " for epoch in range(1, args.epochs + 1):\n",
150 | " adjust_learning_rate(optimizer, epoch)\n",
151 | " train(train_loader)\n",
152 | " test_acc, confusion_mtx = test(test_loader)\n",
153 | " test_accs.append(test_acc)\n",
154 | " confusion_mtxes.append(confusion_mtx)\n",
155 | " print('\\rBest test acc = %2.2f%%' % max(test_accs), end='', flush=True)\n",
156 | " \n",
157 | " vis(test_accs, confusion_mtxes, classe_labels)"
158 | ]
159 | },
160 | {
161 | "cell_type": "code",
162 | "execution_count": 4,
163 | "metadata": {},
164 | "outputs": [
165 | {
166 | "name": "stdout",
167 | "output_type": "stream",
168 | "text": [
169 | "Requirement already satisfied: seaborn in /usr/local/lib/python3.6/dist-packages (0.8.1)\n",
170 | "Dataset: 3600 training samples & 1503 testing samples\n",
171 | "\n",
172 | "Distribution of classes in dataset:\n"
173 | ]
174 | },
175 | {
176 | "data": {
177 | "image/png": "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\n",
178 | "text/plain": [
179 | ""
180 | ]
181 | },
182 | "metadata": {},
183 | "output_type": "display_data"
184 | }
185 | ],
186 | "source": [
187 | "%matplotlib inline\n",
188 | "import matplotlib.pyplot as plt\n",
189 | " \n",
190 | "!pip install seaborn\n",
191 | "import seaborn as sns\n",
192 | "\n",
193 | "print('Dataset: %d training samples & %d testing samples\\n' % (\n",
194 | " len(train_loader.dataset), len(test_loader.dataset)))\n",
195 | " \n",
196 | "print('Distribution of classes in dataset:')\n",
197 | "fig, ax = plt.subplots()\n",
198 | "labels = [label for _, label in train_loader.dataset.imgs]\n",
199 | "classe_labels, counts = np.unique(labels, return_counts=True)\n",
200 | "ax.bar(classe_labels, counts)\n",
201 | "ax.set_xticks(classe_labels)\n",
202 | "plt.show()\n",
203 | "\n",
204 | "def vis(test_accs, confusion_mtxes, labels, figsize=(20, 8)):\n",
205 | " \n",
206 | " cm = confusion_mtxes[np.argmax(test_accs)]\n",
207 | " cm_sum = np.sum(cm, axis=1, keepdims=True)\n",
208 | " cm_perc = cm / cm_sum * 100\n",
209 | " annot = np.empty_like(cm).astype(str)\n",
210 | " nrows, ncols = cm.shape\n",
211 | " for i in range(nrows):\n",
212 | " for j in range(ncols):\n",
213 | " c = cm[i, j]\n",
214 | " p = cm_perc[i, j]\n",
215 | " if c == 0:\n",
216 | " annot[i, j] = ''\n",
217 | " else:\n",
218 | " annot[i, j] = '%.1f%%' % p\n",
219 | " cm = pd.DataFrame(cm, index=labels, columns=labels)\n",
220 | " cm.index.name = 'Actual'\n",
221 | " cm.columns.name = 'Predicted'\n",
222 | " \n",
223 | " fig = plt.figure(figsize=figsize)\n",
224 | " plt.subplot(1, 2, 1)\n",
225 | " plt.plot(test_accs, 'g')\n",
226 | " plt.grid(True)\n",
227 | " \n",
228 | " plt.subplot(1, 2, 2)\n",
229 | " sns.heatmap(cm, annot=annot, fmt='', cmap=\"Blues\")\n",
230 | " plt.show()"
231 | ]
232 | },
233 | {
234 | "cell_type": "code",
235 | "execution_count": 6,
236 | "metadata": {},
237 | "outputs": [
238 | {
239 | "name": "stdout",
240 | "output_type": "stream",
241 | "text": [
242 | "Best test acc = 93.41%"
243 | ]
244 | },
245 | {
246 | "data": {
247 | "image/png": "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\n",
248 | "text/plain": [
249 | ""
250 | ]
251 | },
252 | "metadata": {},
253 | "output_type": "display_data"
254 | }
255 | ],
256 | "source": [
257 | "process(train_loader, test_loader)"
258 | ]
259 | },
260 | {
261 | "cell_type": "code",
262 | "execution_count": 5,
263 | "metadata": {},
264 | "outputs": [
265 | {
266 | "name": "stdout",
267 | "output_type": "stream",
268 | "text": [
269 | "Best test acc = 94.88%"
270 | ]
271 | },
272 | {
273 | "data": {
274 | "image/png": "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\n",
275 | "text/plain": [
276 | ""
277 | ]
278 | },
279 | "metadata": {},
280 | "output_type": "display_data"
281 | }
282 | ],
283 | "source": [
284 | "process(torch.utils.data.DataLoader(\n",
285 | " train_dataset, batch_size=args.batch_size, \n",
286 | " sampler=ImbalancedDatasetSampler(train_dataset),\n",
287 | " **kwargs), test_loader)"
288 | ]
289 | }
290 | ],
291 | "metadata": {
292 | "kernelspec": {
293 | "display_name": "Python 3",
294 | "language": "python",
295 | "name": "python3"
296 | },
297 | "language_info": {
298 | "codemirror_mode": {
299 | "name": "ipython",
300 | "version": 3
301 | },
302 | "file_extension": ".py",
303 | "mimetype": "text/x-python",
304 | "name": "python",
305 | "nbconvert_exporter": "python",
306 | "pygments_lexer": "ipython3",
307 | "version": "3.6.3"
308 | },
309 | "pycharm": {
310 | "stem_cell": {
311 | "cell_type": "raw",
312 | "source": [],
313 | "metadata": {
314 | "collapsed": false
315 | }
316 | }
317 | }
318 | },
319 | "nbformat": 4,
320 | "nbformat_minor": 2
321 | }
322 |
--------------------------------------------------------------------------------