Tensorflow最簡單實現ResNet50殘差神經網絡,進行圖像分類,速度超快


在圖像分類領域內,其中的大殺器莫過於Resnet50了,這個殘差神經網絡當時被發明出來之后,頓時毀天滅敵,其余任何模型都無法想與之比擬。我們下面用Tensorflow來調用這個模型,讓我們的神經網絡對Fashion-mnist數據集進行圖像分類.由於在這個數據集當中圖像的尺寸是28*28*1的,如果想要使用resnet那就需要把28*28*1的灰度圖變為224*224*3的RGB圖,我們使用OpenCV庫可以很容易將圖像進行resize。

首先我們進行導包:

import os,sys
import numpy as np
import scipy
from scipy import ndimage
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.keras.applications.resnet50 import ResNet50
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.resnet50 import preprocess_input, decode_predictions
from PIL import Image
import random

加載數據集:

(train_image,train_label),(test_image,test_label)=tf.keras.datasets.fashion_mnist.load_data()

導入opencv並重命名:

import cv2 as cv

讀取數據集當中的500張圖片(注意不要使用所有的圖片進行讀取和resize,不然電腦的內存將會不存,因為resize之后每一張圖片的尺寸大大增加,60000張圖片所需要的電腦內存大致需要8.1Gb,使用CPU進行訓練的話,你的內存條也就需要目前空余的至少在8gb以上,后期加上resnet的權重參數那更是幾個億,電腦的運行內存是不可能這么大的,畢竟只要我們的神經網絡好,幾個epoch就可以得到很好的驗證集准確度了,沒有必要追求數量),讀取和同時進行resize為224*224*3的代碼如下:

train_data = []
for img in train_image[:500]:
    resized_img = cv.resize(img, (224, 224))
    resized_img = cv.cvtColor(resized_img, cv.COLOR_GRAY2BGR)
    train_data.append(resized_img)

我們最后得到了一個三維的列表數據,但是這並不是一個ndarray,也就是numpy當中的數組對象,還無法進行訓練,我們需要將其轉化為numpy當中的數組,代碼如下:

train_data=np.array(train_data)
train_data.shape

輸出目前的shape為:

(500, 224, 224, 3)

將數據進行歸一化,加速卷積神經網絡的運算:

train_data=train_data/255

導入Resnet50模型,同時編譯模型:

model = ResNet50(
    weights=None,
    classes=10
)

model.compile(optimizer="Adam",
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

開始擬合模型:

model.fit(train_data,train_label[0:500], epochs=10, batch_size=6)

輸出:

Train on 500 samples
Epoch 1/10
500/500 [==============================] - 256s 511ms/sample - loss: 1.5721 - accuracy: 0.4260
Epoch 2/10
500/500 [==============================] - 255s 511ms/sample - loss: 1.3282 - accuracy: 0.5600
Epoch 3/10
500/500 [==============================] - 260s 519ms/sample - loss: 1.1301 - accuracy: 0.6180
Epoch 4/10
500/500 [==============================] - 259s 519ms/sample - loss: 1.1403 - accuracy: 0.6080
Epoch 5/10
500/500 [==============================] - 261s 521ms/sample - loss: 1.0098 - accuracy: 0.6400
Epoch 6/10
500/500 [==============================] - 264s 528ms/sample - loss: 0.9646 - accuracy: 0.6860
Epoch 7/10
500/500 [==============================] - 268s 535ms/sample - loss: 0.8954 - accuracy: 0.6940
Epoch 8/10
500/500 [==============================] - 269s 539ms/sample - loss: 0.7415 - accuracy: 0.7540
Epoch 9/10
500/500 [==============================] - 274s 549ms/sample - loss: 0.7001 - accuracy: 0.7880
Epoch 10/10
500/500 [=============================] - 275s 551ms/sample - loss: 0.5996 - accuracy: 0.8020

從中可以發現只需要500張圖片,進行十次epoch,訓練集的准確度已經達到百分之八十。

這樣我們就使用tensorflow2.0快速實現了一個Resnet50的神經網絡了!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM