linear_regression_2.ipynb

{

"cells": [

  {

  "cell_type": "code",

  "execution_count": 5,

  "metadata": {},

  "outputs": [],

  "source": [

    "%matplotlib inline\n",

    "%reload_ext autoreload\n",

    "%autoreload 1\n",

    "%aimport d2lzh_pytorch\n",

    "import torch\n",

    "import torch.utils.data as Data\n",

    "from IPython import display\n",

    "from matplotlib import pyplot as plt\n",

    "import numpy as np\n",

    "import random\n",

    "\n",

    "num_inputs = 2\n",

    "num_examples = 1000\n",

    "true_w = [2, -3.4]\n",

    "true_b = 4.2\n",

    "features = torch.randn(num_examples, num_inputs, dtype=torch.float32)\n",

    "labels = true_w[0] * features[:, 0] + true_w[1] * features[:, 1] + true_b\n",

    "labels += torch.tensor(np.random.normal(0, 0.01, size=labels.size()), dtype=torch.float32)\n",

    "batch_size = 10\n",

    "# 将训练数据的特征和标签组合\n",

    "dataset = Data.TensorDataset(features, labels)\n",

    "# 随机读取小批量\n",

    "data_iter = Data.DataLoader(dataset, batch_size, shuffle=True)"

  ]

  },

  {

  "cell_type": "code",

  "execution_count": 6,

  "metadata": {},

  "outputs": [

    {

    "name": "stdout",

    "output_type": "stream",

    "text": [

      "tensor([[-1.1650e+00,  3.9608e-01],\n",

      "        [-8.4998e-01, -1.5327e+00],\n",

      "        [-8.0021e-02,  5.4315e-01],\n",

      "        [-1.1686e+00,  1.3427e-03],\n",

      "        [ 5.8616e-01,  5.0903e-01],\n",

      "        [-1.2848e+00,  1.2465e+00],\n",

      "        [ 1.1104e-01,  1.7384e+00],\n",

      "        [-3.6663e-01,  2.8090e-01],\n",

      "        [ 2.9642e-02,  2.5131e-01],\n",

      "        [-1.2431e+00,  1.6079e+00]]) tensor([ 0.5214,  7.7054,  2.1807,  1.8651,  3.6499, -2.6117, -1.4787,  2.5015,\n",

      "        3.4148, -3.7473])\n"

    ]

    }

  ],

  "source": [

    "for X, y in data_iter:\n",

    "    print(X, y)\n",

    "    break"

  ]

  },

  {

  "cell_type": "code",

  "execution_count": 9,

  "metadata": {

    "tags": [

    "定义模型"

    ]

  },

  "outputs": [

    {

    "name": "stdout",

    "output_type": "stream",

    "text": [

      "Sequential(\n",

      "  (0): Linear(in_features=2, out_features=1, bias=True)\n",

      ")\n"

    ]

    }

  ],

  "source": [

    "import torch.nn as nn\n",

    "net = nn.Sequential(nn.Linear(num_inputs, 1))\n",

    "print(net) # 使用print可以打印出网络的结构"

  ]

  },

  {

  "cell_type": "code",

  "execution_count": 10,

  "metadata": {},

  "outputs": [

    {

    "name": "stdout",

    "output_type": "stream",

    "text": [

      "Parameter containing:\n",

      "tensor([[0.0303, 0.3476]], requires_grad=True)\n",

      "Parameter containing:\n",

      "tensor([0.2868], requires_grad=True)\n"

    ]

    }

  ],

  "source": [

    "for param in net.parameters():\n",

    "    print(param)"

  ]

  },

  {

  "cell_type": "code",

  "execution_count": 11,

  "metadata": {

    "tags": [

    "初始化模型参数"

    ]

  },

  "outputs": [

    {

    "data": {

      "text/plain": [

      "Parameter containing:\n",

      "tensor([0.], requires_grad=True)"

      ]

    },

    "execution_count": 11,

    "metadata": {},

    "output_type": "execute_result"

    }

  ],

  "source": [

    "from torch.nn import init\n",

    "# net[0]这样根据下标访问子模块的写法只有当net是个ModuleList或者Sequential实例时才可以\n",

    "init.normal_(net[0].weight, mean=0, std=0.01)\n",

    "init.constant_(net[0].bias, val=0)  # 也可以直接修改bias的data: net[0].bias.data.fill_(0)"

  ]

  },

  {

  "cell_type": "code",

  "execution_count": 12,

  "metadata": {

    "tags": [

    "定义损失函数"

    ]

  },

  "outputs": [],

  "source": [

    "loss = nn.MSELoss()"

  ]

  },

  {

  "cell_type": "code",

  "execution_count": 13,

  "metadata": {

    "tags": [

    "定义优化算法"

    ]

  },

  "outputs": [

    {

    "name": "stdout",

    "output_type": "stream",

    "text": [

      "SGD (\n",

      "Parameter Group 0\n",

      "    dampening: 0\n",

      "    lr: 0.03\n",

      "    momentum: 0\n",

      "    nesterov: False\n",

      "    weight_decay: 0\n",

      ")\n"

    ]

    }

  ],

  "source": [

    "import torch.optim as optim\n",

    "\n",

    "optimizer = optim.SGD(net.parameters(), lr=0.03)\n",

    "print(optimizer)"

  ]

  },

  {

  "cell_type": "code",

  "execution_count": 14,

  "metadata": {

    "tags": [

    "训练模型"

    ]

  },

  "outputs": [

    {

    "name": "stdout",

    "output_type": "stream",

    "text": [

      "epoch 1, loss: 0.000241\n",

      "epoch 2, loss: 0.000118\n",

      "epoch 3, loss: 0.000060\n"

    ]

    }

  ],

  "source": [

    "# 在使用Gluon训练模型时,我们通过调用optim实例的step函数来迭代模型参数。\n",

    "#按照小批量随机梯度下降的定义,我们在step函数中指明批量大小,从而对批量中样本梯度求平均。\n",

    "num_epochs = 3\n",

    "for epoch in range(1, num_epochs + 1):\n",

    "    for X, y in data_iter:\n",

    "        output = net(X)\n",

    "        l = loss(output, y.view(-1, 1))\n",

    "        optimizer.zero_grad() # 梯度清零,等价于net.zero_grad()\n",

    "        l.backward()\n",

    "        optimizer.step()\n",

    "    print('epoch %d, loss: %f' % (epoch, l.item()))"

  ]

  },

  {

  "cell_type": "code",

  "execution_count": 15,

  "metadata": {},

  "outputs": [

    {

    "name": "stdout",

    "output_type": "stream",

    "text": [

      "[2, -3.4] Parameter containing:\n",

      "tensor([[ 1.9996, -3.3990]], requires_grad=True)\n",

      "4.2 Parameter containing:\n",

      "tensor([4.1998], requires_grad=True)\n"

    ]

    }

  ],

  "source": [

    "dense = net[0]\n",

    "print(true_w, dense.weight)\n",

    "print(true_b, dense.bias)"

  ]

  },

  {

  "cell_type": "code",

  "execution_count": null,

  "metadata": {},

  "outputs": [],

  "source": []

  }

],

"metadata": {

  "celltoolbar": "Tags",

  "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.6.10"

  }

},

"nbformat": 4,

"nbformat_minor": 4

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,527评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,314评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,535评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,006评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,961评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,220评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,664评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,351评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,481评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,397评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,443评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,123评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,713评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,801评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,010评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,494评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,075评论 2 341

推荐阅读更多精彩内容