国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【深度學習】基于華為MindSpore的手寫體圖像識別實驗

這篇具有很好參考價值的文章主要介紹了【深度學習】基于華為MindSpore的手寫體圖像識別實驗。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1 實驗介紹

1.1 簡介

Mnist手寫體圖像識別實驗是深度學習入門經(jīng)典實驗。Mnist數(shù)據(jù)集包含60,000個用于訓練的示例和10,000個用于測試的示例。這些數(shù)字已經(jīng)過尺寸標準化并位于圖像中心,圖像是固定大小(28x28像素),其值為0到255。為簡單起見,每個圖像都被平展并轉(zhuǎn)換為784(28*28)個特征的一維numpy數(shù)組。

1.2 實驗目的

  1. 學會如何搭建全連接神經(jīng)網(wǎng)絡。
  2. 掌握搭建網(wǎng)絡過程中的關(guān)鍵點。
  3. 掌握分類任務的整體流程。

2.2 實驗環(huán)境要求?

推薦在華為云ModelArts實驗平臺完成實驗,也可在本地搭建python3.7.5和MindSpore1.0.0環(huán)境完成實驗。

2.3 實驗總體設計

【深度學習】基于華為MindSpore的手寫體圖像識別實驗

?文章來源地址http://www.zghlxwxcb.cn/news/detail-401450.html

創(chuàng)建實驗環(huán)境:在本地搭建MindSpore環(huán)境。

導入實驗所需模塊:該步驟通常都是程序編輯的第一步,將實驗代碼所需要用到的模塊包用import命令進行導入。

導入數(shù)據(jù)集并預處理:神經(jīng)網(wǎng)絡的訓練離不開數(shù)據(jù),這里對數(shù)據(jù)進行導入。同時,因為全連接網(wǎng)絡只能接收固定維度的輸入數(shù)據(jù),所以,要對數(shù)據(jù)集進行預處理,以符合網(wǎng)絡的輸入維度要求。同時,設定好每一次訓練的Batch的大小,以Batch Size為單位進行輸入。

模型搭建:利用mindspore.nn的cell模塊搭建全連接網(wǎng)絡,包含輸入層,隱藏層,輸出層。同時,配置好網(wǎng)絡需要的優(yōu)化器,損失函數(shù)和評價指標。傳入數(shù)據(jù),并開始訓練模型。

模型評估:利用測試集進行模型的評估。

2.4 實驗過程

2.4.1 搭建實驗環(huán)境

Windows下MindSpore實驗環(huán)境搭建并配置Pycharm請參考【機器學習】Windows下MindSpore實驗環(huán)境搭建并配置Pycharm_在pycharm上安裝mindspore_弓長纟隹為的博客-CSDN博客

官網(wǎng)下載MNIST數(shù)據(jù)集?MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges

在MNIST文件夾下建立train和test兩個文件夾,train中存放train-labels-idx1-ubyte和train-images-idx3-ubyte文件,test中存放t10k-labels-idx1-ubyte和t10k-images-idx3-ubyte文件。

2.4.2? 模型訓練、測試及評估

#導入相關(guān)依賴庫
import  os
import numpy as np
from matplotlib import pyplot as plt
import mindspore as ms
#context模塊用于設置實驗環(huán)境和實驗設備
import mindspore.context as context
#dataset模塊用于處理數(shù)據(jù)形成數(shù)據(jù)集
import mindspore.dataset as ds
#c_transforms模塊用于轉(zhuǎn)換數(shù)據(jù)類型
import mindspore.dataset.transforms as C
#vision.c_transforms模塊用于轉(zhuǎn)換圖像,這是一個基于opencv的高級API
import mindspore.dataset.vision as CV
#導入Accuracy作為評價指標
from mindspore.nn.metrics import Accuracy
#nn中有各種神經(jīng)網(wǎng)絡層如:Dense,ReLu
from mindspore import nn
#Model用于創(chuàng)建模型對象,完成網(wǎng)絡搭建和編譯,并用于訓練和評估
from mindspore.train import Model
#LossMonitor可以在訓練過程中返回LOSS值作為監(jiān)控指標
from mindspore.train.callback import  LossMonitor
#設定運行模式為動態(tài)圖模式,并且運行設備為昇騰芯片
context.set_context(mode=context.GRAPH_MODE, device_target='CPU')
#MindSpore內(nèi)置方法讀取MNIST數(shù)據(jù)集
ds_train = ds.MnistDataset(os.path.join(r'D:\Dataset\MNIST', "train"))
ds_test = ds.MnistDataset(os.path.join(r'D:\Dataset\MNIST', "test"))

