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

從零使用TensorFlow搭建CNN(卷積)神經(jīng)網(wǎng)絡(luò)

這篇具有很好參考價(jià)值的文章主要介紹了從零使用TensorFlow搭建CNN(卷積)神經(jīng)網(wǎng)絡(luò)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

?? 寫(xiě)在前面
????? 博主介紹:大家好,這里是hyk寫(xiě)算法了嗎,一枚致力于學(xué)習(xí)算法和人工智能領(lǐng)域的小菜鳥(niǎo)。
??個(gè)人主頁(yè):主頁(yè)鏈接(歡迎各位大佬光臨指導(dǎo))
??近期專(zhuān)欄:機(jī)器學(xué)習(xí)與深度學(xué)習(xí)
???????????????????????LeetCode算法實(shí)例

總覽

本節(jié)內(nèi)容主要向大家介紹如何使用TensorFlow快速搭建自己的卷積神經(jīng)網(wǎng)絡(luò),并通過(guò)cifar數(shù)據(jù)集訓(xùn)練驗(yàn)證。文章最后會(huì)有相關(guān)內(nèi)容知識(shí)點(diǎn)的補(bǔ)給。

數(shù)據(jù)集簡(jiǎn)介

Cifar-10 是由 Hinton 的學(xué)生 Alex Krizhevsky、Ilya Sutskever 收集的一個(gè)用于普適物體識(shí)別的計(jì)算機(jī)視覺(jué)數(shù)據(jù)集,它包含 60000 張 32 X 32 的 RGB 彩色圖片,總共 10 個(gè)分類(lèi)。其中,包括 50000 張用于訓(xùn)練集,10000 張用于測(cè)試集。

從零使用TensorFlow搭建CNN(卷積)神經(jīng)網(wǎng)絡(luò)

第三方庫(kù)準(zhǔn)備

import tensorflow as tf

import numpy as np
from matplotlib import pyplot as plt

該項(xiàng)目使用上述第三方庫(kù),大家提前下載需要提前下載好。

加載數(shù)據(jù)

cifar10 = tf.keras.datasets.cifar10
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

首次使用需要聯(lián)網(wǎng)下載一段時(shí)間數(shù)據(jù)集,大家耐心等待下。

搭建cnn模型類(lèi)以及相關(guān)方法

# 繼承自tf.keras.Model
class Baseline(tf.keras.Model):
    def __init__(self):
        super(Baseline, self).__init__()
        # 第一層卷積
        self.c1 = tf.keras.layers.Conv2D(filters=6, kernel_size=(5, 5), padding='same')
        # 第一層BN
        self.b1 = tf.keras.layers.BatchNormalization()
        # 激活函數(shù)層
        self.a1 = tf.keras.layers.Activation('relu')
        # 池化層
        self.p1 = tf.keras.layers.MaxPool2D(pool_size=(2, 2), strides=2, padding='same')
        # Dropout層
        self.d1 = tf.keras.layers.Dropout(0.2)
        # 將卷積獲得的網(wǎng)絡(luò)拉平以便后序全連接層使用
        self.flatten = tf.keras.layers.Flatten()
        # 一層全連接
        self.f1 = tf.keras.layers.Dense(128, activation='relu')
        # 又一層dropout
        self.d2 = tf.keras.layers.Dropout(0.2)
        # 第二層全連接
        self.f2 = tf.keras.layers.Dense(10, activation='softmax')
		# 讀入inputs數(shù)據(jù),并進(jìn)行操作返回
    def call(self, inputs):
        x = self.c1(inputs)
        x = self.b1(x)
        x = self.a1(x)
        x = self.p1(x)
        x = self.d1(x)
        x = self.flatten(x)
        x = self.f1(x)
        x = self.d2(x)
        y = self.f2(x)
        return y

訓(xùn)練模型

# 創(chuàng)建模型對(duì)象
model = Baseline()
# 指明優(yōu)化器、損失函數(shù)、準(zhǔn)確率計(jì)算函數(shù)
model.compile(optimizer=tf.keras.optimizers.Adam(),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=[tf.keras.metrics.sparse_categorical_accuracy])
# 開(kāi)始訓(xùn)練
history = model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)
# 展示訓(xùn)練的過(guò)程
model.summary()

