{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import torch\n", "import torch.optim as optim\n", "import torch.nn as nn\n", "\n", "torch.set_printoptions(edgeitems=2, linewidth=75)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Sequential(\n", " (0): Linear(in_features=1, out_features=11, bias=True)\n", " (1): Tanh()\n", " (2): Linear(in_features=11, out_features=1, bias=True)\n", ")" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "seq_model = nn.Sequential(\n", " nn.Linear(1, 11), # <1>\n", " nn.Tanh(),\n", " nn.Linear(11, 1)) # <1>\n", "seq_model" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Sequential(\n", " (hidden_linear): Linear(in_features=1, out_features=12, bias=True)\n", " (hidden_activation): Tanh()\n", " (output_linear): Linear(in_features=12, out_features=1, bias=True)\n", ")" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from collections import OrderedDict\n", "\n", "namedseq_model = nn.Sequential(OrderedDict([\n", " ('hidden_linear', nn.Linear(1, 12)),\n", " ('hidden_activation', nn.Tanh()),\n", " ('output_linear', nn.Linear(12 , 1))\n", "]))\n", "\n", "namedseq_model" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SubclassModel(\n", " (hidden_linear): Linear(in_features=1, out_features=13, bias=True)\n", " (hidden_activation): Tanh()\n", " (output_linear): Linear(in_features=13, out_features=1, bias=True)\n", ")" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class SubclassModel(nn.Module):\n", " def __init__(self):\n", " super().__init__() # <1>\n", " \n", " self.hidden_linear = nn.Linear(1, 13)\n", " self.hidden_activation = nn.Tanh()\n", " self.output_linear = nn.Linear(13, 1)\n", " \n", " def forward(self, input):\n", " hidden_t = self.hidden_linear(input)\n", " activated_t = self.hidden_activation(hidden_t)\n", " output_t = self.output_linear(activated_t)\n", " \n", " return output_t\n", " \n", "subclass_model = SubclassModel()\n", "subclass_model" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "seq\n" ] }, { "ename": "TypeError", "evalue": "unsupported format string passed to torch.Size.__format__", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtype_str\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mname_str\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparam\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnamed_parameters\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"{name_str:21} {param.shape:19} {param.numel()}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mTypeError\u001b[0m: unsupported format string passed to torch.Size.__format__" ] } ], "source": [ "for type_str, model in [('seq', seq_model),\n", " ('namedseq', namedseq_model),\n", " ('subclass', subclass_model)]:\n", " print(type_str)\n", " for name_str, param in model.named_parameters():\n", " print(\"{:21} {:19} {}\".format(\n", " name_str, str(param.shape), param.numel()))\n", " \n", " print()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SubclassFunctionalModel(\n", " (hidden_linear): Linear(in_features=1, out_features=14, bias=True)\n", " (output_linear): Linear(in_features=14, out_features=1, bias=True)\n", ")" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class SubclassFunctionalModel(nn.Module):\n", " def __init__(self):\n", " super().__init__()\n", " \n", " self.hidden_linear = nn.Linear(1, 14) \n", " # <1>\n", " self.output_linear = nn.Linear(14, 1)\n", " \n", " def forward(self, input):\n", " hidden_t = self.hidden_linear(input)\n", " activated_t = torch.tanh(hidden_t) # <2>\n", " output_t = self.output_linear(activated_t)\n", " \n", " return output_t\n", " \n", "func_model = SubclassFunctionalModel()\n", "func_model" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" } }, "nbformat": 4, "nbformat_minor": 2 }