動手學深度學習(二)——多層感知機(從零開始)
文章作者:Tyan
部落格:noahsnail.com | CSDN | 簡書
注:本文為李沐大神的《動手學深度學習》的課程筆記!
# 匯入mxnet
import mxnet as mx
# 設定隨機種子
mx.random.seed(2)
from mxnet import gluon
from mxnet import ndarray as nd
from mxnet import autograd
from mxnet import image
from utils import load_data_fashion_mnist, accuracy, evaluate_accuracy, SGD
資料獲取
# 批資料大小
batch_size = 256
# 獲取訓練資料和測試資料
train_data, test_data = load_data_fashion_mnist(batch_size)
多層感知機
# 輸入資料大小
num_inputs = 28 * 28
# 輸出資料大小, 分為10類
num_outputs = 10
# 隱藏單元個數
num_hidden = 256
# 正態分佈的標準差
weight_scale = 0.01
# 隨機初始化輸入層權重
W1 = nd.random_normal(shape=(num_inputs, num_hidden), scale=weight_scale)
b1 = nd.zeros(num_hidden)
# 隨機初始化隱藏層權重
W2 = nd.random_normal(shape=(num_hidden, num_outputs), scale=weight_scale)
b2 = nd.zeros(num_outputs)
# 引數陣列
params = [W1, b1, W2, b2]
# 需要計算梯度, 新增自動求導
for param in params:
param.attach_grad()
啟用函式
# 啟用函式使用ReLU, relu(x)=max(x,0)
def relu(X):
return nd.maximum(X, 0)
定義模型
def net(X):
# 輸入資料重排
X = X.reshape((-1, num_inputs))
# 計算啟用值
h1 = relu(nd.dot(X, W1) + b1)
# 計算輸出
output = nd.dot(h1, W2) + b2
return output
Softmax和交叉熵損失函式
# 定義交叉熵損失
softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()
訓練
# 定義迭代週期
epochs = 5
## 定義學習率
learning_rate = 0.1
# 訓練
for epoch in range(epochs):
# 訓練損失
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()
# 梯度下降
SGD(params, learning_rate/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: 1.042064, Train acc 0.630976, Test acc 0.776142
Epoch 1. Loss: 0.601578, Train acc 0.788862, Test acc 0.815204
Epoch 2. Loss: 0.525148, Train acc 0.816556, Test acc 0.835136
Epoch 3. Loss: 0.486619, Train acc 0.829427, Test acc 0.833033
Epoch 4. Loss: 0.459395, Train acc 0.836104, Test acc 0.835136
相關文章
- [深度學習]多層感知機(MLP)深度學習
- 《谷歌JAX深度學習從零開始學》簡介谷歌深度學習
- 《Python深度學習從零開始學》簡介Python深度學習
- 從零開始學習KafkaKafka
- 從零開始學習機器學習機器學習
- 從零開始學習laravelLaravel
- 深度學習:多層感知機和異或問題(Pytorch實現)深度學習PyTorch
- 【教程】如何從零開始構建深度學習專案?深度學習
- python Scrapy 從零開始學習筆記(二)Python筆記
- ?從零開始學習webpack系列二(配置檔案)Web
- PHP從零開始系列二(學習筆記):序言PHP筆記
- 從零開始的Unity個人學習日記(二)Unity
- eclipse學習從零開始Eclipse
- 從零開始學Electron筆記(二)筆記
- 從零開始:深度學習軟體環境安裝指南深度學習
- 從零開始學習 Go ——安裝Go
- 30天從零開始學習SwiftSwift
- 從零開始學習 React 高階元件React元件
- 從零開始學習邏輯迴歸邏輯迴歸
- 從零開始學習如何部署程式碼
- 從零開始內網滲透學習內網
- 如何從零開始學習一個框架框架
- 從零開始學typescript— 自動編譯TypeScript編譯
- 從零開始學習OpenGL-14複習光照
- 【ROS】從零開始學ROSROS
- 從零開始學PythonPython
- 【深度學習】如何從零開始構建深度學習專案?這裡有一份詳細的教程深度學習
- 從零開始學習開發人工智慧(一)人工智慧
- 軟體測試如何從零開始學習
- 我是如何從零開始學習前端的前端
- VUE2.0從零開始 學習路線Vue
- 《從零開始學Swift》學習筆記(Day 24)——列舉Swift筆記
- 《從零開始學Swift》學習筆記(Day 16)——字典集合Swift筆記
- 從感知機到Transformer,一文概述深度學習簡史ORM深度學習
- 從零開始學習MG動畫(二 - 2):MG動畫的工作流程動畫
- 從零開始配置深度學習環境:CUDA+Anaconda+Pytorch+TensorFlow深度學習PyTorch
- 【深度】監督學習—從好的label開始
- 從零開始學 Spring BootSpring Boot