全是代码和效果图,具体注解,回看利用resnet50的那篇博客就行

# 引入相关的库
import tensorflow as tf
from tensorflow.keras.preprocessing import image
import pathlib
import os
import numpy as np
import random
import glob
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import pandas as pd
import matplotlib.pyplot as plt
gpus = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_visible_devices(gpus[0], 'GPU')
tf.config.experimental.set_virtual_device_configuration(gpus[0],[tf.config.experimental.VirtualDeviceConfiguration(memory_limit=7000)])
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
# 获取图片路径
train_root = '/home/hyb/狗狗识别/dogImages/train'
test_root = '/home/hyb/狗狗识别/dogImages/test'
valid_root = '/home/hyb/狗狗识别/dogImages/valid'
# 定义超参数,避免在编译,训练的代码中进行硬编码,方便调整超参数
weigth = 224
heigth = 224
channels = 3
batch_size = 28
num_classes = 133
# 数据增强
train_datagen = tf.keras.preprocessing.image.ImageDataGenerator(preprocessing_function = tf.keras.applications.mobilenet.preprocess_input,rotation_range= 40,width_shift_range= 0.2,height_shift_range= 0.2,shear_range= 0.2,zoom_range= 0.2,horizontal_flip= True,fill_mode= 'nearest'
)
# 主要是读取到图片目录下的所以狗狗种类和图片,对图片进行预处理
train_generator = train_datagen.flow_from_directory(train_root,target_size=(weigth,heigth),batch_size=batch_size,seed = 7,shuffle= True,class_mode = "categorical"
)valid_datagen = tf.keras.preprocessing.image.ImageDataGenerator(preprocessing_function = tf.keras.applications.mobilenet.preprocess_input,
)
# 主要是读取到图片目录下的所以狗狗种类和图片,对图片进行预处理
valid_generator = train_datagen.flow_from_directory(valid_root,target_size=(weigth,heigth),batch_size=batch_size,seed = 7,shuffle= False,class_mode = "categorical"
)train_num = train_generator.samples
valid_num = valid_generator.samples
print("训练集中的图片数量:",train_num)
print("验证集中的图片数量:",valid_num)
test_datagen = tf.keras.preprocessing.image.ImageDataGenerator(preprocessing_function = tf.keras.applications.mobilenet.preprocess_input,
)
test_generator = train_datagen.flow_from_directory(test_root,target_size=(weigth,heigth),batch_size=batch_size,
#     seed = 7,
#     shuffle= False,
#     class_mode = "categorical"
)
test_num = test_generator.samples
print("训练集中的图片数量:",test_num)
# 查看训练数据的维度保证和(batch_size,weight,height,channels)设置的超参数是一致的
## tip:如果(28,133)打印出来的维度不是预期的,可能是 '/home/hyb/狗狗识别/dogImages/train'这个路径下缺少了train,没有完全读到狗狗种类文件
for i in range(2):x,y = train_generator.next()print(x.shape,y.shape)print(y)
mobilenet_fine_tune = tf.keras.models.Sequential()
mobilenet_fine_tune.add(tf.keras.applications.MobileNet(include_top = False,pooling = 'avg',weights = 'imagenet'))
# 修改输出神经元对应狗狗种类
mobilenet_fine_tune.add(tf.keras.layers.Dense(num_classes, activation = 'softmax'))
mobilenet_fine_tune.layers[0].trainable = False# 对模型进行编译
mobilenet_fine_tune.compile(loss="categorical_crossentropy",optimizer="Adam", metrics=['accuracy'])
mobilenet_fine_tune.summary()
# 设置哨兵,用来存储quan# 设置哨兵,用来存储权重模型,和数据收敛,模型再也学习不到新内容的时候及时收敛
checkpoint_path = "/home/hyb/狗狗识别/dogImages/saved_models/checkpoint_mobilenet/cp.ckpt"
checkpoint_dir = os.path.dirname(checkpoint_path)
checkpoint_filepath = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_path,verbose= 1,save_weights_only= True,save_best_only=True)
callback_dog=tf.keras.callbacks.EarlyStopping(patience=5,min_delta=1e-3)
history = mobilenet_fine_tune.fit(train_generator,steps_per_epoch=train_num // batch_size,epochs=50,validation_data=valid_generator,validation_steps= valid_num // batch_size,callbacks=[checkpoint_filepath,callback_dog])
# 加载权重
mobilenet_fine_tune.load_weights(checkpoint_path)# 评估模型
loss,acc = mobilenet_fine_tune.evaluate(test_generator,verbose=1)
print("Restored model, accuracy: {:5.2f}%".format(100*acc))
# 存储模型
mobilenet_fine_tune.save('/home/hyb/狗狗识别/dogImages/saved_models/model_h5/checkpoint_mobilenet/my_model.h5')
# 重新创建完全相同的模型,包括其权重和优化程序
new_model = tf.keras.models.load_model('/home/hyb/狗狗识别/dogImages/saved_models/model_h5/checkpoint_mobilenet/my_model.h5')# 显示网络结构
new_model.summary()
# 获取狗狗种类,以便后续对狗狗进行识别
files = sorted(os.listdir('./dogImages/test/'))
print(files)
# 狗狗的133个种类
files=['001.Affenpinscher', '002.Afghan_hound', '003.Airedale_terrier', '004.Akita', '005.Alaskan_malamute', '006.American_eskimo_dog', '007.American_foxhound', '008.American_staffordshire_terrier', '009.American_water_spaniel', '010.Anatolian_shepherd_dog', '011.Australian_cattle_dog', '012.Australian_shepherd', '013.Australian_terrier', '014.Basenji', '015.Basset_hound', '016.Beagle', '017.Bearded_collie', '018.Beauceron', '019.Bedlington_terrier', '020.Belgian_malinois', '021.Belgian_sheepdog', '022.Belgian_tervuren', '023.Bernese_mountain_dog', '024.Bichon_frise', '025.Black_and_tan_coonhound', '026.Black_russian_terrier', '027.Bloodhound', '028.Bluetick_coonhound', '029.Border_collie', '030.Border_terrier', '031.Borzoi', '032.Boston_terrier', '033.Bouvier_des_flandres', '034.Boxer', '035.Boykin_spaniel', '036.Briard', '037.Brittany', '038.Brussels_griffon', '039.Bull_terrier', '040.Bulldog', '041.Bullmastiff', '042.Cairn_terrier', '043.Canaan_dog', '044.Cane_corso', '045.Cardigan_welsh_corgi', '046.Cavalier_king_charles_spaniel', '047.Chesapeake_bay_retriever', '048.Chihuahua', '049.Chinese_crested', '050.Chinese_shar-pei', '051.Chow_chow', '052.Clumber_spaniel', '053.Cocker_spaniel', '054.Collie', '055.Curly-coated_retriever', '056.Dachshund', '057.Dalmatian', '058.Dandie_dinmont_terrier', '059.Doberman_pinscher', '060.Dogue_de_bordeaux', '061.English_cocker_spaniel', '062.English_setter', '063.English_springer_spaniel', '064.English_toy_spaniel', '065.Entlebucher_mountain_dog', '066.Field_spaniel', '067.Finnish_spitz', '068.Flat-coated_retriever', '069.French_bulldog', '070.German_pinscher', '071.German_shepherd_dog', '072.German_shorthaired_pointer', '073.German_wirehaired_pointer', '074.Giant_schnauzer', '075.Glen_of_imaal_terrier', '076.Golden_retriever', '077.Gordon_setter', '078.Great_dane', '079.Great_pyrenees', '080.Greater_swiss_mountain_dog', '081.Greyhound', '082.Havanese', '083.Ibizan_hound', '084.Icelandic_sheepdog', '085.Irish_red_and_white_setter', '086.Irish_setter', '087.Irish_terrier', '088.Irish_water_spaniel', '089.Irish_wolfhound', '090.Italian_greyhound', '091.Japanese_chin', '092.Keeshond', '093.Kerry_blue_terrier', '094.Komondor', '095.Kuvasz', '096.Labrador_retriever', '097.Lakeland_terrier', '098.Leonberger', '099.Lhasa_apso', '100.Lowchen', '101.Maltese', '102.Manchester_terrier', '103.Mastiff', '104.Miniature_schnauzer', '105.Neapolitan_mastiff', '106.Newfoundland', '107.Norfolk_terrier', '108.Norwegian_buhund', '109.Norwegian_elkhound', '110.Norwegian_lundehund', '111.Norwich_terrier', '112.Nova_scotia_duck_tolling_retriever', '113.Old_english_sheepdog', '114.Otterhound', '115.Papillon', '116.Parson_russell_terrier', '117.Pekingese', '118.Pembroke_welsh_corgi', '119.Petit_basset_griffon_vendeen', '120.Pharaoh_hound', '121.Plott', '122.Pointer', '123.Pomeranian', '124.Poodle', '125.Portuguese_water_dog', '126.Saint_bernard', '127.Silky_terrier', '128.Smooth_fox_terrier', '129.Tibetan_mastiff', '130.Welsh_springer_spaniel', '131.Wirehaired_pointing_griffon', '132.Xoloitzcuintli', '133.Yorkshire_terrier']

这里我使用的图片是测试集001种类的第一张图片,准度挺高,达到94%.

# 对狗狗种类进行预测:我这张是哈士奇,对应的是5号,虽然只有3%,但都比绝大多数的评分要多
from keras.preprocessing.image import load_img, img_to_array
pic_dog = '/home/hyb/狗狗识别/dogImages/test/001.Affenpinscher/Affenpinscher_00003.jpg'
pic_dog = load_img(pic_dog,target_size=(224,224))
pic_dog = img_to_array(pic_dog)
pic_dog = pic_dog/255
pic_dog = pic_dog.reshape(1,224,224,3)
result = mobilenet_fine_tune.predict(pic_dog)
# print(result)
count = 0
for i in result[0]:percent = '%.3f%%'%(i*100)print("{}的概率:{}".format(files[count],percent))count += 1

# 模型学习曲线
def plot_learning_curves(history, label, epcohs, min_value, max_value):data = {}data[label] = history.history[label]data['val_'+label] = history.history['val_'+label]pd.DataFrame(data).plot(figsize=(8, 5))plt.grid(True)plt.axis([0, 20, min_value, max_value])plt.show()plot_learning_curves(history, 'accuracy', 20, 0, 1)
plot_learning_curves(history, 'loss', 20, 0, 2)

深度学习—利用TensorFlow2实现狗狗品种品种(mobilenet实现)相关推荐

  1. 深度学习—利用TensorFlow2实现狗狗品种品种(resnet50实现)

    识别狗狗品种 利用TensorFlow2,实现:识别狗狗的113个品种 狗狗种类识别的开发流程 添加GPU的内存分配情况 解决图片字节丢失 对图片进行数据的预处理 模型 对模型进行测试 利用Tenso ...

  2. 解锁AI技能:深度学习利用OCT图像诊断眼内视网膜疾病

    解锁AI技能:深度学习利用OCT图像诊断眼内视网膜疾病 深度学习(Deep learning,DL)是一种新型的AI机器学习技术,它使用一些机器学习技术解决现实世界的问题,通过开发神经网络,模拟人类的 ...

  3. 吴恩达深度学习之tensorflow2.0 课程

    课链接 吴恩达深度学习之tensorflow2.0入门到实战 2019年最新课程 最佳配合吴恩达实战的教程 代码资料 自己取 链接:https://pan.baidu.com/s/1QrTV3KvKv ...

  4. Opencv4.x深度学习之Tensorflow2.3框架训练模型

    Opencv4.x深度学习之Tensorflow2.3框架训练模型 第一部分:开发环境 1.Win10 x64 2.Opencv-Python 3.Tensorflow 2.3.0 CPU 第二部分: ...

  5. 第1章【深度学习简介】--动手学深度学习【Tensorflow2.0版本】

    项目地址:https://github.com/TrickyGo/Dive-into-DL-TensorFlow2.0 UC 伯克利李沐的<动手学深度学习>开源书一经推出便广受好评.很多开 ...

  6. 第0章【序】--动手学深度学习【Tensorflow2.0版本】

    项目地址:https://github.com/TrickyGo/Dive-into-DL-TensorFlow2.0 这个项目将<动手学深度学习> 原书中MXNet代码实现改为Tenso ...

  7. 【深度学习】Tensorflow2.x入门(一)建立模型的三种模式

    前言 最近做实验比较焦虑,因此准备结合推荐算法梳理下Tensorflow2.x的知识.介绍Tensorflow2.x的文章有很多,但本文(系列)是按照作者构建模型的思路来展开的,因此不会从Eager ...

  8. django调用java_07.手把手教将深度学习利用Django将模型发布成服务供java调用

    标题 问题 一.python发布成服务 1.先建立一个深度学习模型并训练好 2.建立一个预测方法去调用训练好的模型 3.建立一个Django工程 4.将python利用模型预测的代码放入Django项 ...

  9. 【Tensorflow深度学习】Tensorflow2.0GPU版极简安装

    Tensorflow2.0的安装 前言 Anaconda3的安装 极简安装1 极简安装2 测试安装 前言 安装深度学习的开发环境坑挺多的...记录一下. 标准安装装起来坑太多了,极简安装除了下个Ana ...

  10. 第3章(3.11~3.16节)模型细节/Kaggle实战【深度学习基础】--动手学深度学习【Tensorflow2.0版本】

    项目地址:https://github.com/TrickyGo/Dive-into-DL-TensorFlow2.0 UC 伯克利李沐的<动手学深度学习>开源书一经推出便广受好评.很多开 ...

最新文章

  1. 视频监控系统供电方式及选择方法
  2. python笔记day4
  3. Java提高学习之Object(3)
  4. ios 捕抓crash_ios crash的原因与抓取crash日志的方法
  5. 实战系列-Spring Cloud微服务中三把利器Feign、Hystrix、Ribbon
  6. mysql cmd grep_通过 mysqlbinlog 和 grep 命令定位binlog文件中指定操作
  7. ActiveX 控件重绘无效问题,用CClientDC 而不是CPaintDC
  8. UML进行Linux内核调试
  9. 云原生日志管理瑞士军刀 Fluent Operator 中文入门教程
  10. 如何批量创建文件夹并命名?
  11. 微信翻译生日快乐的代码_微信表情翻译表白代码彩蛋大全 微信表情加符号翻译意思全解...
  12. html 在线测试 鱼缸,研究员试图用AR鱼缸欺骗鱼的感官系统,结果反被鱼识破
  13. 主窗口(10):【类】QWidgetAction [官翻]
  14. 如何用ChatGPT做一门课?(包含大纲、脚本、PPT文本)
  15. H2O.ai初步使用
  16. 团队从小到大,再到体验团队
  17. 百万excel导入mysql_百万级xlsx表格导入数据库的实现方案
  18. ArcGIS快速分别导出大量范围线的坐标到报盘Excel格式
  19. 2019年度暨大一学年个人总结—李兆龙
  20. AI说人“画” | Heart Broken, 游戏中被AI碾压的我们都中了哪些套路?

热门文章

  1. 关于MAPGIS文件转CAD文件的问题处理
  2. Codevs 3322 时空跳跃者的困境(组合数 二项式定理)
  3. 论文解读-通过建模时空动态生成活动轨迹
  4. Web核心(Java技术栈、HTTP、Servlet、Request、Response)
  5. 鼠标划动网页或者窗口时进度条总是上下乱跳,有可能是你的上下按键坏掉了
  6. 计算机主机忘了密码怎么办,如果我忘记了笔记本计算机的开机密码怎么办
  7. killer Linux驱动下载,The Linux Killer
  8. 从零开始搭建一个Vue项目
  9. java web代码及展现_抓网页_面包网_javaWeb展示
  10. 【Computer Organization笔记08】指令系统概述,指令格式,寻址方式