Metadata-Version: 2.1
Name: model-constructor
Version: 0.0.2
Summary: Constructor for pytorch models.
Home-page: https://github.com/ayasyrev/model_constructor
Author: Andrei Yasyrev
Author-email: a.yasyrev@gmail.com
License: Apache Software License 2.0
Keywords: dl,pytorch,model
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Requires-Python: >=3.6
Description-Content-Type: text/markdown
Requires-Dist: fastcore
Requires-Dist: torch

<!--

#################################################
### THIS FILE WAS AUTOGENERATED! DO NOT EDIT! ###
#################################################
# file to edit: index.ipynb
# command to build the docs after a change: nbdev_build_docs

-->

# model_constructor

> Constructor to create pytorch model.


_

## Install

`pip install model-constructor`

## How to use

model = Net()
<div class="codecell" markdown="1">
<div class="input_area" markdown="1">

```python
model = Net()
```

</div>

</div>

# Resnet as example

Lets create resnet18 and resnet34 (default Net() is resnet18()).
<div class="codecell" markdown="1">
<div class="input_area" markdown="1">

```python
resnet18 = Net(block=BasicBlock, blocks=[2, 2, 2, 2])
```

</div>

</div>
<div class="codecell" markdown="1">
<div class="input_area" markdown="1">

```python
resnet34 = Net(block=BasicBlock, blocks=[3, 4, 6, 3])
```

</div>

</div>

# Predefined Resnet models - 18, 34, 50.
<div class="codecell" markdown="1">
<div class="input_area" markdown="1">

```python
from model_constructor.resnet import *
```

</div>

</div>
<div class="codecell" markdown="1">
<div class="input_area" markdown="1">

```python
model = resnet34(num_classes=10)
```

</div>

</div>
<div class="codecell" markdown="1">
<div class="input_area" markdown="1">

```python
model = resnet50(num_classes=10)
```

</div>

</div>

# Predefined Xresnet from fastai 1.

This ie simplified version from fastai v1. I did refactoring for better understand and experime with models. For example, change activation funtions, different stems, batchnorm and activation order etc. In v2 much powerfull realisation.
<div class="codecell" markdown="1">
<div class="input_area" markdown="1">

```python
from model_constructor.xresnet import *
```

</div>

</div>
<div class="codecell" markdown="1">
<div class="input_area" markdown="1">

```python
model = xresnet50()
```

</div>

</div>

# Some examples

We can experiment with models by changing some parts of model. Here only base functionality, but it can be easily extanded.

Here is some examples:


## Custom stem

Stem with 3 conv layers
<div class="codecell" markdown="1">
<div class="input_area" markdown="1">

```python
model = Net(stem=partial(Stem, stem_sizes=[32, 32]))
```

</div>

</div>
<div class="codecell" markdown="1">
<div class="input_area" markdown="1">

```python
model.stem
```

</div>
<div class="output_area" markdown="1">




    Stem(
      sizes: [3, 32, 32, 64]
      (conv0): ConvLayer(
        (conv): Conv2d(3, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
        (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (act_fn): ReLU(inplace=True)
      )
      (conv1): ConvLayer(
        (conv): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (act_fn): ReLU(inplace=True)
      )
      (conv2): ConvLayer(
        (conv): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (act_fn): ReLU(inplace=True)
      )
      (pool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)
    )



</div>

</div>
<div class="codecell" markdown="1">
<div class="input_area" markdown="1">

```python
model = Net(stem_sizes=[32, 64])
```

</div>

</div>
<div class="codecell" markdown="1">
<div class="input_area" markdown="1">

```python
model.stem
```

</div>
<div class="output_area" markdown="1">




    Stem(
      sizes: [3, 32, 64, 64]
      (conv0): ConvLayer(
        (conv): Conv2d(3, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
        (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (act_fn): ReLU(inplace=True)
      )
      (conv1): ConvLayer(
        (conv): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (act_fn): ReLU(inplace=True)
      )
      (conv2): ConvLayer(
        (conv): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (act_fn): ReLU(inplace=True)
      )
      (pool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)
    )



</div>

</div>

## Activation function before Normalization
<div class="codecell" markdown="1">
<div class="input_area" markdown="1">

```python
model = Net(bn_1st=False)
```

</div>

</div>
<div class="codecell" markdown="1">
<div class="input_area" markdown="1">

```python
model.stem
```

</div>
<div class="output_area" markdown="1">




    Stem(
      sizes: [3, 64]
      (conv0): ConvLayer(
        (conv): Conv2d(3, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
        (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (act_fn): ReLU(inplace=True)
      )
      (pool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)
    )



</div>

</div>


## Change activation function
<div class="codecell" markdown="1">
<div class="input_area" markdown="1">

```python
act_fn = nn.LeakyReLU(inplace=True)
```

</div>

</div>
<div class="codecell" markdown="1">
<div class="input_area" markdown="1">

```python
model = Net(act_fn=act_fn)
```

</div>

</div>
<div class="codecell" markdown="1">
<div class="input_area" markdown="1">

```python
model.stem
```

</div>
<div class="output_area" markdown="1">




    Stem(
      sizes: [3, 64]
      (conv0): ConvLayer(
        (conv): Conv2d(3, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
        (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (act_fn): LeakyReLU(negative_slope=0.01, inplace=True)
      )
      (pool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)
    )



</div>

</div>
<div class="codecell" markdown="1">
<div class="input_area" markdown="1">

```python
model.body.layer_0.block_0.conv.conv_0
```

</div>
<div class="output_area" markdown="1">




    ConvLayer(
      (conv): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
      (act_fn): LeakyReLU(negative_slope=0.01, inplace=True)
      (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    )



</div>

</div>


