最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pytorch實(shí)現(xiàn)下載加載mnist數(shù)據(jù)集

 更新時(shí)間:2024年06月25日 09:29:50   作者:啥也不會(huì)的阿興  
這篇文章主要介紹了pytorch實(shí)現(xiàn)下載加載mnist數(shù)據(jù)集方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

pytorch下載加載mnist數(shù)據(jù)集

1.下載mnist

使用torchvision.datasets,其中含有一些常見的MNIST等數(shù)據(jù)集,

使用方式:

train_data=torchvision.datasets.MNIST(
    root='MNIST',
    train=True,
    transform=torchvision.transforms.ToTensor(),
    download=True
)
test_data=torchvision.datasets.MNIST(
    root='MNIST',
    train=False,
    transform=torchvision.transforms.ToTensor(),
    download=True
)
  • root:表示下載位置,下載后,會(huì)在該位置中新建一個(gè)MNIST文件夾,底下還有一個(gè)raw文件夾
  • train:True下載就會(huì)是訓(xùn)練集,F(xiàn)alse下載就會(huì)是測(cè)試集
  • transform:表示轉(zhuǎn)換方式
  • download:表示是否下載

下載完后會(huì)生成四個(gè)壓縮包,分別代表著train的img和label以及test的img和label

變量train_data和test_data的類型分別為'torchvision.datasets.mnist.MNIST',如果想用到pytorch中的進(jìn)行訓(xùn)練,就必須將變量改為torch

2.torch.utils.data.DataLoader( )

用from torch.utils.data import DataLoader進(jìn)行導(dǎo)入,

train_load=DataLoader(dataset=train_data,batch_size=100,shuffle=True)
test_load=DataLoader(dataset=test_data,batch_size=100,shuffle=True)

隨機(jī)加載批量大小為l00數(shù)據(jù)給train_load和test_load,每個(gè)變量都由兩部分組成,用迭代器將兩部分分開

train_x,train_y=next(iter(train_load))

其中train_x為屬性值,type(train_x)=torch.Size([100, 1, 28, 28])#100個(gè),channel為1,長(zhǎng)寬為28*28,type(train_y)=torch.size([100])

3.opencv顯示圖片

import cv2

img=torchvision.utils.make_grid(train_x,nrow=10)#將train_x賦給一個(gè)寬為10的網(wǎng)格
#因?yàn)閏v2顯示的圖片格式是(size,size,channel),但是img格式為(channel,size,size)
img = img.numpy().transpose(1,2,0)
cv2.imshow('img', img)
cv2.waitKey()

mnist手寫數(shù)字識(shí)別實(shí)踐

MNIST數(shù)據(jù)集是手寫數(shù)字識(shí)別領(lǐng)域最常用的數(shù)據(jù)集。它包含60,000個(gè)用于訓(xùn)練的示例和10,000個(gè)用于測(cè)試的示例。這些手寫數(shù)字圖像來自美/國(guó)人口/普查局的員工和美國(guó)高中學(xué)生。MNIST數(shù)據(jù)集中的每個(gè)圖像都是28x28的灰度圖像,包含一個(gè)手寫數(shù)字 0-9。所有的數(shù)字都以清晰的黑色位于圖像的中心,背景為白色。

MNIST數(shù)據(jù)集主要用于測(cè)試各種手寫數(shù)字識(shí)別算法的性能。我們可以使用這個(gè)數(shù)據(jù)集構(gòu)建自己的手寫數(shù)字識(shí)別模型,并在10,000個(gè)測(cè)試集圖像上評(píng)估其性能。

在MNIST數(shù)據(jù)集上,一個(gè)較好的模型可以達(dá)到超過99%的識(shí)別準(zhǔn)確率。所以,這個(gè)數(shù)據(jù)集對(duì)初學(xué)者來說比較簡(jiǎn)單,可以用來驗(yàn)證自己構(gòu)建的模型是否工作正常。對(duì)專家來說,達(dá)到99.9%以上的識(shí)別率則需要更復(fù)雜的模型和更高級(jí)的技巧。

