1. 程式人生 > >【深度學習】線性迴歸(三)使用MXNet深度學習框架實現線性迴歸

【深度學習】線性迴歸(三)使用MXNet深度學習框架實現線性迴歸

文章目錄

概述

這篇文章使用MXNet深度學習框架中的Gluon包實現小批量隨機梯度下降的線性迴歸問題。可以參考我的上一篇文章【深度學習】線性迴歸(二)小批量隨機梯度下降及其python實現

主要包括:

  • Gluon提供了data來讀取資料
  • Gluon的nn(neural network)模組定義了大量神經網路的層
  • Gluon的initialize模組提供了模型引數初始化的方法
  • Gluon的loss模組提供了各種損失函式

程式碼

# coding=utf-8
# author: BebDong # 2018.12.11 # 使用MXNet的Gluon包來實現線性迴歸:y=w1x1+w2x2+b # Gluon提供了data來讀取資料 # Gluon的nn(neural network)模組定義了大量神經網路的層 # Gluon的initialize模組提供了模型引數初始化的方法 # Gluon的loss模組提供了各種損失函式 from mxnet import autograd, nd from mxnet import init from mxnet import gluon from mxnet.gluon import data as gdata from
mxnet.gluon import nn from mxnet.gluon import loss as gloss # 生成資料集:y=w1x1+w2x2+b+e,其中e表示隨機噪聲,服從均值為0標準差為0.01的正態分佈 num_inputs = 2 # 特徵數為2,x1和x2兩個特徵 num_example = 1000 # 訓練資料集1000個樣本 true_w = [2, -3.4] # 模型中的真實引數 true_b = 4.2 features =
nd.random.normal(scale=1, shape=(num_example, num_inputs)) # 隨機生成測試資料集 labels = true_w[0] * features[:, 0] + true_w[1] * features[:, 1] + true_b labels += nd.random.normal(scale=0.01, shape=labels.shape) # 新增隨機噪聲 batch_size = 10 # 將訓練資料集的特徵和標籤組合 dataset = gdata.ArrayDataset(features, labels) # 隨機讀取小批量 data_iter = gdata.DataLoader(dataset, batch_size, shuffle=True) # nn中的Sequential例項是一個串聯各個層的容器:構造模型時,往此容器中以此新增層 net = nn.Sequential() # 線性模型可以看成單層神經網路,其輸出層是全連線層,僅有1個輸出節點,Gluon中全連線層是一個Dense例項 net.add(nn.Dense(1)) # 初始化模型引數:均值為0標準差為0.01正態分佈 net.initialize(init.Normal(sigma=0.01)) # 定義損失函式:平方損失也稱之為L2範數損失 loss = gloss.L2Loss() # 通過Gluon的Trainer例項定義優化演算法(這裡使用小批量隨機梯度下降sgd) trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.03}) # 訓練模型 epochs = 10 for epoch in range(0, epochs): for X, y in data_iter: with autograd.record(): l = loss(net(X), y) l.backward() trainer.step(batch_size) l = loss(net(features), labels) print('epoch %d, loss: %f' % (epoch, l.mean().asnumpy())) # 輸出 dense = net[0] print(true_w, dense.weight.data()) print(true_b, dense.bias.data())

實驗結果如下,紅線標出了我們得到的引數值,很真實值已經很接近了。
在這裡插入圖片描述