|
69 | 69 | "import sys, torch\n", |
70 | 70 | "from functools import partial\n", |
71 | 71 | "from collections import OrderedDict\n", |
72 | | - "\n", |
73 | 72 | "from model_constructor.layers import *" |
74 | 73 | ] |
75 | 74 | }, |
|
496 | 495 | "%nbdev_export\n", |
497 | 496 | "def _make_stem(self):\n", |
498 | 497 | " stem = [(f\"conv_{i}\", self.conv_layer(self.stem_sizes[i], self.stem_sizes[i+1], \n", |
499 | | - " stride=2 if i==0 else 1, \n", |
| 498 | + "# stride=2 if i==0 else 1, \n", |
| 499 | + " stride=2 if i==self.stem_stride_on else 1, \n", |
500 | 500 | " bn_layer=(not self.stem_bn_end) if i==(len(self.stem_sizes)-2) else True,\n", |
501 | 501 | " act_fn=self.act_fn, bn_1st=self.bn_1st))\n", |
502 | 502 | " for i in range(len(self.stem_sizes)-1)]\n", |
|
566 | 566 | "%nbdev_export\n", |
567 | 567 | "# v8\n", |
568 | 568 | "class Net():\n", |
569 | | - " def __init__(self, expansion=1, layers=[2,2,2,2], c_in=3, c_out=1000, name='Net',\n", |
570 | | - " act_fn=nn.ReLU(inplace=True), pool = nn.AvgPool2d(2, ceil_mode=True), sa=0):\n", |
| 569 | + " def __init__(self, expansion=1, layers=[2,2,2,2], c_in=3, c_out=1000, \n", |
| 570 | + " name='Net', block=ResBlock,act_fn=nn.ReLU(inplace=True), \n", |
| 571 | + " pool = nn.AvgPool2d(2, ceil_mode=True), sa=0):\n", |
571 | 572 | " super().__init__()\n", |
572 | 573 | " self.name = name\n", |
573 | 574 | " self.c_in, self.c_out,self.expansion,self.layers = c_in,c_out,expansion,layers # todo setter for expansion\n", |
574 | | - " self.act_fn, self.pool, self.sa = act_fn, pool, sa\n", |
| 575 | + " self.block, self.act_fn, self.pool, self.sa = block, act_fn, pool, sa\n", |
575 | 576 | " self.groups = 1\n", |
576 | | - " \n", |
577 | 577 | " self.stem_sizes = [c_in,32,32,64]\n", |
578 | 578 | " self.stem_pool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)\n", |
| 579 | + " self.stem_stride_on = 0\n", |
579 | 580 | " self.stem_bn_end = False\n", |
580 | | - " self.block = ResBlock\n", |
581 | 581 | " self.norm = nn.BatchNorm2d\n", |
582 | 582 | " self.bn_1st = True\n", |
583 | 583 | " self.zero_bn=True\n", |
|
616 | 616 | " model.extra_repr = lambda : f\"model {self.name}\"\n", |
617 | 617 | " return model\n", |
618 | 618 | " def __repr__(self):\n", |
619 | | - " return f\" constr {self.name}\\n expansion: {self.expansion}, sa: {self.sa}, groups: {self.groups}\\n stem sizes: {self.stem_sizes}\\n body sizes {self.block_szs}\"" |
| 619 | + " return f\"{self.name} constructor\\n expansion: {self.expansion}, sa: {self.sa}, groups: {self.groups}\\n stem sizes: {self.stem_sizes}\\n body sizes {self.block_szs}\"" |
620 | 620 | ] |
621 | 621 | }, |
622 | 622 | { |
|
636 | 636 | { |
637 | 637 | "data": { |
638 | 638 | "text/plain": [ |
639 | | - " constr Net\n", |
| 639 | + "Net constructor\n", |
640 | 640 | " expansion: 1, sa: 0, groups: 1\n", |
641 | 641 | " stem sizes: [3, 32, 32, 64]\n", |
642 | 642 | " body sizes [64, 64, 128, 256, 512]" |
|
709 | 709 | "model.stem" |
710 | 710 | ] |
711 | 711 | }, |
| 712 | + { |
| 713 | + "cell_type": "code", |
| 714 | + "execution_count": null, |
| 715 | + "metadata": {}, |
| 716 | + "outputs": [ |
| 717 | + { |
| 718 | + "data": { |
| 719 | + "text/plain": [ |
| 720 | + "Sequential(\n", |
| 721 | + " (conv_0): ConvLayer(\n", |
| 722 | + " (conv): Conv2d(3, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", |
| 723 | + " (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", |
| 724 | + " (act_fn): ReLU(inplace=True)\n", |
| 725 | + " )\n", |
| 726 | + " (conv_1): ConvLayer(\n", |
| 727 | + " (conv): Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", |
| 728 | + " (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", |
| 729 | + " (act_fn): ReLU(inplace=True)\n", |
| 730 | + " )\n", |
| 731 | + " (conv_2): ConvLayer(\n", |
| 732 | + " (conv): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", |
| 733 | + " (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", |
| 734 | + " (act_fn): ReLU(inplace=True)\n", |
| 735 | + " )\n", |
| 736 | + " (stem_pool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", |
| 737 | + ")" |
| 738 | + ] |
| 739 | + }, |
| 740 | + "execution_count": null, |
| 741 | + "metadata": {}, |
| 742 | + "output_type": "execute_result" |
| 743 | + } |
| 744 | + ], |
| 745 | + "source": [ |
| 746 | + "%nbdev_collapse_output\n", |
| 747 | + "model.stem_stride_on = 1\n", |
| 748 | + "model.stem" |
| 749 | + ] |
| 750 | + }, |
712 | 751 | { |
713 | 752 | "cell_type": "code", |
714 | 753 | "execution_count": null, |
|
1112 | 1151 | "text/plain": [ |
1113 | 1152 | "Sequential(\n", |
1114 | 1153 | " (conv_0): ConvLayer(\n", |
1115 | | - " (conv): Conv2d(3, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", |
| 1154 | + " (conv): Conv2d(3, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", |
1116 | 1155 | " (act_fn): LeakyReLU(negative_slope=0.01, inplace=True)\n", |
1117 | 1156 | " (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", |
1118 | 1157 | " )\n", |
1119 | 1158 | " (conv_1): ConvLayer(\n", |
1120 | | - " (conv): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", |
| 1159 | + " (conv): Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", |
1121 | 1160 | " (act_fn): LeakyReLU(negative_slope=0.01, inplace=True)\n", |
1122 | 1161 | " (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", |
1123 | 1162 | " )\n", |
|
1238 | 1277 | " model Net\n", |
1239 | 1278 | " (stem): Sequential(\n", |
1240 | 1279 | " (conv_0): ConvLayer(\n", |
1241 | | - " (conv): Conv2d(3, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", |
| 1280 | + " (conv): Conv2d(3, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", |
1242 | 1281 | " (act_fn): LeakyReLU(negative_slope=0.01, inplace=True)\n", |
1243 | 1282 | " (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", |
1244 | 1283 | " )\n", |
1245 | 1284 | " (conv_1): ConvLayer(\n", |
1246 | | - " (conv): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", |
| 1285 | + " (conv): Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", |
1247 | 1286 | " (act_fn): LeakyReLU(negative_slope=0.01, inplace=True)\n", |
1248 | 1287 | " (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", |
1249 | 1288 | " )\n", |
|
1682 | 1721 | "assert y.shape == torch.Size([bs_test, 1000]), f\"size expected {bs_test}, 1000\"" |
1683 | 1722 | ] |
1684 | 1723 | }, |
1685 | | - { |
1686 | | - "cell_type": "markdown", |
1687 | | - "metadata": {}, |
1688 | | - "source": [ |
1689 | | - "## xresnet constructor" |
1690 | | - ] |
1691 | | - }, |
1692 | 1724 | { |
1693 | 1725 | "cell_type": "code", |
1694 | 1726 | "execution_count": null, |
1695 | 1727 | "metadata": {}, |
1696 | 1728 | "outputs": [], |
1697 | 1729 | "source": [ |
1698 | | - "%nbdev_export\n", |
1699 | | - "# me = sys.modules[__name__]\n", |
1700 | | - "# for n,e,l in [[ 18 , 1, [2,2,2 ,2] ],\n", |
1701 | | - "# [ 34 , 1, [3,4,6 ,3] ],\n", |
1702 | | - "# [ 50 , 4, [3,4,6 ,3] ],\n", |
1703 | | - "# [ 101, 4, [3,4,23,3] ],\n", |
1704 | | - "# [ 152, 4, [3,8,36,3] ],]:\n", |
1705 | | - "# name = f'net{n}'\n", |
1706 | | - "# setattr(me, name, partial(Net, expansion=e, layers=l, name=name))\n", |
1707 | | - "net34 = partial(Net, expansion=1, layers=[3, 4, 6, 3], name='xresnet34')\n", |
1708 | | - "net50 = partial(Net, expansion=4, layers=[3, 4, 6, 3], name='xresnet50')" |
| 1730 | + "## xresnet constructor\n", |
| 1731 | + "\n", |
| 1732 | + "# %nbdev_export\n", |
| 1733 | + "# # me = sys.modules[__name__]\n", |
| 1734 | + "# # for n,e,l in [[ 18 , 1, [2,2,2 ,2] ],\n", |
| 1735 | + "# # [ 34 , 1, [3,4,6 ,3] ],\n", |
| 1736 | + "# # [ 50 , 4, [3,4,6 ,3] ],\n", |
| 1737 | + "# # [ 101, 4, [3,4,23,3] ],\n", |
| 1738 | + "# # [ 152, 4, [3,8,36,3] ],]:\n", |
| 1739 | + "# # name = f'net{n}'\n", |
| 1740 | + "# # setattr(me, name, partial(Net, expansion=e, layers=l, name=name))\n", |
| 1741 | + "# net34 = partial(Net, expansion=1, layers=[3, 4, 6, 3], name='xresnet34')\n", |
| 1742 | + "# net50 = partial(Net, expansion=4, layers=[3, 4, 6, 3], name='xresnet50')" |
1709 | 1743 | ] |
1710 | 1744 | }, |
1711 | 1745 | { |
|
1714 | 1748 | "metadata": {}, |
1715 | 1749 | "outputs": [], |
1716 | 1750 | "source": [ |
1717 | | - "m = net50(c_out=10)" |
| 1751 | + "# m = net50(c_out=10)" |
1718 | 1752 | ] |
1719 | 1753 | }, |
1720 | 1754 | { |
|
1738 | 1772 | } |
1739 | 1773 | ], |
1740 | 1774 | "source": [ |
1741 | | - "m, m.c_out" |
| 1775 | + "# m, m.c_out" |
1742 | 1776 | ] |
1743 | 1777 | }, |
1744 | 1778 | { |
|
1765 | 1799 | "Converted 03_xresnet.ipynb.\n", |
1766 | 1800 | "Converted 04_Net.ipynb.\n", |
1767 | 1801 | "Converted 05_Twist.ipynb.\n", |
| 1802 | + "Converted 06_YResnet.ipynb.\n", |
1768 | 1803 | "Converted index.ipynb.\n" |
1769 | 1804 | ] |
1770 | 1805 | } |
|
0 commit comments