MNIST數(shù)據(jù)集非常適合作為手寫數(shù)字識(shí)別入門數(shù)據(jù)集:

  • 它包含一個(gè)非常標(biāo)準(zhǔn)的問題定義:識(shí)別0-9之間的10個(gè)類別
  • 數(shù)據(jù)集規(guī)模適中,訓(xùn)練和測(cè)試都非??焖?/li>
  • 高識(shí)別準(zhǔn)確率比較容易達(dá)到,可以快速驗(yàn)證自己的方法
  • 數(shù)據(jù)集簡(jiǎn)單而標(biāo)準(zhǔn)化,便于比較不同方法的性能

MNIST可以通過TensorFlow和Keras等深度學(xué)習(xí)框架非常簡(jiǎn)單地載入使用。我們只需要幾行代碼就可以構(gòu)建一個(gè)基本的手寫數(shù)字識(shí)別模型并在此數(shù)據(jù)集上訓(xùn)練與評(píng)估。

所以,總的來說,MNIST是一個(gè)非常典型和流行的手寫數(shù)字識(shí)別入門數(shù)據(jù)集。它包含標(biāo)準(zhǔn)化的圖像和問題定義,規(guī)模適中,具有較高的識(shí)別準(zhǔn)確率,非常適合初學(xué)者練手和驗(yàn)證模型。這個(gè)數(shù)據(jù)集讓手寫數(shù)字識(shí)別變得簡(jiǎn)單可學(xué),降低了入門難度,值得傾注時(shí)間去理解與實(shí)踐。

下面使用Keras訓(xùn)練MNIST數(shù)據(jù)集,Keras具有簡(jiǎn)潔而快速的API,可以使用很少的代碼構(gòu)建強(qiáng)大的神經(jīng)網(wǎng)絡(luò)。它降低了深度學(xué)習(xí)的入門難度,讓更多人可以輕松使用。

安裝python環(huán)境,推薦使用Anaconda,Anaconda安裝完畢后可以使用Jupyter編寫python代碼。Jupyter可以一段一段的執(zhí)行代碼,每寫完一句python就可以立即運(yùn)行并查看結(jié)果,極大提高了效率。

# 導(dǎo)入numpy并為計(jì)算機(jī)的偽隨機(jī)數(shù)生成器設(shè)置種子開始
import numpy as np
np.random.seed(123)
'''
設(shè)置隨機(jī)數(shù)種子的主要目的是確保隨機(jī)結(jié)果可復(fù)現(xiàn)。
如果不設(shè)置隨機(jī)數(shù)種子,每次運(yùn)行代碼時(shí)各種隨機(jī)操作的結(jié)果都會(huì)略微不同,導(dǎo)致實(shí)驗(yàn)結(jié)果也不同,給實(shí)驗(yàn)帶來不必要的變量。
設(shè)置隨機(jī)數(shù)種子后,每次運(yùn)行代碼時(shí)各種隨機(jī)操作的初始化結(jié)果都會(huì)相同,所以運(yùn)行結(jié)果也相同,確保了實(shí)驗(yàn)的可復(fù)現(xiàn)性。
'''
#從Keras導(dǎo)入Sequential模型類型
from keras.models import Sequential
#從Keras層模塊中導(dǎo)入Dense、Dropout、Activation和Flatten四種層。
from keras.layers import Dense, Dropout, Activation, Flatten
'''
Sequential是Keras中最簡(jiǎn)單的模型,它由多個(gè)網(wǎng)絡(luò)層線性堆疊而成。我們只需要將各種Keras層逐個(gè)添加到該模型中,即可構(gòu)建自己的網(wǎng)絡(luò)結(jié)構(gòu)。
四種Keras層的作用分別是:
- Dense:全連接層,用于連接網(wǎng)絡(luò)層之間的節(jié)點(diǎn),實(shí)現(xiàn)函數(shù)擬合等作用。在分類和回歸任務(wù)中廣泛使用。
- Dropout:隨機(jī)置零層,用于在訓(xùn)練過程中隨機(jī)舍棄一定比例的節(jié)點(diǎn),用于防止過擬合。
- Activation:激活層,用于對(duì)上一層的輸出施加非線性激活,如ReLU、sigmoid等。增強(qiáng)模型的表達(dá)能力。 
- Flatten:展平層,用于將輸入“壓平”,例如將多維輸入壓平為二維,以供全連接層使用。
所以,簡(jiǎn)而言之,這四種Keras層的主要作用是:
- Dense:實(shí)現(xiàn)網(wǎng)絡(luò)連接,用于擬合和回歸 
- Dropout:實(shí)現(xiàn)隨機(jī)舍棄,用于正則化和防過擬合 
- Activation:實(shí)現(xiàn)非線性轉(zhuǎn)換,增強(qiáng)表達(dá)能力 
- Flatten:實(shí)現(xiàn)維度壓縮和reshape,以連串網(wǎng)絡(luò) 
這些層是構(gòu)建神經(jīng)網(wǎng)絡(luò)的基本模塊,我們可以像搭積木一樣組合這些層,構(gòu)建出自己想要的復(fù)雜網(wǎng)絡(luò)結(jié)構(gòu)。
'''
#從Keras導(dǎo)入CNN層,這些卷積層將幫助我們有效地訓(xùn)練圖像數(shù)據(jù)
from keras.layers import Conv2D, MaxPool2D
#導(dǎo)入一些實(shí)用程序
from keras.utils import np_utils
#加載keras庫(kù)的MNIST數(shù)據(jù)集
from keras.datasets import mnist
#載入數(shù)據(jù)集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
#打印數(shù)據(jù)集的形狀
print(x_train.shape, y_train.shape)
#輸出結(jié)果顯示訓(xùn)練集中有60000個(gè)樣本,每個(gè)圖像都是28x28

