2022-02-28
在图像分类领域,最大的杀手就是它。这个残差神经网络在当时被发明出来后,立马消灭了敌人,任何其他模型都无法与之相比。我们使用下面的代码来调用这个模型,让我们的神经网络在 -mnist 数据集上执行图像分类。由于这个数据集中的图像大小是28*28*1,如果要使用的话,需要把28*28*1的灰度图变成224*224*3的RGB图,我们可以很容易的使用库转换图像。
首先我们做引导包:
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()
导入和重命名:
import cv2 as cv
读取数据集中的500张图片(注意不要把所有图片都用于读取和求和,否则不会节省电脑内存,因为之后每张图片的大小会大大增加,60000张图片需要的电脑内存是大致需要8.1Gb,如果用CPU训练的话,你的记忆棒目前至少需要8GB以上,后面加的权重参数上亿,电脑的运行内存是不可能。大,毕竟只要我们的神经网络好,几个就能得到很好的验证集准确率,没必要追求数量),读取和同时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)
我们终于得到了一个三维列表数据,但这不是一个,即numpy中的一个数组对象,目前还不能训练,需要在numpy中转换成数组,代码如下:
train_data=np.array(train_data)
train_data.shape
输出的当前形状是:
(500, 224, 224, 3)
对数据进行归一化以加速卷积神经网络的运行:
train_data=train_data/255
导入模型,同时编译模型:
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张图片,需要10个epoch,训练集的准确率就达到了80%。
这样,我们就用.0快速实现了一个神经网络!
分类:
技术要点:
相关文章:
© 版权声明
本站下载的源码均来自公开网络收集转发二次开发而来,
若侵犯了您的合法权益,请来信通知我们1413333033@qq.com,
我们会及时删除,给您带来的不便,我们深表歉意。
下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,访问及下载者下载默认同意本站声明的免责申明,请合理使用切勿商用。
THE END
暂无评论内容