print('訓練數(shù)據(jù)集數(shù)量:',ds_train.get_dataset_size())
print('測試數(shù)據(jù)集數(shù)量:',ds_test.get_dataset_size())
#該數(shù)據(jù)集可以通過create_dict_iterator()轉(zhuǎn)換為迭代器形式,然后通過get_next()一個個輸出樣本
image=ds_train.create_dict_iterator().get_next()
#print(type(image))
print('圖像長/寬/通道數(shù):',image['image'].shape)
#一共10類,用0-9的數(shù)字表達類別。
print('一張圖像的標簽樣式:',image['label'])
DATA_DIR_TRAIN = "D:/Dataset/MNIST/train" # 訓練集信息
DATA_DIR_TEST = "D:/Dataset/MNIST/test" # 測試集信息

def create_dataset(training=True, batch_size=128, resize=(28, 28), rescale=1 / 255, shift=-0.5, buffer_size=64):
    ds = ms.dataset.MnistDataset(DATA_DIR_TRAIN if training else DATA_DIR_TEST)

    # 定義改變形狀、歸一化和更改圖片維度的操作。
    # 改為(28,28)的形狀
    resize_op = CV.Resize(resize)
    # rescale方法可以對數(shù)據(jù)集進行歸一化和標準化操作,這里就是將像素值歸一到0和1之間,shift參數(shù)可以讓值域偏移至-0.5和0.5之間
    rescale_op = CV.Rescale(rescale, shift)
    # 由高度、寬度、深度改為深度、高度、寬度
    hwc2chw_op = CV.HWC2CHW()

    # 利用map操作對原數(shù)據(jù)集進行調(diào)整
    ds = ds.map(input_columns="image", operations=[resize_op, rescale_op, hwc2chw_op])
    ds = ds.map(input_columns="label", operations=C.TypeCast(ms.int32))
    # 設定洗牌緩沖區(qū)的大小,從一定程度上控制打亂操作的混亂程度
    ds = ds.shuffle(buffer_size=buffer_size)
    # 設定數(shù)據(jù)集的batch_size大小,并丟棄剩余的樣本
    ds = ds.batch(batch_size, drop_remainder=True)

    return ds
#顯示前10張圖片以及對應標簽,檢查圖片是否是正確的數(shù)據(jù)集
dataset_show = create_dataset(training=False)
data = dataset_show.create_dict_iterator().get_next()
images = data['image'].asnumpy()
labels = data['label'].asnumpy()

for i in range(1,11):
    plt.subplot(2, 5, i)
    #利用squeeze方法去掉多余的一個維度
    plt.imshow(np.squeeze(images[i]))
    plt.title('Number: %s' % labels[i])
    plt.xticks([])
plt.show()

# 利用定義類的方式生成網(wǎng)絡,Mindspore中定義網(wǎng)絡需要繼承nn.cell。在init方法中定義該網(wǎng)絡需要的神經(jīng)網(wǎng)絡層
# 在construct方法中梳理神經(jīng)網(wǎng)絡層與層之間的關(guān)系。
class ForwardNN(nn.Cell):
    def __init__(self):
        super(ForwardNN, self).__init__()
        self.flatten = nn.Flatten()
        self.relu = nn.ReLU()
        self.fc1 = nn.Dense(784, 512, activation='relu')
        self.fc2 = nn.Dense(512, 256, activation='relu')
        self.fc3 = nn.Dense(256, 128, activation='relu')
        self.fc4 = nn.Dense(128, 64, activation='relu')
        self.fc5 = nn.Dense(64, 32, activation='relu')
        self.fc6 = nn.Dense(32, 10, activation='softmax')

    def construct(self, input_x):
        output = self.flatten(input_x)
        output = self.fc1(output)
        output = self.fc2(output)
        output = self.fc3(output)
        output = self.fc4(output)
        output = self.fc5(output)
        output = self.fc6(output)
        return output

lr = 0.001
num_epoch = 10
momentum = 0.9

net = ForwardNN()
#定義loss函數(shù),改函數(shù)不需要求導,可以給離散的標簽值,且loss值為均值
loss = nn.loss.SoftmaxCrossEntropyWithLogits( sparse=True, reduction='mean')
#定義準確率為評價指標,用于評價模型
metrics={"Accuracy": Accuracy()}
#定義優(yōu)化器為Adam優(yōu)化器,并設定學習率
opt = nn.Adam(net.trainable_params(), lr)


#生成驗證集,驗證機不需要訓練,所以不需要repeat
ds_eval = create_dataset(False, batch_size=32)
#模型編譯過程,將定義好的網(wǎng)絡、loss函數(shù)、評價指標、優(yōu)化器編譯
model = Model(net, loss, opt, metrics)

