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

深度學(xué)習(xí)筆記(七)——基于Iris/MNIST數(shù)據(jù)集構(gòu)建基礎(chǔ)的分類網(wǎng)絡(luò)算法實(shí)戰(zhàn)

這篇具有很好參考價(jià)值的文章主要介紹了深度學(xué)習(xí)筆記(七)——基于Iris/MNIST數(shù)據(jù)集構(gòu)建基礎(chǔ)的分類網(wǎng)絡(luò)算法實(shí)戰(zhàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

文中程序以Tensorflow-2.6.0為例
部分概念包含筆者個(gè)人理解,如有遺漏或錯(cuò)誤,歡迎評(píng)論或私信指正。
截圖和程序部分引用自北京大學(xué)機(jī)器學(xué)習(xí)公開課

認(rèn)識(shí)網(wǎng)絡(luò)的構(gòu)建結(jié)構(gòu)

在神經(jīng)網(wǎng)絡(luò)的構(gòu)建過程中,都避不開以下幾個(gè)步驟:

  1. 導(dǎo)入網(wǎng)絡(luò)和依賴模塊
  2. 原始數(shù)據(jù)處理和清洗
  3. 加載訓(xùn)練和測(cè)試數(shù)據(jù)
  4. 構(gòu)建網(wǎng)絡(luò)結(jié)構(gòu),確定網(wǎng)絡(luò)優(yōu)化方法
  5. 將數(shù)據(jù)送入網(wǎng)絡(luò)進(jìn)行訓(xùn)練,同時(shí)判斷預(yù)測(cè)效果
  6. 保存模型
  7. 部署算法,使用新的數(shù)據(jù)進(jìn)行預(yù)測(cè)推理

使用Keras快速構(gòu)建網(wǎng)絡(luò)的必要API

在tensorflow2版本中將很多基礎(chǔ)函數(shù)進(jìn)行了二次封裝,進(jìn)一步急速了算法初期的構(gòu)建實(shí)現(xiàn)。通過keras提供的很多高級(jí)API可以在較短的代碼體量上實(shí)現(xiàn)網(wǎng)絡(luò)功能。同時(shí)通過搭配tf中的基礎(chǔ)功能函數(shù)可以實(shí)現(xiàn)各種不同類型的卷積和組合操作。正是這中高級(jí)API和底層元素及的操作大幅度的提升了tensorflow的自由程度和易用性。

常用網(wǎng)絡(luò)

全連接層
tf.keras.layers.Dense(units=3, activation=tf.keras.activations.softmax, kernel_regularizer=tf.keras.regularizers.L2())

units:維數(shù)(神經(jīng)元個(gè)數(shù))
activation:激活函數(shù),可選:relu softmax sigmoid tanh,這里記不住的話可以用tf.keras.activations.逐個(gè)查看
kernel_regularizer:正則化函數(shù),同樣的可以使用tf.keras.regularizers.逐個(gè)查看
全連接層是標(biāo)準(zhǔn)的神經(jīng)元組成,更多被用在網(wǎng)絡(luò)的后端或解碼端(Decoder)用來輸出預(yù)測(cè)數(shù)據(jù)。

拉伸層(維度展平)
tf.keras.layers.Flatten()

這個(gè)函數(shù)默認(rèn)不需要輸入?yún)?shù),直接使用,它會(huì)將多維的數(shù)據(jù)按照每一行依次排開首尾連接變成一個(gè)一維的張量。通常在數(shù)據(jù)輸入到全連接層之前使用。

卷積層
tf.keras.layers.Conv2D(filters=3, kernel_size=3, strides=1, padding='valid')

filters:卷積核個(gè)數(shù)
kernel_size:卷積核尺寸
strides:卷積核步長(zhǎng),卷積核是在原始數(shù)據(jù)上滑動(dòng)遍歷完成數(shù)據(jù)計(jì)算。
padding:可填 ‘valid’ ‘same’,是否使用全零填充,影響最后卷積結(jié)果的大小。
卷積一般被用來提取數(shù)據(jù)的數(shù)據(jù)特征。卷積最關(guān)鍵的就是卷積核個(gè)數(shù)和卷積核尺寸。假設(shè)輸入一個(gè)1nn大小的張量,經(jīng)過x個(gè)卷積核+步長(zhǎng)為2+尺寸可以整除n的卷積層之后會(huì)輸出一個(gè)x*(n/2)*(n/2)大小的張量。可以理解為卷積步長(zhǎng)和卷積核大小影響輸出張量的長(zhǎng)寬,卷積核的大小影響輸出張量的深度。

