在圖像分類領域內,其中的大殺器莫過於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
加載數據集:app
(train_image,train_label),(test_image,test_label)=tf.keras.datasets.fashion_mnist.load_data()
導入opencv並重命名:dom
import cv2 as cv
讀取數據集當中的500張圖片(注意不要使用全部的圖片進行讀取和resize,否則電腦的內存將會不存,由於resize以後每一張圖片的尺寸大大增長,60000張圖片所須要的電腦內存大體須要8.1Gb,使用CPU進行訓練的話,你的內存條也就須要目前空餘的至少在8gb以上,後期加上resnet的權重參數那更是幾個億,電腦的運行內存是不可能這麼大的,畢竟只要咱們的神經網絡好,幾個epoch就能夠獲得很好的驗證集準確度了,沒有必要追求數量),讀取和同時進行resize爲224*224*3的代碼以下:spa
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當中的數組,代碼以下:code
train_data=np.array(train_data)
train_data.shape
輸出目前的shape爲:對象
(500, 224, 224, 3)
將數據進行歸一化,加速卷積神經網絡的運算:blog
train_data=train_data/255
導入Resnet50模型,同時編譯模型:圖片
model = ResNet50( weights=None, classes=10 ) model.compile(optimizer="Adam", loss='sparse_categorical_crossentropy', metrics=['accuracy'])
開始擬合模型:ip
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的神經網絡了!