|
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