構(gòu)建網(wǎng)絡(luò)

使用Sequential構(gòu)建簡(jiǎn)單網(wǎng)絡(luò),或者構(gòu)建網(wǎng)絡(luò)模塊。列表中順序包含網(wǎng)絡(luò)的各個(gè)層。

tf.keras.models.Sequential([ ])

使用獨(dú)立的class構(gòu)建,這里定義一個(gè)類繼承自 tensorflow.keras.Model 后面基本是標(biāo)準(zhǔn)結(jié)構(gòu)>初始化相關(guān)參數(shù)>定義網(wǎng)絡(luò)層>重寫call函數(shù)定義前向傳播層的連接順序。后續(xù)隨著使用的深入可以進(jìn)一步的添加更多函數(shù)來實(shí)現(xiàn)不同類型的網(wǎng)絡(luò)。

class mynnModel(Model):    # 繼承from tensorflow.keras import Model 作為父類
    def __init__(self):
        super(IrisModel, self).__init__()   # 初始化父類的參數(shù)
        self.d1 = layers.Dense(units=3, activation=tf.keras.activations.softmax, kernel_regularizer=tf.keras.regularizers.L2())
    def call(self, input):  # 重寫前向傳播函數(shù)
        y = self.d1(input)
        return y
    model = IrisModel()

訓(xùn)練及其參數(shù)設(shè)置

設(shè)置訓(xùn)練參數(shù)
tensorflow.keras.Model.compile(optimizer=參數(shù)更新優(yōu)化器,
              loss=損失函數(shù)
              metrics=準(zhǔn)確率計(jì)算方式,即輸出數(shù)據(jù)類型和標(biāo)簽數(shù)據(jù)類型如何對(duì)應(yīng))

具體參數(shù)可以看下面的內(nèi)容:

optimizer:參數(shù)優(yōu)化器 
    SGD:        tf.keras.optimizers.SGD(learning_rate=0.1,momentum=動(dòng)量參數(shù)) learning_rate學(xué)習(xí)率,momentum動(dòng)量參數(shù)
    AdaGrad:    tf.keras.optimizers.Adagrad(learning_rate=學(xué)習(xí)率)
    Adam:       tf.keras.optimizers.Adam(learning_rate=學(xué)習(xí)率 , beta_1=0.9, beta_2=0.999)
loss:損失函數(shù)
    MSE:        tf.keras.losses.MeanSquaredError()
    交叉熵?fù)p失: tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False) from_logits=true時(shí)輸出值經(jīng)過一次softmax概率歸一化
metrics:準(zhǔn)確率計(jì)算方式,就是輸出數(shù)據(jù)類型和標(biāo)簽數(shù)據(jù)類型如何對(duì)應(yīng)
    數(shù)值型(兩個(gè)都是序列值):    'accuracy'
    都是獨(dú)熱碼:    'categorical_accuracy'
    標(biāo)簽是數(shù)值,輸出是獨(dú)熱碼: 'sparse_categorical_accuracy'
訓(xùn)練
tensorflow.keras.Model.model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)

網(wǎng)絡(luò)傳入?yún)?shù)含義如下:

輸入的數(shù)據(jù)依次為:輸入訓(xùn)練特征數(shù)據(jù),標(biāo)簽數(shù)據(jù),單次輸入數(shù)據(jù)量,迭代次數(shù)
validation_split=從訓(xùn)練集劃分多少比例數(shù)據(jù)用來測(cè)試 /  validation_data=(測(cè)試特征數(shù)據(jù),測(cè)試標(biāo)簽數(shù)據(jù)) 這兩個(gè)參數(shù)智能二選一
validation_freq=多少次epoch測(cè)試一次
輸出網(wǎng)絡(luò)信息
tensorflow.keras.Model.model.summary()

上面這個(gè)函數(shù)可以在訓(xùn)練結(jié)束或者訓(xùn)練開始之前輸出一次網(wǎng)絡(luò)的結(jié)構(gòu)信息用于確認(rèn)。

實(shí)際應(yīng)用展示

環(huán)境

軟件環(huán)境的配置可以查看環(huán)境配置流程說明

cuda = 11.8	# CUDA也可以使用11.2版本
python=3.7
numpy==1.19.5
matplotlib== 3.5.3
notebook==6.4.12
scikit-learn==1.2.0
tensorflow==2.6.0
keras==2.6.0
使用iris數(shù)據(jù)集構(gòu)建基礎(chǔ)的分類網(wǎng)絡(luò)
import tensorflow as tf
from sklearn import datasets
import numpy as np

