0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

卷積神經(jīng)網(wǎng)絡(luò)python代碼

工程師鄧生 ? 來(lái)源:未知 ? 作者:劉芹 ? 2023-08-21 16:41 ? 次閱讀

卷積神經(jīng)網(wǎng)絡(luò)python代碼 ;

卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡(jiǎn)稱CNN)是一種可以在圖像處理和語(yǔ)音識(shí)別等領(lǐng)域中很好地應(yīng)用的神經(jīng)網(wǎng)絡(luò)。它的原理是通過(guò)不斷的卷積操作,將不同層次的特征進(jìn)行提取,從而通過(guò)反向傳播算法不斷優(yōu)化網(wǎng)絡(luò)權(quán)重,最終實(shí)現(xiàn)分類和預(yù)測(cè)等任務(wù)。

在本文中,我們將介紹如何使用Python實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò),并詳細(xì)說(shuō)明每一個(gè)步驟及其原理。

第一步:導(dǎo)入必要的庫(kù)

在開始編寫代碼前,我們需要先導(dǎo)入一些必要的Python庫(kù)。具體如下所示:

```python
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from keras.models import Sequential
from keras.layers import Dense, Flatten, Conv2D, MaxPooling2D
from keras.preprocessing.image import ImageDataGenerator
```

其中,numpy庫(kù)主要用于在Python中實(shí)現(xiàn)矩陣運(yùn)算;matplotlib庫(kù)則用于數(shù)據(jù)可視化,常被用于圖像的顯示;tensorflow庫(kù)和keras庫(kù)則是深度學(xué)習(xí)領(lǐng)域中非常常用的庫(kù),尤其是keras庫(kù),是一種高度封裝的深度學(xué)習(xí)框架,使得我們可以很方便地構(gòu)建深度神經(jīng)網(wǎng)絡(luò)。

第二步:加載數(shù)據(jù)

在本文中,我們將使用keras中自帶的cifar10數(shù)據(jù)集作為我們的實(shí)驗(yàn)數(shù)據(jù)。這個(gè)數(shù)據(jù)集中包含了60000張32*32像素的彩色圖片,涵蓋了10個(gè)不同的分類,如汽車、飛機(jī)等。我們可以通過(guò)下面的代碼來(lái)加載數(shù)據(jù):

```python
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.cifar10.load_data()
```

其中,x_train和y_train分別表示訓(xùn)練集的圖像和標(biāo)簽,x_test和y_test則表示測(cè)試集的圖像和標(biāo)簽。

第三步:預(yù)處理數(shù)據(jù)

當(dāng)我們成功地加載了數(shù)據(jù)后,下一步就是對(duì)數(shù)據(jù)進(jìn)行預(yù)處理。由于keras中的模型需要接受統(tǒng)一維度和歸一化的輸入數(shù)據(jù),因此我們需要對(duì)數(shù)據(jù)進(jìn)行特殊處理。具體如下所示:

```python
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
```

其中,我們首先將數(shù)據(jù)類型轉(zhuǎn)換為float32類型,然后將像素值進(jìn)行了歸一化處理,這樣可以使得數(shù)據(jù)的取值范圍在0到1之間,避免了過(guò)大或過(guò)小的像素值對(duì)模型造成不好的影響。

第四步:構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)模型

接下來(lái),我們將使用keras來(lái)構(gòu)建一個(gè)卷積神經(jīng)網(wǎng)絡(luò)模型。具體如下所示:

```python
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', padding='same', input_shape=x_train.shape[1:]))
model.add(Conv2D(32, (3, 3), activation='relu', padding='same'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dense(10, activation='softmax'))
```

在這里,我們定義了一個(gè)Sequential()模型,它將我們的卷積神經(jīng)網(wǎng)絡(luò)堆疊起來(lái)。模型中包含了卷積層和池化層,它們分別用來(lái)提取圖像特征和縮小圖像大小。其中,Conv2D層就是卷積層,它利用卷積核在特定區(qū)域內(nèi)進(jìn)行卷積操作,從而提取不同級(jí)別的特征;MaxPooling2D層則是池化層,它使用最大池化方式來(lái)降低每個(gè)特征圖的大小,以減少計(jì)算量。在卷積層和池化層之后,我們還添加了兩個(gè)密集層,它們用于分類和輸出。

第五步:編譯模型

在構(gòu)建好卷積神經(jīng)網(wǎng)絡(luò)模型后,我們還需要對(duì)其進(jìn)行編譯。具體如下所示:

```python
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
```

在這里,我們使用默認(rèn)的adam優(yōu)化器進(jìn)行模型優(yōu)化,損失函數(shù)則選用了分類問(wèn)題中常用的交叉熵?fù)p失函數(shù)。同時(shí),我們還定義了關(guān)鍵指標(biāo)accuracy,這可以幫助我們對(duì)模型性能進(jìn)行評(píng)估。