#生成訓練集
ds_train = create_dataset(True, batch_size=32)
print("============== Starting Training ==============")
#訓練模型,用loss作為監(jiān)控指標,并利用昇騰芯片的數(shù)據(jù)下沉特性進行訓練
model.train(num_epoch, ds_train,callbacks=[LossMonitor()],dataset_sink_mode=True)

#使用測試集評估模型,打印總體準確率
metrics_result=model.eval(ds_eval)
print(metrics_result)

【深度學習】基于華為MindSpore的手寫體圖像識別實驗

【深度學習】基于華為MindSpore的手寫體圖像識別實驗

備注:

若報錯 AttributeError: ‘DictIterator’ object has no attribute ‘get_next’?,這是說MindSpore數(shù)據(jù)類中缺少 “get_next”這個方法,但是在MNIST圖像識別的官方代碼中卻使用了這個方法,這就說明MindSpore官方把這個變成私密方法。

只需要在源碼iterators.py中找到DictIterator這個類,將私有方法變成公有方法就行了(即去掉最前面的下劃線)。

參考mindspore 報錯 AttributeError: ‘DictIterator‘ object has no attribute ‘get_next‘_create_dict_iterator_TNiuB的博客-CSDN博客

MindSpore:前饋神經(jīng)網(wǎng)絡時報錯‘DictIterator‘ has no attribute ‘get_next‘_skytier的博客-CSDN博客

【深度學習】基于華為MindSpore的手寫體圖像識別實驗

更多問題請參考Window10 上MindSpore(CPU)用LeNet網(wǎng)絡訓練MNIST - 知乎?

?