畫(huà)圖展示結(jié)果

# show
acc = history.history['sparse_categorical_accuracy']
val_acc = history.history['val_sparse_categorical_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']
print(acc)
print(val_loss)

plt.figure(figsize=(8, 8))
plt.subplot(1, 2, 1)
plt.plot(acc, label='Training Accuracy')
plt.plot(val_acc, label='Validation Accuracy')
plt.title('Training and Validation Accuracy')
plt.legend()

plt.subplot(1, 2, 2)
plt.plot(loss, label='Training loss')
plt.plot(val_loss, label='Validation loss')
plt.title('Training and Validation loss')
plt.legend()
plt.show()

分別展示了訓(xùn)練集和測(cè)試集上精確度、損失值的對(duì)比

項(xiàng)目整體代碼

import tensorflow as tf

import numpy as np
from matplotlib import pyplot as plt

np.set_printoptions(threshold=np.inf)

cifar10 = tf.keras.datasets.cifar10
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0


class Baseline(tf.keras.Model):
    def __init__(self):
        super(Baseline, self).__init__()
        self.c1 = tf.keras.layers.Conv2D(filters=6, kernel_size=(5, 5), padding='same')
        self.b1 = tf.keras.layers.BatchNormalization()
        self.a1 = tf.keras.layers.Activation('relu')
        self.p1 = tf.keras.layers.MaxPool2D(pool_size=(2, 2), strides=2, padding='same')
        self.d1 = tf.keras.layers.Dropout(0.2)
        self.flatten = tf.keras.layers.Flatten()
        self.f1 = tf.keras.layers.Dense(128, activation='relu')
        self.d2 = tf.keras.layers.Dropout(0.2)
        self.f2 = tf.keras.layers.Dense(10, activation='softmax')

    def call(self, inputs):
        x = self.c1(inputs)
        x = self.b1(x)
        x = self.a1(x)
        x = self.p1(x)
        x = self.d1(x)
        x = self.flatten(x)
        x = self.f1(x)
        x = self.d2(x)
        y = self.f2(x)
        return y


model = Baseline()
model.compile(optimizer=tf.keras.optimizers.Adam(),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=[tf.keras.metrics.sparse_categorical_accuracy])
history = model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)
model.summary()

# show
acc = history.history['sparse_categorical_accuracy']
val_acc = history.history['val_sparse_categorical_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']
print(acc)
print(val_loss)

plt.figure(figsize=(8, 8))
plt.subplot(1, 2, 1)
plt.plot(acc, label='Training Accuracy')
plt.plot(val_acc, label='Validation Accuracy')
plt.title('Training and Validation Accuracy')
plt.legend()

plt.subplot(1, 2, 2)
plt.plot(loss, label='Training loss')
plt.plot(val_loss, label='Validation loss')
plt.title('Training and Validation loss')
plt.legend()
plt.show()

運(yùn)行結(jié)果

從零使用TensorFlow搭建CNN(卷積)神經(jīng)網(wǎng)絡(luò)

從零使用TensorFlow搭建CNN(卷積)神經(jīng)網(wǎng)絡(luò)
從零使用TensorFlow搭建CNN(卷積)神經(jīng)網(wǎng)絡(luò)

部分知識(shí)點(diǎn)整理