#通過matplotlib繪制第一個(gè)樣本
from matplotlib import pyplot as plt
plt.imshow(x_train[0])

#使用Theano后端時(shí),必須聲明輸入圖像的深度
#即將數(shù)據(jù)集的形狀從nx高x寬轉(zhuǎn)換為nx寬x高x深度
x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)
print(x_train.shape)

#輸入數(shù)據(jù)的最后預(yù)處理步驟是將數(shù)據(jù)類型轉(zhuǎn)換為float32并將我們的數(shù)據(jù)值規(guī)范化為[0, 1]
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255

#看看類標(biāo)簽數(shù)據(jù)
print(y_train.shape)
#有十個(gè)不同的類,每個(gè)數(shù)字一個(gè),看起來只有一個(gè)一維數(shù)組
print(y_train[:10])
#將一維類數(shù)組轉(zhuǎn)換為10維類矩陣
Y_train = np_utils.to_categorical(y_train, 10)
Y_test = np_utils.to_categorical(y_test, 10)
print(Y_train.shape)

#定義一個(gè)順序模型
model = Sequential()
#在一個(gè)模型中添加一個(gè)卷積層
'''
filters=32:使用32個(gè)卷積濾波器(卷積核)
kernel_size=(3, 3):每個(gè)濾波器的大小為3x3
activation='relu':激活函數(shù)采用ReLU
input_shape=(28, 28, 1):輸入數(shù)據(jù)的shape為28x28x1,這里1表示黑白圖像
'''
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))
print(model.output_shape)