到了這里,關(guān)于【深度學習】基于華為MindSpore的手寫體圖像識別實驗的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • TenorFlow多層感知機識別手寫體

    GITHUB地址https://github.com/fz861062923/TensorFlow 注意下載數(shù)據(jù)連接的是外網(wǎng),有一股神秘力量讓你403 建立輸入層 x 建立隱藏層h1 建立隱藏層h2 建立輸出層 建立訓練數(shù)據(jù)label真實值 placeholder 定義loss function 選擇optimizer 計算每一項數(shù)據(jù)是否正確預測 將計算預測正確結(jié)果,加總平均 畫出

    2024年02月20日
    瀏覽(20)
  • 【卷積神經(jīng)網(wǎng)絡】MNIST 手寫體識別

    【卷積神經(jīng)網(wǎng)絡】MNIST 手寫體識別

    LeNet-5 是經(jīng)典卷積神經(jīng)網(wǎng)絡之一,于 1998 年由 Yann LeCun 等人提出。LeNet-5 網(wǎng)絡使用了卷積層、池化層和全連接層,實現(xiàn)可以應用于手寫體識別的卷積神經(jīng)網(wǎng)絡。TensorFlow 內(nèi)置了?MNIST 手寫體數(shù)據(jù)集,可以很方便地讀取數(shù)據(jù)集,并應用于后續(xù)的模型訓練過程中。本文主要記錄了如

    2024年02月11日
    瀏覽(23)
  • 第五章 神經(jīng)網(wǎng)絡與手寫體識別

    第五章 神經(jīng)網(wǎng)絡與手寫體識別

    神經(jīng)網(wǎng)絡中最基本的成分是神經(jīng)元。每個神經(jīng)元與其他神經(jīng)元相連,當它“興奮”時,就會向相連的神經(jīng)元發(fā)送化學物質(zhì),從而改變這些神經(jīng)元內(nèi)的電位;如果某神經(jīng)元的電位超過了一個“閾值”(threshold),那么它就會被激活,即“興奮”起來,向其他神經(jīng)元發(fā)送化學物質(zhì). MP神經(jīng)元

    2024年02月13日
    瀏覽(26)
  • (神經(jīng)網(wǎng)絡)MNIST手寫體數(shù)字識別MATLAB完整代碼

    (神經(jīng)網(wǎng)絡)MNIST手寫體數(shù)字識別MATLAB完整代碼

    ????????在此次實驗中,筆者針對 MNIST 數(shù)據(jù)集,利用卷積神經(jīng)網(wǎng)絡進行訓練與測試,提 出了一系列的改進方法,并對這些改進的方法進行了逐一驗證,比較了改進方法與淺層 神經(jīng)網(wǎng)絡的優(yōu)劣。 ????????首先,筆者對實驗中所用的 MNIST 數(shù)據(jù)集進行了簡單的介紹;接著,

    2024年02月03日
    瀏覽(28)
  • 6.6 實現(xiàn)卷積神經(jīng)網(wǎng)絡LeNet訓練并預測手寫體數(shù)字

    6.6 實現(xiàn)卷積神經(jīng)網(wǎng)絡LeNet訓練并預測手寫體數(shù)字

    isinstance(net,nn.Module)是Python的內(nèi)置函數(shù),用于判斷一個對象是否屬于制定類或其子類的實例。如果net是nn.Module類或子類的實例,那么表達式返回True,否則返回False. nn.Module是pytorch中用于構(gòu)建神經(jīng)網(wǎng)絡模型的基類,其他神經(jīng)網(wǎng)絡都會繼承它,因此使用 isinstance(net,nn.Module),可以確

    2024年02月14日
    瀏覽(25)
  • 【MATLAB圖像處理實用案例詳解(16)】——利用概念神經(jīng)網(wǎng)絡實現(xiàn)手寫體數(shù)字識別

    【MATLAB圖像處理實用案例詳解(16)】——利用概念神經(jīng)網(wǎng)絡實現(xiàn)手寫體數(shù)字識別

    手寫體數(shù)字屬于光學字符識別(Optical Character Recognition,OCR)的范疇,但分類的分別比光學字符識別少得多,主要只需識別共10個字符。 使用概率神經(jīng)網(wǎng)絡作為分類器,對64*64二值圖像表示的手寫數(shù)字進行分類,所得的分類器對訓練樣本能夠取得100%的正確率,訓練時間短,比

    2024年02月06日
    瀏覽(21)
  • 【深度學習】基于MindSpore和pytorch的Softmax回歸及前饋神經(jīng)網(wǎng)絡

    【深度學習】基于MindSpore和pytorch的Softmax回歸及前饋神經(jīng)網(wǎng)絡

    1 實驗內(nèi)容簡介 1.1 實驗目的 (1)熟練掌握tensor相關(guān)各種操作; (2)掌握廣義線性回歸模型(logistic模型、sofmax模型)、前饋神經(jīng)網(wǎng)絡模型的原理; (3)熟練掌握基于mindspore和pytorch的廣義線性模型與前饋神經(jīng)網(wǎng)絡模型的實現(xiàn)。 ? 1.2 實驗內(nèi)容及要求 請基于mindspore和pytorch平

    2023年04月22日
    瀏覽(26)
  • 論文精講 | 基于昇思MindSpore打造首個深度學習開源視頻壓縮算法庫OpenDMC,支持跨平臺和多種評價指標

    論文精講 | 基于昇思MindSpore打造首個深度學習開源視頻壓縮算法庫OpenDMC,支持跨平臺和多種評價指標

    論文標題 OpenDMC: An Open-Source Library and Performance Evaluation for Deep-learning-based Multi-frame Compression 論文來源 ACM MultiMedia 論文鏈接 https://www.acmmm2023.org/open-source-program/ 代碼鏈接 https://openi.pcl.ac.cn/OpenDMC/OpenDMC 昇思MindSpore作為開源的AI框架,為產(chǎn)學研和開發(fā)人員帶來端邊云全場景協(xié)同、

    2024年02月02日
    瀏覽(109)
  • [深度學習實戰(zhàn)]基于PyTorch的深度學習實戰(zhàn)(下)[Mnist手寫數(shù)字圖像識別]

    [深度學習實戰(zhàn)]基于PyTorch的深度學習實戰(zhàn)(下)[Mnist手寫數(shù)字圖像識別]

    PyTorch——開源的Python機器學習庫 ??首先感謝所有點開本文的朋友們!基于PyTorch的深度學習實戰(zhàn)可能要告一段落了。本想著再寫幾篇關(guān)于 PyTorch神經(jīng)網(wǎng)絡深度學習 的文章來著,可無奈項目時間緊任務重,要求 短時間內(nèi)出圖并做好參數(shù)擬合 。所以只得轉(zhuǎn)戰(zhàn) Matlab 編程,框架舊

    2024年02月16日
    瀏覽(29)
  • 華為開源自研AI框架昇思MindSpore應用案例:基于MindSpore框架的UNet-2D案例實現(xiàn)

    華為開源自研AI框架昇思MindSpore應用案例:基于MindSpore框架的UNet-2D案例實現(xiàn)

    Unet模型于2015年在論文《U-Net: Convolutional Networks for Biomedical Image Segmentation》中被提出,最初的提出是為了解決醫(yī)學圖像分割問題,用于細胞層面的圖像分割任務。 Unet模型是在FCN網(wǎng)絡的基礎(chǔ)上構(gòu)建的,但由于FCN無法獲取上下文信息以及位置信息,導致準確性較低,Unet模型由此

    2024年02月13日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包