模型建立

  • tf.keras.models.Sequential([網(wǎng)絡(luò)結(jié)構(gòu)]) # 描述各層網(wǎng)洛Sequentail()可以認(rèn)為是個(gè)容器,這個(gè)容器里封裝了一個(gè)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。在Sequential中要描述從輸入層到輸出層每一層的網(wǎng)絡(luò)結(jié)構(gòu)。
    每一層的網(wǎng)絡(luò)結(jié)構(gòu)可以是
  • 拉直層: tf.keras.layers.Flatten() ,這一層不含計(jì)算,只是形狀轉(zhuǎn)換,把輸入特征拉直,變成一維數(shù)組
  • 全連接層:
    tf.keras.layers.Dense(神經(jīng)元個(gè)數(shù),activation=“激活函數(shù)”,kernel_regularizer=哪種正則化),這一層告知神經(jīng)元個(gè)數(shù)、使用什么激活函數(shù)、采用什么正則化方法 激活函數(shù)可以選擇relu, softmax, sigmoid, tanh等
  • 正則化可以選擇 tf.keras.regularizers.l1(), tf.keras.relularizers.l2()
  • 卷積神經(jīng)網(wǎng)絡(luò)層:tf.keras.layers.Conv2D(filters=卷積核個(gè)數(shù),kernel_size=卷積核尺寸,strides=卷積步長(zhǎng), padding=“valid” or “same”)
  • 循環(huán)神經(jīng)網(wǎng)絡(luò)層:tf.keras.layers.LSTM()

model.compile

model.compile(optimizer=優(yōu)化器,loss=損失函數(shù),metrics=["準(zhǔn)確率"])在這里告知訓(xùn)練時(shí)選擇的優(yōu)化器、損失函數(shù)、和評(píng)測(cè)指標(biāo)。 這些參數(shù)都可以使用字符串形式或函數(shù)形式

  • optimizer: 引導(dǎo)神經(jīng)網(wǎng)絡(luò)更新參數(shù)

    • sgd or tf.keras.optimizer.SGD(lr=學(xué)習(xí)率,momentum=動(dòng)量參數(shù))
    • adagrad or tf.keras.optimizer.Adagrad(lr=學(xué)習(xí)率)
    • adadelta or tf.keras.optimizer.Adadelta(lr=學(xué)習(xí)率)
    • adam or tf.keras.optimizer.Adam(lr=學(xué)習(xí)率, beta_1=0.9, beta_2=0.999)
  • loss: 損失函數(shù)

    • mes or tf.keras.losses.MeanSquaredError()

    • sparse_categorical_crossentropy or
      tf.keras.SparseCategoricalCrossentropy(from_logits=False)(是原始輸出還是經(jīng)過(guò)概率分布)

  • metrics:評(píng)測(cè)指標(biāo)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-421149.html

    • accuracy:y_ 和 y 都是數(shù)值,如y_=[1] y=[1]
    • categorical_accuracy: y_和y都是獨(dú)熱碼(概率分布),如y_=[0, 1, 0], y=[0.256, 0.695,
      0.048]
    • sparse_categorical_accuracy: y_是數(shù)值,y是獨(dú)熱碼(概率分布),如y_=[1], y=[0.256,
      0.695, 0.048]

訓(xùn)練模型

 model.fit(訓(xùn)練集的輸入特征,訓(xùn)練集的標(biāo)簽,batch_size= 每次喂入神經(jīng)網(wǎng)絡(luò)的樣本數(shù), epochs=迭代多少次數(shù)據(jù)集, validation_data=(測(cè)試集的輸入特征,測(cè)試集的標(biāo)簽,), validation_split=從訓(xùn)練集劃分多少比例給測(cè)試集,validation_freq=多少次epoch測(cè)試一次)

打印網(wǎng)絡(luò)結(jié)構(gòu)和參數(shù)統(tǒng)計(jì)

 model.summary()