x_train = datasets.load_iris().data
y_train = datasets.load_iris().target

np.random.seed(116)
np.random.shuffle(x_train)
np.random.seed(116)
np.random.shuffle(y_train)
tf.random.set_seed(116)

model = tf.keras.models.Sequential([ tf.keras.layers.Dense(3, activation='softmax',
                                                           kernel_regularizer=tf.keras.regularizers.l2())])
model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.1),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=['sparse_categorical_accuracy'])
model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)
model.summary( )

通過上面這樣幾行簡(jiǎn)單的代碼,我們實(shí)現(xiàn)了對(duì)iris數(shù)據(jù)的分類訓(xùn)練。在上面的代碼中使用了Sequential函數(shù)來構(gòu)建網(wǎng)絡(luò)。

使用MNIST數(shù)據(jù)集設(shè)計(jì)分類網(wǎng)絡(luò)

在開始下面的代碼之前,要先下載對(duì)應(yīng)的數(shù)據(jù) https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz 復(fù)制這段網(wǎng)址在瀏覽器打開會(huì)直接下載數(shù)據(jù),然后將下載好的mnist.npz復(fù)制到一個(gè)新的路徑下,然后在tf.keras.datasets.mnist.load_data(path=‘you file path ’)代碼中的這行里修改為你的路徑,注意要使用絕對(duì)路徑

import tensorflow as tf
from tensorflow.keras import Model
from tensorflow.keras import layers
from sklearn import datasets
import numpy as np
import matplotlib.pyplot as plt

(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data(path='E:\Tensorflow\data\mnist.npz') # 注意替換自己的使用絕對(duì)路徑
x_train, x_test = x_train/255.0, x_test/255.0	# 圖像數(shù)據(jù)歸一化
print('訓(xùn)練集樣本的大小:', x_train.shape)
print('訓(xùn)練集標(biāo)簽的大小:', y_train.shape)
print('測(cè)試集樣本的大小:', x_test.shape)
print('測(cè)試集標(biāo)簽的大小:', y_test.shape)
#可視化樣本,下面是輸出了訓(xùn)練集中前20個(gè)樣本
fig, ax = plt.subplots(nrows=4,ncols=5,sharex='all',sharey='all')
ax = ax.flatten()
for i in range(20):
    img = x_train[i].reshape(28, 28)
    ax[i].imshow(img,cmap='Greys')
ax[0].set_xticks([])
ax[0].set_yticks([])
plt.tight_layout()
plt.show()
# 定義網(wǎng)絡(luò)結(jié)構(gòu)
class mnisModel(Model):
    def __init__(self, *args, **kwargs):
        super(mnisModel, self).__init__(*args, **kwargs)
        self.flatten1=layers.Flatten()
        self.d1=layers.Dense(128, activation=tf.keras.activations.relu)
        self.d2=layers.Dense(10, activation=tf.keras.activations.softmax)
    def call(self, input):
        x = self.flatten1(input)
        x = self.d1(x)
        x = self.d2(x)
        return(x)
model = mnisModel()
#設(shè)置訓(xùn)練參數(shù)
model.compile(optimizer='adam',     # 'adam'  tf.keras.optimizers.Adam(learning_rate=0.4 , beta_1=0.9, beta_2=0.999)
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=['sparse_categorical_accuracy'])
# 訓(xùn)練
model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data = (x_test, y_test), validation_freq=1)
model.summary()

運(yùn)行后會(huì)先顯示數(shù)據(jù)集中的前二十個(gè)數(shù)字
深度學(xué)習(xí)筆記(七)——基于Iris/MNIST數(shù)據(jù)集構(gòu)建基礎(chǔ)的分類網(wǎng)絡(luò)算法實(shí)戰(zhàn),深度學(xué)習(xí),算法,深度學(xué)習(xí),筆記
關(guān)閉數(shù)字展示窗口后開始訓(xùn)練,并看到訓(xùn)練的過程
深度學(xué)習(xí)筆記(七)——基于Iris/MNIST數(shù)據(jù)集構(gòu)建基礎(chǔ)的分類網(wǎng)絡(luò)算法實(shí)戰(zhàn),深度學(xué)習(xí),算法,深度學(xué)習(xí),筆記文章來源地址http://www.zghlxwxcb.cn/news/detail-799606.html

到了這里,關(guān)于深度學(xué)習(xí)筆記(七)——基于Iris/MNIST數(shù)據(jù)集構(gòu)建基礎(chǔ)的分類網(wǎng)絡(luò)算法實(shí)戰(zhàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包