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

加载数据集: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的神经网络了!

相关文章
相关标签/搜索