動手學深度學習 三 丟棄法 gluon

2021-08-17 01:54:06 字數 2224 閱讀 4695

注:本文為李沐大神的《動手學深度學習》的課程筆記!

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