注:本文為李沐大神的《動手學深度學習》的課程筆記!
import mxnet as mx
from mxnet import nd
from mxnet import gluon
from mxnet import autograd
from mxnet.gluon import nn
from utils import load_data_fashion_mnist, accuracy, evaluate_accuracy
# 定義模型
net = nn.sequential()
# 丟棄概率
drop_prob1 = 0.2
drop_prob2 = 0.5
# 新增層
with net.name_scope():
# 將輸入資料展開
net.add(nn.flatten())
# 第乙個全連線層
net.add(nn.dense(256, activation="relu"))
# 新增丟棄層
net.add(nn.dropout(drop_prob1))
# 第二個全連線層
net.add(nn.dense(256, activation="relu"))
# 新增丟棄層
net.add(nn.dropout(drop_prob2))
# 定義輸出層
net.add(nn.dense(10))
# 初始化模型引數
net.initialize()
# 批資料大小
batch_size = 256
# 載入資料
train_data, test_data = load_data_fashion_mnist(batch_size)
# 優化
trainer = gluon.trainer(net.collect_params(), 'sgd', )
# 定義交叉熵損失
softmax_cross_entropy = gluon.loss.softmaxcrossentropyloss()
# 訓練
for epoch in range(5):
# 訓練損失
train_loss = 0.0
# 訓練準確率
train_acc = 0.0
# 迭代訓練
for data, label in train_data:
with autograd.record():
# 計算輸出
output = net(data)
# 計算損失
loss = softmax_cross_entropy(output, label)
# 梯度反向傳播
loss.backward()
# 更新梯度
trainer.step(batch_size)
# 記錄訓練損失
train_loss += nd.mean(loss).asscalar()
# 記錄訓練準確率
train_acc += accuracy(output, label)
# 計算測試準確率
test_acc = evaluate_accuracy(test_data, net)
print("epoch %d. loss: %f, train acc %f, test acc %f" % (epoch, train_loss / len(train_data), train_acc / len(train_data), test_acc))
epoch 0. loss: 0.817475, train acc 0.697349, test acc 0.778145
epoch 1. loss: 0.515098, train acc 0.810831, test acc 0.847456
epoch 2. loss: 0.458402, train acc 0.833450, test acc 0.823918
epoch 3. loss: 0.419452, train acc 0.846554, test acc 0.862079
epoch 4. loss: 0.396483, train acc 0.854067, test acc 0.874499
《動手學深度學習》第八天 丟棄法
深度學習模型常常使用丟棄法 dropout 來應對過擬合問題,本節中提到的丟棄法特指倒置丟棄法 inverted dropout 由於丟棄法在訓練中隱藏層神經元的丟棄是隨機的,輸出層的計算無法過度依賴隱藏單元中的任乙個,從而可以用來應對過擬合。下面的dropout函式將以drop prob的概率丟棄...
動手學深度學習
線性回歸的基本要素 模型 為了簡單起見,這裡我們假設 只取決於房屋狀況的兩個因素,即面積 平方公尺 和房齡 年 接下來我們希望探索 與這兩個因素的具體關係。線性回歸假設輸出與各個輸入之間是線性關係 price warea area wage age b price warea area wage a...
深度學習之丟棄法 2020 2 29
深度學習模型常常使 丟棄法 dropout 來應對過擬合問題。丟棄法有 些不同的變體。本節中提到的丟棄法特指倒置丟棄法 inverted dropout matplotlib inline import torch import torch.nn as nn import numpy as np i...