| @@ -181,7 +181,9 @@ | |||||
| { | { | ||||
| "cell_type": "code", | "cell_type": "code", | ||||
| "execution_count": 2, | "execution_count": 2, | ||||
| "metadata": {}, | |||||
| "metadata": { | |||||
| "collapsed": true | |||||
| }, | |||||
| "outputs": [], | "outputs": [], | ||||
| "source": [ | "source": [ | ||||
| "%matplotlib inline\n", | "%matplotlib inline\n", | ||||
| @@ -234,7 +236,9 @@ | |||||
| { | { | ||||
| "cell_type": "code", | "cell_type": "code", | ||||
| "execution_count": 4, | "execution_count": 4, | ||||
| "metadata": {}, | |||||
| "metadata": { | |||||
| "collapsed": true | |||||
| }, | |||||
| "outputs": [], | "outputs": [], | ||||
| "source": [ | "source": [ | ||||
| "def plot_decision_boundary(predict_func, data, label, figName=None):\n", | "def plot_decision_boundary(predict_func, data, label, figName=None):\n", | ||||
| @@ -263,7 +267,9 @@ | |||||
| { | { | ||||
| "cell_type": "code", | "cell_type": "code", | ||||
| "execution_count": 7, | "execution_count": 7, | ||||
| "metadata": {}, | |||||
| "metadata": { | |||||
| "collapsed": true | |||||
| }, | |||||
| "outputs": [], | "outputs": [], | ||||
| "source": [ | "source": [ | ||||
| "\n", | "\n", | ||||
| @@ -780,7 +786,7 @@ | |||||
| "name": "python", | "name": "python", | ||||
| "nbconvert_exporter": "python", | "nbconvert_exporter": "python", | ||||
| "pygments_lexer": "ipython3", | "pygments_lexer": "ipython3", | ||||
| "version": "3.7.9" | |||||
| "version": "3.5.4" | |||||
| } | } | ||||
| }, | }, | ||||
| "nbformat": 4, | "nbformat": 4, | ||||
| @@ -13,7 +13,9 @@ | |||||
| { | { | ||||
| "cell_type": "code", | "cell_type": "code", | ||||
| "execution_count": 3, | "execution_count": 3, | ||||
| "metadata": {}, | |||||
| "metadata": { | |||||
| "collapsed": true | |||||
| }, | |||||
| "outputs": [], | "outputs": [], | ||||
| "source": [ | "source": [ | ||||
| "import torch.nn as nn\n", | "import torch.nn as nn\n", | ||||
| @@ -97,7 +99,9 @@ | |||||
| { | { | ||||
| "cell_type": "code", | "cell_type": "code", | ||||
| "execution_count": 5, | "execution_count": 5, | ||||
| "metadata": {}, | |||||
| "metadata": { | |||||
| "collapsed": true | |||||
| }, | |||||
| "outputs": [], | "outputs": [], | ||||
| "source": [ | "source": [ | ||||
| "from torchvision.datasets import CIFAR10\n", | "from torchvision.datasets import CIFAR10\n", | ||||
| @@ -216,7 +220,9 @@ | |||||
| { | { | ||||
| "cell_type": "code", | "cell_type": "code", | ||||
| "execution_count": null, | "execution_count": null, | ||||
| "metadata": {}, | |||||
| "metadata": { | |||||
| "collapsed": true | |||||
| }, | |||||
| "outputs": [], | "outputs": [], | ||||
| "source": [ | "source": [ | ||||
| "# save raw data\n", | "# save raw data\n", | ||||
| @@ -241,7 +247,7 @@ | |||||
| "name": "python", | "name": "python", | ||||
| "nbconvert_exporter": "python", | "nbconvert_exporter": "python", | ||||
| "pygments_lexer": "ipython3", | "pygments_lexer": "ipython3", | ||||
| "version": "3.7.9" | |||||
| "version": "3.5.4" | |||||
| } | } | ||||
| }, | }, | ||||
| "nbformat": 4, | "nbformat": 4, | ||||
| @@ -42,7 +42,8 @@ | |||||
| "ExecuteTime": { | "ExecuteTime": { | ||||
| "end_time": "2017-12-22T12:51:05.427292Z", | "end_time": "2017-12-22T12:51:05.427292Z", | ||||
| "start_time": "2017-12-22T12:51:04.924747Z" | "start_time": "2017-12-22T12:51:04.924747Z" | ||||
| } | |||||
| }, | |||||
| "collapsed": true | |||||
| }, | }, | ||||
| "outputs": [], | "outputs": [], | ||||
| "source": [ | "source": [ | ||||
| @@ -61,7 +62,8 @@ | |||||
| "ExecuteTime": { | "ExecuteTime": { | ||||
| "end_time": "2017-12-22T12:51:08.890890Z", | "end_time": "2017-12-22T12:51:08.890890Z", | ||||
| "start_time": "2017-12-22T12:51:08.876313Z" | "start_time": "2017-12-22T12:51:08.876313Z" | ||||
| } | |||||
| }, | |||||
| "collapsed": true | |||||
| }, | }, | ||||
| "outputs": [], | "outputs": [], | ||||
| "source": [ | "source": [ | ||||
| @@ -82,7 +84,8 @@ | |||||
| "ExecuteTime": { | "ExecuteTime": { | ||||
| "end_time": "2017-12-22T12:51:09.671474Z", | "end_time": "2017-12-22T12:51:09.671474Z", | ||||
| "start_time": "2017-12-22T12:51:09.587337Z" | "start_time": "2017-12-22T12:51:09.587337Z" | ||||
| } | |||||
| }, | |||||
| "collapsed": true | |||||
| }, | }, | ||||
| "outputs": [], | "outputs": [], | ||||
| "source": [ | "source": [ | ||||
| @@ -167,7 +170,8 @@ | |||||
| "ExecuteTime": { | "ExecuteTime": { | ||||
| "end_time": "2017-12-22T12:51:13.149380Z", | "end_time": "2017-12-22T12:51:13.149380Z", | ||||
| "start_time": "2017-12-22T12:51:12.934110Z" | "start_time": "2017-12-22T12:51:12.934110Z" | ||||
| } | |||||
| }, | |||||
| "collapsed": true | |||||
| }, | }, | ||||
| "outputs": [], | "outputs": [], | ||||
| "source": [ | "source": [ | ||||
| @@ -280,7 +284,8 @@ | |||||
| "ExecuteTime": { | "ExecuteTime": { | ||||
| "end_time": "2017-12-22T12:51:16.387778Z", | "end_time": "2017-12-22T12:51:16.387778Z", | ||||
| "start_time": "2017-12-22T12:51:15.121350Z" | "start_time": "2017-12-22T12:51:15.121350Z" | ||||
| } | |||||
| }, | |||||
| "collapsed": true | |||||
| }, | }, | ||||
| "outputs": [], | "outputs": [], | ||||
| "source": [ | "source": [ | ||||
| @@ -447,7 +452,7 @@ | |||||
| "name": "python", | "name": "python", | ||||
| "nbconvert_exporter": "python", | "nbconvert_exporter": "python", | ||||
| "pygments_lexer": "ipython3", | "pygments_lexer": "ipython3", | ||||
| "version": "3.7.9" | |||||
| "version": "3.5.4" | |||||
| } | } | ||||
| }, | }, | ||||
| "nbformat": 4, | "nbformat": 4, | ||||
| @@ -45,7 +45,8 @@ | |||||
| "ExecuteTime": { | "ExecuteTime": { | ||||
| "end_time": "2017-12-22T15:38:31.113030Z", | "end_time": "2017-12-22T15:38:31.113030Z", | ||||
| "start_time": "2017-12-22T15:38:30.612922Z" | "start_time": "2017-12-22T15:38:30.612922Z" | ||||
| } | |||||
| }, | |||||
| "collapsed": true | |||||
| }, | }, | ||||
| "outputs": [], | "outputs": [], | ||||
| "source": [ | "source": [ | ||||
| @@ -71,7 +72,8 @@ | |||||
| "ExecuteTime": { | "ExecuteTime": { | ||||
| "end_time": "2017-12-22T15:38:31.121249Z", | "end_time": "2017-12-22T15:38:31.121249Z", | ||||
| "start_time": "2017-12-22T15:38:31.115369Z" | "start_time": "2017-12-22T15:38:31.115369Z" | ||||
| } | |||||
| }, | |||||
| "collapsed": true | |||||
| }, | }, | ||||
| "outputs": [], | "outputs": [], | ||||
| "source": [ | "source": [ | ||||
| @@ -98,7 +100,8 @@ | |||||
| "ExecuteTime": { | "ExecuteTime": { | ||||
| "end_time": "2017-12-22T15:38:31.145274Z", | "end_time": "2017-12-22T15:38:31.145274Z", | ||||
| "start_time": "2017-12-22T15:38:31.123363Z" | "start_time": "2017-12-22T15:38:31.123363Z" | ||||
| } | |||||
| }, | |||||
| "collapsed": true | |||||
| }, | }, | ||||
| "outputs": [], | "outputs": [], | ||||
| "source": [ | "source": [ | ||||
| @@ -168,11 +171,12 @@ | |||||
| "ExecuteTime": { | "ExecuteTime": { | ||||
| "end_time": "2017-12-22T15:38:31.222120Z", | "end_time": "2017-12-22T15:38:31.222120Z", | ||||
| "start_time": "2017-12-22T15:38:31.215770Z" | "start_time": "2017-12-22T15:38:31.215770Z" | ||||
| } | |||||
| }, | |||||
| "collapsed": true | |||||
| }, | }, | ||||
| "outputs": [], | "outputs": [], | ||||
| "source": [ | "source": [ | ||||
| "def transition(in_channel, out_channel):\n", | |||||
| "def Transition_Block(in_channel, out_channel):\n", | |||||
| " trans_layer = nn.Sequential(\n", | " trans_layer = nn.Sequential(\n", | ||||
| " nn.BatchNorm2d(in_channel),\n", | " nn.BatchNorm2d(in_channel),\n", | ||||
| " nn.ReLU(True),\n", | " nn.ReLU(True),\n", | ||||
| @@ -209,7 +213,7 @@ | |||||
| } | } | ||||
| ], | ], | ||||
| "source": [ | "source": [ | ||||
| "test_net = transition(3, 12)\n", | |||||
| "test_net = Transition_Block(3, 12)\n", | |||||
| "test_x = Variable(torch.zeros(1, 3, 96, 96))\n", | "test_x = Variable(torch.zeros(1, 3, 96, 96))\n", | ||||
| "print('input shape: {} x {} x {}'.format(test_x.shape[1], test_x.shape[2], test_x.shape[3]))\n", | "print('input shape: {} x {} x {}'.format(test_x.shape[1], test_x.shape[2], test_x.shape[3]))\n", | ||||
| "test_y = test_net(test_x)\n", | "test_y = test_net(test_x)\n", | ||||
| @@ -232,7 +236,8 @@ | |||||
| "ExecuteTime": { | "ExecuteTime": { | ||||
| "end_time": "2017-12-22T15:38:31.318822Z", | "end_time": "2017-12-22T15:38:31.318822Z", | ||||
| "start_time": "2017-12-22T15:38:31.236857Z" | "start_time": "2017-12-22T15:38:31.236857Z" | ||||
| } | |||||
| }, | |||||
| "collapsed": true | |||||
| }, | }, | ||||
| "outputs": [], | "outputs": [], | ||||
| "source": [ | "source": [ | ||||
| @@ -240,10 +245,11 @@ | |||||
| " def __init__(self, in_channel, num_classes, growth_rate=32, block_layers=[6, 12, 24, 16]):\n", | " def __init__(self, in_channel, num_classes, growth_rate=32, block_layers=[6, 12, 24, 16]):\n", | ||||
| " super(DenseNet, self).__init__()\n", | " super(DenseNet, self).__init__()\n", | ||||
| " self.block1 = nn.Sequential(\n", | " self.block1 = nn.Sequential(\n", | ||||
| " nn.Conv2d(in_channel, 64, 7, 2, 3),\n", | |||||
| " nn.Conv2d(in_channels=in_channel, out_channels=64, \n", | |||||
| " kernel_size=7, stride=2, padding=3),\n", | |||||
| " nn.BatchNorm2d(64),\n", | " nn.BatchNorm2d(64),\n", | ||||
| " nn.ReLU(True),\n", | " nn.ReLU(True),\n", | ||||
| " nn.MaxPool2d(3, 2, padding=1)\n", | |||||
| " nn.MaxPool2d(kernel_size=3, stride=2, padding=1)\n", | |||||
| " )\n", | " )\n", | ||||
| " \n", | " \n", | ||||
| " channels = 64\n", | " channels = 64\n", | ||||
| @@ -252,7 +258,7 @@ | |||||
| " block.append(Dense_Block(channels, growth_rate, layers))\n", | " block.append(Dense_Block(channels, growth_rate, layers))\n", | ||||
| " channels += layers * growth_rate\n", | " channels += layers * growth_rate\n", | ||||
| " if i != len(block_layers) - 1:\n", | " if i != len(block_layers) - 1:\n", | ||||
| " block.append(transition(channels, channels // 2)) # 通过 transition 层将大小减半,通道数减半\n", | |||||
| " block.append(Transition_Block(channels, channels // 2)) # 通过 transition 层将大小减半,通道数减半\n", | |||||
| " channels = channels // 2\n", | " channels = channels // 2\n", | ||||
| " \n", | " \n", | ||||
| " self.block2 = nn.Sequential(*block)\n", | " self.block2 = nn.Sequential(*block)\n", | ||||
| @@ -303,7 +309,8 @@ | |||||
| "ExecuteTime": { | "ExecuteTime": { | ||||
| "end_time": "2017-12-22T15:38:32.894729Z", | "end_time": "2017-12-22T15:38:32.894729Z", | ||||
| "start_time": "2017-12-22T15:38:31.656356Z" | "start_time": "2017-12-22T15:38:31.656356Z" | ||||
| } | |||||
| }, | |||||
| "collapsed": true | |||||
| }, | }, | ||||
| "outputs": [], | "outputs": [], | ||||
| "source": [ | "source": [ | ||||
| @@ -458,7 +465,7 @@ | |||||
| "name": "python", | "name": "python", | ||||
| "nbconvert_exporter": "python", | "nbconvert_exporter": "python", | ||||
| "pygments_lexer": "ipython3", | "pygments_lexer": "ipython3", | ||||
| "version": "3.7.9" | |||||
| "version": "3.5.4" | |||||
| } | } | ||||
| }, | }, | ||||
| "nbformat": 4, | "nbformat": 4, | ||||
| @@ -59,7 +59,7 @@ | |||||
| "source": [ | "source": [ | ||||
| "* 第一和第二个公式计算出一个 batch 中数据的均值和方差\n", | "* 第一和第二个公式计算出一个 batch 中数据的均值和方差\n", | ||||
| "* 第三个公式对 batch 中的每个数据点做标准化,$\\epsilon$ 是为了计算稳定引入的一个小的常数,通常取 $10^{-5}$\n", | "* 第三个公式对 batch 中的每个数据点做标准化,$\\epsilon$ 是为了计算稳定引入的一个小的常数,通常取 $10^{-5}$\n", | ||||
| "* 最后利用权重修正得到最后的输出结果,其中 $\\gamma$ $\\beta$是权值变换参数,也是网络参数在训练过程一起学习\n", | |||||
| "* 最后利用权重修正得到最后的输出结果,其中 $\\gamma$,$\\beta$是权值变换参数,也是网络参数在训练过程一起学习\n", | |||||
| "\n", | "\n", | ||||
| "下面演示一维的情况,也就是神经网络中的情况" | "下面演示一维的情况,也就是神经网络中的情况" | ||||
| ] | ] | ||||
| @@ -427,6 +427,13 @@ | |||||
| "下面我们在卷积网络下试用一下批标准化看看效果" | "下面我们在卷积网络下试用一下批标准化看看效果" | ||||
| ] | ] | ||||
| }, | }, | ||||
| { | |||||
| "cell_type": "markdown", | |||||
| "metadata": {}, | |||||
| "source": [ | |||||
| "FIXME:设计一个更有说服力的例子" | |||||
| ] | |||||
| }, | |||||
| { | { | ||||
| "cell_type": "code", | "cell_type": "code", | ||||
| "execution_count": null, | "execution_count": null, | ||||
| @@ -588,7 +595,7 @@ | |||||
| "name": "python", | "name": "python", | ||||
| "nbconvert_exporter": "python", | "nbconvert_exporter": "python", | ||||
| "pygments_lexer": "ipython3", | "pygments_lexer": "ipython3", | ||||
| "version": "3.7.9" | |||||
| "version": "3.5.4" | |||||
| } | } | ||||
| }, | }, | ||||
| "nbformat": 4, | "nbformat": 4, | ||||
| @@ -267,7 +267,7 @@ | |||||
| " if epoch == 20:\n", | " if epoch == 20:\n", | ||||
| " set_learning_rate(optimizer, 0.01) # 20 次修改学习率为 0.01\n", | " set_learning_rate(optimizer, 0.01) # 20 次修改学习率为 0.01\n", | ||||
| " elif epoch == 60:\n", | " elif epoch == 60:\n", | ||||
| " set_learning_rate(optimizer, 0.005) # 60 次修改学习率为 0.01\n", | |||||
| " set_learning_rate(optimizer, 0.005) # 60 次修改学习率为 0.005\n", | |||||
| "\n", | "\n", | ||||
| " train_loss = 0\n", | " train_loss = 0\n", | ||||
| " net = net.train()\n", | " net = net.train()\n", | ||||
| @@ -160,7 +160,7 @@ | |||||
| "name": "python", | "name": "python", | ||||
| "nbconvert_exporter": "python", | "nbconvert_exporter": "python", | ||||
| "pygments_lexer": "ipython3", | "pygments_lexer": "ipython3", | ||||
| "version": "3.7.9" | |||||
| "version": "3.5.4" | |||||
| } | } | ||||
| }, | }, | ||||
| "nbformat": 4, | "nbformat": 4, | ||||
| @@ -612,7 +612,7 @@ | |||||
| "name": "python", | "name": "python", | ||||
| "nbconvert_exporter": "python", | "nbconvert_exporter": "python", | ||||
| "pygments_lexer": "ipython3", | "pygments_lexer": "ipython3", | ||||
| "version": "3.7.9" | |||||
| "version": "3.5.4" | |||||
| } | } | ||||
| }, | }, | ||||
| "nbformat": 4, | "nbformat": 4, | ||||