到了這里,關(guān)于從零使用TensorFlow搭建CNN(卷積)神經(jīng)網(wǎng)絡(luò)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(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)文章

  • CNN卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別(基于tensorflow)

    CNN卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別(基于tensorflow)

    卷積網(wǎng)絡(luò)的 核心思想 是將: 局部感受野 權(quán)值共享(或者權(quán)值復(fù)制) 時(shí)間或空間亞采樣 卷積神經(jīng)網(wǎng)絡(luò) (Convolutional Neural Networks,簡(jiǎn)稱(chēng): CNN )是深度學(xué)習(xí)當(dāng)中一個(gè)非常重要的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。它主要用于用在 圖像圖片處理 , 視頻處理 , 音頻處理 以及 自然語(yǔ)言處理 等等。

    2024年02月11日
    瀏覽(23)
  • 大數(shù)據(jù)深度學(xué)習(xí):基于Tensorflow深度學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)CNN算法垃圾分類(lèi)識(shí)別系統(tǒng)

    大數(shù)據(jù)深度學(xué)習(xí):基于Tensorflow深度學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)CNN算法垃圾分類(lèi)識(shí)別系統(tǒng)

    隨著社會(huì)的發(fā)展和城市化進(jìn)程的加速,垃圾分類(lèi)已經(jīng)成為了環(huán)境保護(hù)和可持續(xù)發(fā)展的重要課題。然而,傳統(tǒng)的垃圾分類(lèi)方法通常依賴(lài)于人工識(shí)別,效率低下且易出錯(cuò)。因此,本項(xiàng)目旨在利用大數(shù)據(jù)和深度學(xué)習(xí)技術(shù),構(gòu)建一個(gè)基于 TensorFlow 深度學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò) CNN(Convolutional

    2024年04月14日
    瀏覽(504)
  • Pytorch 與 Tensorflow對(duì)比學(xué)習(xí) 第3周:進(jìn)階主題 Day 15-16: 卷積神經(jīng)網(wǎng)絡(luò)(CNN)

    第3周:進(jìn)階主題 Day 15-16: 卷積神經(jīng)網(wǎng)絡(luò)(CNN) 在這兩天中,我專(zhuān)注于學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)(CNN)的基礎(chǔ)知識(shí),包括卷積層和池化層的工作原理以及它們?cè)趫D像處理中的應(yīng)用。 卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ): 卷積層:學(xué)習(xí)了卷積層如何通過(guò)濾波器(或稱(chēng)為核)提取圖像的特征。每個(gè)濾波器

    2024年01月20日
    瀏覽(47)
  • Matlab深度學(xué)習(xí)入門(mén)實(shí)例:從0搭建卷積神經(jīng)網(wǎng)絡(luò)CNN(附完整代碼)

    Matlab深度學(xué)習(xí)入門(mén)實(shí)例:從0搭建卷積神經(jīng)網(wǎng)絡(luò)CNN(附完整代碼)

    網(wǎng)上已具有大量卷積神經(jīng)網(wǎng)絡(luò)的講解,故本文不在對(duì)此贅述,這篇文章針對(duì)已了解CNN基礎(chǔ)結(jié)構(gòu)和原理者,以一個(gè)例子搭建一個(gè)簡(jiǎn)單的卷積神經(jīng)網(wǎng)絡(luò),作為正式邁入深度學(xué)習(xí)的第一步。 我們以深度學(xué)習(xí)最經(jīng)典的案例——手寫(xiě)數(shù)字的識(shí)別,和一種經(jīng)典的CNN——LeNet進(jìn)行本次學(xué)習(xí)。

    2024年02月01日
    瀏覽(32)
  • 卷積神經(jīng)網(wǎng)絡(luò)(CNN)入門(mén):使用Python實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別

    在上一篇文章中,我們介紹了如何使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的前饋神經(jīng)網(wǎng)絡(luò)。本文將重點(diǎn)介紹卷積神經(jīng)網(wǎng)絡(luò)(CNN),這是一種在計(jì)算機(jī)視覺(jué)任務(wù)中表現(xiàn)優(yōu)異的深度學(xué)習(xí)模型。我們將從卷積神經(jīng)網(wǎng)絡(luò)的基本原理開(kāi)始,介紹卷積層、池化層和全連接層等概念,然后使用Python和Keras庫(kù)

    2023年04月15日
    瀏覽(20)
  • 深度學(xué)習(xí):使用卷積神經(jīng)網(wǎng)絡(luò)CNN實(shí)現(xiàn)MNIST手寫(xiě)數(shù)字識(shí)別

    深度學(xué)習(xí):使用卷積神經(jīng)網(wǎng)絡(luò)CNN實(shí)現(xiàn)MNIST手寫(xiě)數(shù)字識(shí)別

    本項(xiàng)目基于pytorch構(gòu)建了一個(gè)深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò),網(wǎng)絡(luò)包含卷積層、池化層、全連接層,通過(guò)此網(wǎng)絡(luò)實(shí)現(xiàn)對(duì)MINST數(shù)據(jù)集手寫(xiě)數(shù)字的識(shí)別,通過(guò)本項(xiàng)目代碼,從原理上理解手寫(xiě)數(shù)字識(shí)別的全過(guò)程,包括反向傳播,梯度下降等。 卷積神經(jīng)網(wǎng)絡(luò)是一種多層、前饋型神經(jīng)網(wǎng)絡(luò)。從功能上

    2024年02月13日
    瀏覽(19)
  • 使用 PyTorch 和 OpenCV 實(shí)現(xiàn)簡(jiǎn)單卷積神經(jīng)網(wǎng)絡(luò)(CNN)的過(guò)程

    使用 PyTorch 和 OpenCV 實(shí)現(xiàn)簡(jiǎn)單卷積神經(jīng)網(wǎng)絡(luò)(CNN)的過(guò)程,如何構(gòu)建一個(gè)簡(jiǎn)單的卷積神經(jīng)網(wǎng)絡(luò)模型,并通過(guò)使用預(yù)定義的濾波器對(duì)灰度圖像進(jìn)行卷積操作和激活函數(shù)處理,最終可視化了卷積層和激活層的輸出結(jié)果。 1.圖像處理: 使用 OpenCV 讀取圖像,并將彩色圖像轉(zhuǎn)換為灰度

    2024年01月17日
    瀏覽(23)
  • 【使用 k 折疊交叉驗(yàn)證的卷積神經(jīng)網(wǎng)絡(luò)(CNN)】基于卷積神經(jīng)網(wǎng)絡(luò)的無(wú)特征EMG模式識(shí)別研究(Matlab代碼實(shí)現(xiàn))

    【使用 k 折疊交叉驗(yàn)證的卷積神經(jīng)網(wǎng)絡(luò)(CNN)】基于卷積神經(jīng)網(wǎng)絡(luò)的無(wú)特征EMG模式識(shí)別研究(Matlab代碼實(shí)現(xiàn))

    ???????? 歡迎來(lái)到本博客 ???????? ??博主優(yōu)勢(shì): ?????? 博客內(nèi)容盡量做到思維縝密,邏輯清晰,為了方便讀者。 ?? 座右銘: 行百里者,半于九十。 ?????? 本文目錄如下: ?????? 目錄 ??1 概述 ??2 運(yùn)行結(jié)果 ??3?參考文獻(xiàn) ??4 Matlab代碼實(shí)現(xiàn) 文獻(xiàn)來(lái)源

    2024年02月11日
    瀏覽(27)
  • CNN卷積神經(jīng)網(wǎng)絡(luò)

    CNN卷積神經(jīng)網(wǎng)絡(luò)

    一、 什么是CNN卷積神經(jīng)網(wǎng)絡(luò) 卷積神經(jīng)網(wǎng)絡(luò)由三部分組成:輸入層、由n個(gè)卷積層和池化層的組合組成、全連結(jié)的多層感知機(jī)分類(lèi)器。 深度學(xué)習(xí)的迅速發(fā)展,我們會(huì)在不同的應(yīng)用場(chǎng)景會(huì)使用不同的神經(jīng)網(wǎng)絡(luò),沒(méi)有一個(gè)神經(jīng)網(wǎng)絡(luò)他能在任何場(chǎng)景下,效果都好,也沒(méi)有說(shuō)某一個(gè)算法

    2024年02月06日
    瀏覽(33)
  • 關(guān)于CNN卷積神經(jīng)網(wǎng)絡(luò)

    關(guān)于CNN卷積神經(jīng)網(wǎng)絡(luò)

    CNN代表卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network) 它是一種深度學(xué)習(xí)算法,特別適用于處理圖像和視頻數(shù)據(jù)。CNN由多個(gè) 卷積層、池化層和全連接層 組成,通過(guò)學(xué)習(xí)圖像或視頻數(shù)據(jù)的特征來(lái)進(jìn)行 分類(lèi)、識(shí)別或檢測(cè)任務(wù) 。與傳統(tǒng)的全連接神經(jīng)網(wǎng)絡(luò)相比,CNN的 參數(shù)數(shù)量較少 ,能夠

    2023年04月09日
    瀏覽(17)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包