第六步:訓(xùn)練模型

完成模型的編譯之后,我們就可以開始訓(xùn)練模型了。為了避免過(guò)擬合,我們需要通過(guò)在訓(xùn)練數(shù)據(jù)上進(jìn)行數(shù)據(jù)增強(qiáng)來(lái)增加數(shù)據(jù)量,這樣可以提高模型的泛化性能。同時(shí),我們還需要設(shè)置一些超參數(shù)來(lái)控制訓(xùn)練過(guò)程。具體如下所示:

```python
datagen = ImageDataGenerator(
rotation_range=0,
horizontal_flip=True,
vertical_flip=False,
width_shift_range=0.1,
height_shift_range=0.1,
zoom_range=0.1
)

history = model.fit(
datagen.flow(x_train, y_train, batch_size=32),
steps_per_epoch=len(x_train) / 32,
epochs=50,
validation_data=(x_test, y_test),
verbose=1
)
```

在這里,我們通過(guò)調(diào)用ImageDataGenerator類來(lái)實(shí)現(xiàn)數(shù)據(jù)增強(qiáng)。其中,rotation_range定義了旋轉(zhuǎn)范圍,horizontal_flip則用于進(jìn)行水平翻轉(zhuǎn),vertical_flip用于垂直翻轉(zhuǎn),width_shift_range和height_shift_range則用于進(jìn)行隨機(jī)平移操作,zoom_range用于進(jìn)行隨機(jī)縮放。通過(guò)這些操作,我們可以有效地?cái)U(kuò)充訓(xùn)練數(shù)據(jù)集。

在訓(xùn)練過(guò)程中,我們需要設(shè)置一些超參數(shù),比如批次大小,訓(xùn)練輪數(shù)等。在這里,我們將每個(gè)批次的大小設(shè)置為32,訓(xùn)練輪數(shù)設(shè)置為50,steps_per_epoch參數(shù)則是用來(lái)控制每個(gè)訓(xùn)練輪中批次的個(gè)數(shù)。同時(shí),我們還需要通過(guò)validation_data參數(shù)來(lái)設(shè)置測(cè)試數(shù)據(jù)集,這樣可以方便我們對(duì)模型性能進(jìn)行評(píng)估。最后,我們指定verbose參數(shù)為1,這可以幫助我們?cè)谟?xùn)練過(guò)程中監(jiān)控模型性能。

第七步:模型評(píng)估

在完成模型的訓(xùn)練之后,我們需要對(duì)其性能進(jìn)行評(píng)估。這可以通過(guò)使用keras提供的evaluate()函數(shù)來(lái)實(shí)現(xiàn)。具體如下所示:

```python
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
```

在這里,我們可以輸出測(cè)試損失和測(cè)試精度等指標(biāo),這可以幫助我們快速了解模型的性能。

第八步:可視化訓(xùn)練結(jié)果

最后,我們還可以使用matplotlib庫(kù)來(lái)可視化我們的訓(xùn)練結(jié)果,這可以幫助我們更好地了解模型的性能趨勢(shì)。具體如下所示:

```python
fig, axs = plt.subplots(1, 2, figsize=(15, 5))

axs[0].plot(history.history['accuracy'])
axs[0].plot(history.history['val_accuracy'])
axs[0].set_title('Model accuracy')
axs[0].set_ylabel('Accuracy')
axs[0].set_xlabel('Epoch')
axs[0].legend(['Train', 'Test'], loc='upper left')

axs[1].plot(history.history['loss'])
axs[1].plot(history.history['val_loss'])
axs[1].set_title('Model loss')
axs[1].set_ylabel('Loss')
axs[1].set_xlabel('Epoch')
axs[1].legend(['Train', 'Test'], loc='upper left')

plt.show()
```

在這里,我們將訓(xùn)練的準(zhǔn)確率和損失值分別進(jìn)行了可視化,通過(guò)這些圖表,我們可以更好地了解模型在訓(xùn)練過(guò)程中的性能趨勢(shì)。