#再添加一個(gè)卷積層
'''
1、Conv2D層:二維卷積層,32個(gè)卷積核,核大小為3x3,激活函數(shù)為ReLU
2. MaxPool2D層:二維最大池化層,池化窗口大小為2x2
3. Dropout層:隨機(jī)舍棄25%的節(jié)點(diǎn)
'''
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu'))
model.add(MaxPool2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

#添加一個(gè)全連接層,然后是輸出層
'''
Flatten層:將輸入“壓平”,例如從三維特征圖變成二維特征向量 
Dense層:全連接層,128個(gè)節(jié)點(diǎn),激活函數(shù)為ReLU
Dropout層:隨機(jī)舍棄50%的節(jié)點(diǎn)
Dense層:全連接輸出層,10個(gè)節(jié)點(diǎn),激活函數(shù)為softmax
'''
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

#編譯模型
'''
該行代碼為模型指定:
- loss:損失函數(shù),這里為 categorical_crossentropy,用于多分類任務(wù)
- optimizer:優(yōu)化器,這里為Adam算法,是一個(gè)較為常用的優(yōu)化器 
- metrics:評(píng)價(jià)指標(biāo),這里為accuracy,用于評(píng)價(jià)分類準(zhǔn)確度
所以,這個(gè)編譯步驟為模型指定:
1. 損失函數(shù):categorical_crossentropy,計(jì)算多分類任務(wù)中的交叉熵?fù)p失 
2. 優(yōu)化器:Adam,用于更新網(wǎng)絡(luò)權(quán)重,根據(jù)損失函數(shù)更新權(quán)重以最小化損失 
3. 評(píng)價(jià)指標(biāo):accuracy,用于評(píng)價(jià)模型在訓(xùn)練和測(cè)試期間的分類準(zhǔn)確度
這三個(gè)specification對(duì)模型訓(xùn)練至關(guān)重要:
- 損失函數(shù)決定了模型在訓(xùn)練時(shí)要最小化的代價(jià)函數(shù) 
- 優(yōu)化器決定了模型如何根據(jù)損失函數(shù)更新權(quán)重以最小化損失 
- 評(píng)價(jià)指標(biāo)用于評(píng)判模型的訓(xùn)練效果和泛化能力
'''
model.compile(loss='categorical_crossentropy',
             optimizer='adam',
             metrics=['accuracy'])

#訓(xùn)練數(shù)據(jù)上擬合模型
'''
該行代碼會(huì)使用X_train和Y_train的數(shù)據(jù)對(duì)模型進(jìn)行訓(xùn)練,具體參數(shù)為:
- X_train:訓(xùn)練數(shù)據(jù)的特征值
- Y_train:訓(xùn)練數(shù)據(jù)的標(biāo)簽值 
- batch_size:批大小,這里為32,表示每批32個(gè)樣本
- epochs:訓(xùn)練輪數(shù),這里為10輪
- verbose:日志顯示,這里為1,顯示一個(gè)進(jìn)度條
- 所以,這行代碼會(huì)以以下方式訓(xùn)練模型:
1. X_train和Y_train作為訓(xùn)練集數(shù)據(jù)         
2. 以批大小32的mini-batch進(jìn)行訓(xùn)練,每批選32個(gè)樣本進(jìn)行訓(xùn)練更新 
3. 訓(xùn)練10輪,用全部訓(xùn)練集訓(xùn)練10次 
4. 訓(xùn)練過程中顯示一個(gè)進(jìn)度條,日志級(jí)別為1 
'''
model.fit(X_train, Y_train, batch_size=32, epochs=10, verbose=1)

#在測(cè)試數(shù)據(jù)上評(píng)估模型
score = model.evaluate(X_test, Y_test, verbose=0)

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于python的Paxos算法實(shí)現(xiàn)

    基于python的Paxos算法實(shí)現(xiàn)

    這篇文章主要介紹了基于python的Paxos算法實(shí)現(xiàn),理解一個(gè)算法最快,最深刻的做法,我覺著可能是自己手動(dòng)實(shí)現(xiàn),雖然項(xiàng)目中不用自己實(shí)現(xiàn),有已經(jīng)封裝好的算法庫(kù),供我們調(diào)用,我覺著還是有必要自己親自實(shí)踐一下,需要的朋友可以參考下
    2019-07-07
  • GCN?圖神經(jīng)網(wǎng)絡(luò)使用詳解?可視化?Pytorch

    GCN?圖神經(jīng)網(wǎng)絡(luò)使用詳解?可視化?Pytorch

    這篇文章主要介紹了GCN?圖神經(jīng)網(wǎng)絡(luò)使用詳解?可視化?Pytorch,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python3日期與時(shí)間戳轉(zhuǎn)換的幾種方法詳解

    Python3日期與時(shí)間戳轉(zhuǎn)換的幾種方法詳解

    我們可以利用內(nèi)置模塊 datetime 獲取當(dāng)前時(shí)間,然后將其轉(zhuǎn)換為對(duì)應(yīng)的時(shí)間戳。這篇文章主要介紹了Python3日期與時(shí)間戳轉(zhuǎn)換的幾種方法,需要的朋友可以參考下
    2019-06-06
  • Python判斷一個(gè)list中是否包含另一個(gè)list全部元素的方法分析

    Python判斷一個(gè)list中是否包含另一個(gè)list全部元素的方法分析

    這篇文章主要介紹了Python判斷一個(gè)list中是否包含另一個(gè)list全部元素的方法,結(jié)合實(shí)例形式對(duì)比分析了Python針對(duì)列表list元素包含關(guān)系的相關(guān)轉(zhuǎn)換、判斷操作技巧,需要的朋友可以參考下
    2018-12-12
  • 一文淺析如何創(chuàng)建內(nèi)網(wǎng)PyPI鏡像站點(diǎn)

    一文淺析如何創(chuàng)建內(nèi)網(wǎng)PyPI鏡像站點(diǎn)

    這篇文章主要為大家詳細(xì)介紹了如何創(chuàng)建內(nèi)網(wǎng)PyPI鏡像站點(diǎn),這是一個(gè)常見的企業(yè)級(jí)需求,用于內(nèi)網(wǎng)環(huán)境中的Python包管理,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-09-09
  • 詳解Python3.6安裝psutil模塊和功能簡(jiǎn)介

    詳解Python3.6安裝psutil模塊和功能簡(jiǎn)介

    這篇文章主要介紹了詳解Python3.6安裝psutil模塊和功能簡(jiǎn)介,詳細(xì)的介紹了安裝psutil模塊和該模塊的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • Python實(shí)現(xiàn)極限車神游戲的示例代碼

    Python實(shí)現(xiàn)極限車神游戲的示例代碼

    今天小編要為大家介紹一款小編自己用Python代碼碼出來的賽車風(fēng)格的打字小游戲,不僅能游戲還能學(xué)到很多不同類型的編程代碼關(guān)鍵字的語(yǔ)言,需要的可以參考一下
    2023-02-02
  • python 網(wǎng)絡(luò)編程常用代碼段

    python 網(wǎng)絡(luò)編程常用代碼段

    這篇文章主要介紹了python 網(wǎng)絡(luò)編程常用代碼段,需要的朋友可以參考下
    2016-08-08
  • Python使用matplotlib繪制余弦的散點(diǎn)圖示例

    Python使用matplotlib繪制余弦的散點(diǎn)圖示例

    這篇文章主要介紹了Python使用matplotlib繪制余弦的散點(diǎn)圖,涉及Python操作matplotlib的基本技巧與散點(diǎn)的設(shè)置方法,需要的朋友可以參考下
    2018-03-03
  • Python接口自動(dòng)化淺析pymysql數(shù)據(jù)庫(kù)操作流程

    Python接口自動(dòng)化淺析pymysql數(shù)據(jù)庫(kù)操作流程

    本文主要介紹pymysql安裝、操作流程、語(yǔ)法基礎(chǔ)及封裝操作數(shù)據(jù)庫(kù)類,需要的朋友可以參考下,希望能對(duì)大家有所幫助,每日提升一點(diǎn)點(diǎn),歡迎大家多多交流討論
    2021-08-08

最新評(píng)論

志丹县| 甘南县| 开鲁县| 离岛区| 安庆市| 古浪县| 尚义县| 泰兴市| 聂拉木县| 徐汇区| 兰考县| 郁南县| 黎平县| 广平县| 鄂托克前旗| 嘉兴市| 武平县| 太和县| 望奎县| 穆棱市| 靖江市| 周至县| 会泽县| 蕲春县| 仁怀市| 安多县| 临沂市| 通化市| 博湖县| 宣汉县| 旌德县| 高清| 阿拉尔市| 黎平县| 额尔古纳市| 绥芬河市| 屯留县| 新龙县| 文成县| 梁河县| 霍山县|