PyTorch(Python)训练MNIST模型移动端IOS上使用Swift实时数字识别
識別手寫數字是計算機視覺的基石問題,可以通過神經網絡來解決。在此,我不會重復有關模型構建和訓練的細節。
本文中,我的目的是將經過訓練的模型移植到移動環境中。我使用 pytorch 構建模型,因為我想嘗試一下 torchscript。對于 ios 應用程序,我使用 swift 和 swiftUI。
使用 PyTorch 進行手寫數字識別
數據集
我們將使用流行的 MNIST 數據庫。 它是 70000 個手寫數字的集合,分為 60000 個和 10000 個圖像的訓練集和測試集。
在開始之前,我們需要進行所有必要的導入。
import numpy as np import torch import torchvision import matplotlib.pyplot as plt from time import time from torchvision import datasets, transforms from torch import nn, optim首先,讓我們定義要對數據執行哪些轉換。 換句話說,您可以將其視為對圖像執行的某種自定義編輯,以便所有圖像具有相同的尺寸和屬性。 我們使用 torchvision.transforms 來實現。
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,), (0.5,)),])現在我們終于下載了數據集,將它們打亂并轉換它們中的每一個。r然后,將它們加載到 DataLoader,它結合了數據集和采樣器,并在數據集上提供單進程或多進程迭代器。
trainset = datasets.MNIST('PATH_TO_STORE_TRAINSET', download=True, train=True, transform=transform) valset = datasets.MNIST('PATH_TO_STORE_TESTSET', download=True, train=False, transform=transform) trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True) valloader = torch.utils.data.DataLoader(valset, batch_size=64, shuffle=True)其中,batch_size是我們想要一次讀取的圖像數量。
接下來,我們將對我們的圖像和張量進行一些探索性數據分析。讓我們檢查圖像和標簽的形狀。
dataiter = iter(trainloader) images, labels = dataiter.next()print(images.shape) print(labels.shape)構建神經網絡
我們將構建以下網絡,如您所見,它包含一個輸入層(第一層),一個由十個神經元(或單元,圓圈)組成的輸出層和兩個隱藏層。
調整權重
神經網絡通過對可用數據進行多次迭代來學習。術語學習是指調整網絡的權重以最小化損失。讓我們想象一下它是如何工作的。
訓練 | 測試評估 | 保存模型
本文建模
我選擇的模型有兩個卷積層和兩個全連接層。它使用 LogSoftmax 作為輸出層激活。
模型輸入
該模型是在訓練數據上訓練的。 我想讓它處理來自相機流的圖像。 這稱為生產數據。 該應用程序必須預處理生產數據以匹配訓練數據的形狀和語義。 否則它給出的結果將是次優的。
可視化
輸出
TorchScript
Torchscript 是邁向非 Python 環境的第一步。簡而言之,torchscript 為我們提供了一個可以在 c++ 中使用的模型。模型訓練完成后,我們可以將其轉換為 torchscript 模塊。
進入ios環境
我們訓練了一個模型,將像素數據(圖像)轉換為數字預測。我們可以從 c++ 調用它。我們如何在 ios 中運行它?這就是我們將在本節中發現的內容。
運行推理
let optionalImg = UIImage(named: "three") guard let inputImg = optionalImg else {return "An helpful error message" }源代碼
詳情參閱 - 亞圖跨際
總結
以上是生活随笔為你收集整理的PyTorch(Python)训练MNIST模型移动端IOS上使用Swift实时数字识别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年5月19日最新快手半自动刷金币
- 下一篇: 【python】MAC安装openCV人