綜上所述,以上就是用Python實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)的完整流程,包括如何加載數(shù)據(jù)、預(yù)處理數(shù)據(jù)、構(gòu)建模型、編譯模型、訓(xùn)練模型、評(píng)估模型和可視化結(jié)果等。希望這篇文章能對(duì)讀者們學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)提供一定的幫助。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 圖像處理
    +關(guān)注

    關(guān)注

    27

    文章

    1272

    瀏覽量

    56496
  • python
    +關(guān)注

    關(guān)注

    54

    文章

    4756

    瀏覽量

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

    關(guān)注

    4

    文章

    359

    瀏覽量

    11820
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    卷積神經(jīng)網(wǎng)絡(luò)的基本概念、原理及特點(diǎn)

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡(jiǎn)稱CNN)是一種深度學(xué)習(xí)算法,它在圖像識(shí)別、視頻分析、自然語(yǔ)言處理等領(lǐng)域有著廣泛的應(yīng)用。本文將詳細(xì)介紹卷積神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 07-11 14:38 ?538次閱讀

    BP神經(jīng)網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)的關(guān)系

    BP神經(jīng)網(wǎng)絡(luò)(Backpropagation Neural Network)和卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡(jiǎn)稱CNN)是兩種在人工智能和機(jī)器學(xué)習(xí)領(lǐng)域
    的頭像 發(fā)表于 07-10 15:24 ?837次閱讀

    循環(huán)神經(jīng)網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)的區(qū)別

    循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)和卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是深度學(xué)習(xí)領(lǐng)域中兩種非常重要的神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 07-04 14:24 ?781次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)原理

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡(jiǎn)稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識(shí)別、視頻分析、自然語(yǔ)言處理等領(lǐng)域。本文將詳細(xì)介紹卷積神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 07-03 10:49 ?450次閱讀

    bp神經(jīng)網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)區(qū)別是什么

    BP神經(jīng)網(wǎng)絡(luò)(Backpropagation Neural Network)和卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡(jiǎn)稱CNN)是兩種不同類型的人工神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 07-03 10:12 ?710次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)分類方法有哪些

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像分類、目標(biāo)檢測(cè)、語(yǔ)義分割等計(jì)算機(jī)視覺任務(wù)。本文將詳細(xì)介紹卷積神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 07-03 09:40 ?334次閱讀

    cnn卷積神經(jīng)網(wǎng)絡(luò)分類有哪些

    卷積神經(jīng)網(wǎng)絡(luò)(CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像分類、目標(biāo)檢測(cè)、語(yǔ)義分割等領(lǐng)域。本文將詳細(xì)介紹CNN在分類任務(wù)中的應(yīng)用,包括基本結(jié)構(gòu)、關(guān)鍵技術(shù)、常見網(wǎng)絡(luò)架構(gòu)以及實(shí)際應(yīng)用案例。 引言 1.1
    的頭像 發(fā)表于 07-03 09:28 ?383次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練的是什么

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡(jiǎn)稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識(shí)別、視頻分析、自然語(yǔ)言處理等領(lǐng)域。本文將詳細(xì)介紹卷積神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 07-03 09:15 ?271次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的原理與實(shí)現(xiàn)

    1.卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡(jiǎn)稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識(shí)別、視頻分析、自然語(yǔ)言處理等領(lǐng)域。 卷積神經(jīng)網(wǎng)絡(luò)是一種前饋
    的頭像 發(fā)表于 07-02 16:47 ?377次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)及其功能

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡(jiǎn)稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識(shí)別、視頻分析、自然語(yǔ)言處理等領(lǐng)域。本文將詳細(xì)介紹卷積神經(jīng)網(wǎng)絡(luò)的基
    的頭像 發(fā)表于 07-02 14:45 ?798次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的原理是什么

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡(jiǎn)稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識(shí)別、語(yǔ)音識(shí)別、自然語(yǔ)言處理等領(lǐng)域。本文將詳細(xì)介紹卷積神經(jīng)網(wǎng)絡(luò)的原
    的頭像 發(fā)表于 07-02 14:44 ?430次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)和bp神經(jīng)網(wǎng)絡(luò)的區(qū)別

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡(jiǎn)稱CNN)和BP神經(jīng)網(wǎng)絡(luò)(Backpropagation Neural Networks,簡(jiǎn)稱BPNN)是兩種
    的頭像 發(fā)表于 07-02 14:24 ?1702次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的優(yōu)點(diǎn)

    卷積神經(jīng)網(wǎng)絡(luò)的優(yōu)點(diǎn)? 卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是一種基于深度學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)模型,在圖
    的頭像 發(fā)表于 12-07 15:37 ?3871次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)通俗理解

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks, CNN)是一類包含卷積計(jì)算且具有深度結(jié)構(gòu)的前饋神經(jīng)網(wǎng)絡(luò)(Feedforward Neural Network
    的頭像 發(fā)表于 11-26 16:26 ?953次閱讀

    使用Python卷積神經(jīng)網(wǎng)絡(luò)(CNN)進(jìn)行圖像識(shí)別的基本步驟

    Python 卷積神經(jīng)網(wǎng)絡(luò)(CNN)在圖像識(shí)別領(lǐng)域具有廣泛的應(yīng)用。通過(guò)使用卷積神經(jīng)網(wǎng)絡(luò),我們可以讓計(jì)算機(jī)從圖像中學(xué)習(xí)特征,從而實(shí)現(xiàn)對(duì)圖像的分
    的頭像 發(fā)表于 11-20 11:20 ?4794次閱讀