在影像分類領域內,其中的大殺器莫過于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 =https://www.cnblogs.com/geeksongs/p/ [] 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=https://www.cnblogs.com/geeksongs/p/np.array(train_data)
train_data.shape
輸出目前的shape為:
(500, 224, 224, 3)
將資料進行歸一化,加速卷積神經網路的運算:
train_data=https://www.cnblogs.com/geeksongs/p/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的神經網路了!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/6788.html
標籤:其他
上一篇:假設檢驗、Z檢驗與T檢驗
