鸟类识别在之前做过,但是效果特别差。而且ResNet50的效果直接差到爆炸,这次利用VGG16与ResNet50的官方模型进行鸟类识别。

1.导入库

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import os,pathlib,PIL
from tensorflow.keras import layers,models,Sequential,Input,Model
from tensorflow.keras.layers import Conv2D,MaxPooling2D,Flatten,Dense,BatchNormalization,ZeroPadding2D,Activation,AveragePooling2D# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

2.数据准备

数据所在文件夹

data_dir = "E:/tmp/.keras/datasets/Birds_photos"
data_dir = pathlib.Path(data_dir)
img_count = len(list(data_dir.glob('*/*')))
print(img_count)#共565张图片

labels:一共是4类

all_images_paths = list(data_dir.glob('*'))##”*”匹配0个或多个字符
all_images_paths = [str(path) for path in all_images_paths]
all_label_names = [path.split("\\")[5].split(".")[0] for path in all_images_paths]

超参数的设置

height = 227
width = 227
batch_size = 8
epochs = 20

按照8:2的比例划分训练集与测试集

train_data_gen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255,validation_split=0.2
)
train_ds = train_data_gen.flow_from_directory(directory=data_dir,target_size=(height,width),batch_size=batch_size,shuffle=True,class_mode='categorical',subset='training'
)
test_ds = train_data_gen.flow_from_directory(directory=data_dir,target_size=(height,width),batch_size=batch_size,shuffle=True,class_mode='categorical',subset='validation'
)

查看数据

plt.figure(figsize=(15,10))for images,labels in train_ds:for i in range(32):ax = plt.subplot(4,8,i+1)plt.imshow(images[i])plt.title(all_label_names[np.argmax(labels[i])])plt.axis("off")break
plt.show()

3.VGG16网络

迁移学习调用VGG16的官方模型

conv_base = tf.keras.applications.VGG16(weights='imagenet',include_top=False)
#设置为不可训练
conv_base.trainable = False
#模型搭建
model = tf.keras.Sequential()
model.add(conv_base)
model.add(tf.keras.layers.GlobalAveragePooling2D())
model.add(tf.keras.layers.Dense(512,activation='relu'))
model.add(tf.keras.layers.Dense(4,activation='sigmoid'))

模型编译&&训练

model.compile(optimizer="adam",loss='categorical_crossentropy',metrics=['accuracy']
)
history = model.fit(train_ds,validation_data=test_ds,epochs=epochs
)


模型的准确率很高,在博主实验的几个模型中,VGG16的模型准确率是最高的。

保存网络:

model.save("E:/Users/yqx/PycharmProjects/BirdsRec/model.h5")

利用网络模型进行预测:

new_model = tf.keras.models.load_model("E:/Users/yqx/PycharmProjects/BirdsRec/model.h5")
plt.figure(figsize=(18,18))
plt.suptitle("预测结果展示")
for images,labels in test_ds:for i in range(8):ax = plt.subplot(2,4,i+1)plt.imshow(images[i])img_array = tf.expand_dims(images[i],0)#增加一个维度pre = new_model.predict(img_array)plt.title(all_label_names[np.argmax(pre)])plt.axis("off")break
plt.show()


绘制混淆矩阵

from sklearn.metrics import confusion_matrix
import seaborn as sns
import pandas as pd#绘制混淆矩阵
def plot_cm(labels,pre):conf_numpy = confusion_matrix(labels,pre)#根据实际值和预测值绘制混淆矩阵conf_df = pd.DataFrame(conf_numpy,index=all_label_names,columns=all_label_names)#将data和all_label_names制成DataFrameplt.figure(figsize=(8,8))sns.heatmap(conf_df,annot=True,fmt="d",cmap="BuPu")#将data绘制为混淆矩阵plt.title('混淆矩阵',fontsize = 15)plt.ylabel('真实值',fontsize = 14)plt.xlabel('预测值',fontsize = 14)plt.show()
test_pre = []
test_label = []
for images,labels in test_ds:for image,label in zip(images,labels):img_array = tf.expand_dims(image,0)#增加一个维度pre = model.predict(img_array)#预测结果test_pre.append(all_label_names[np.argmax(pre)])#将预测结果传入列表test_label.append(all_label_names[np.argmax(label)])#将真实结果传入列表break#由于硬件问题。这里我只用了一个batch,一共8张图片。
plot_cm(test_label,test_pre)#绘制混淆矩阵

4.ResNet50网络

与VGG16不同的是,ResNet50的网络参数设置的是可以训练,经过多次实验,这样ResNet50的实验效果是最好的。

conv_base = tf.keras.applications.ResNet50(weights='imagenet',include_top=False)
#设置为可以训练
conv_base.trainable = True
#模型搭建
model = tf.keras.Sequential()
model.add(conv_base)
model.add(tf.keras.layers.GlobalAveragePooling2D())
model.add(tf.keras.layers.Dense(512,activation='relu'))
model.add(tf.keras.layers.Dense(4,activation='sigmoid'))


虽然准确率在来回波动,但是整体的准确率是比较高的,比VGG16的准确率还是差一些的。博主关于ResNet50的了解还比较少,等到了解深刻了再回来更新。

深度学习之基于VGG16与ResNet50实现鸟类识别相关推荐

  1. 深度学习之基于Xception实现四种动物识别

    本次实验类似于猫狗大战,只不过将两种动物识别变为了四种动物识别. 本文的重点是卷积神经网络Xception的实践,在之前的学习中,我们已经实验过其他几种比较常用的网络模型,但是Xception网络并未 ...

  2. 深度学习之基于opencv和CNN实现人脸识别

    这个项目在之前人工智能课设上做过,但是当时是划水用的别人的.最近自己实现了一下,基本功能可以实现,但是效果并不是很好.容易出现错误识别,或者更改了背景之后识别效果变差的现象.个人以为是数据选取的问题, ...

  3. 【深度学习】基于 Alluxio 数据缓存的性能优化

    作者 | 车漾(阿里云高级技术专家).顾荣(南京大学 副研究员) 导读:Alluxio 项目诞生于 UC Berkeley AMP 实验室,自开源以来经过 7 年的不断开发迭代,支撑大数据处理场景的数 ...

  4. 深度学习实战—基于TensorFlow 2.0的人工智能开发应用

    作者:辛大奇 著 出版社:中国水利水电出版社 品牌:智博尚书 出版时间:2020-10-01 深度学习实战-基于TensorFlow 2.0的人工智能开发应用

  5. Python深度学习:基于TensorFlow

    作者:吴茂贵,王冬,李涛,杨本法 出版社:机械工业出版社 品牌:机工出版 出版时间:2018-10-01 Python深度学习:基于TensorFlow

  6. Python深度学习:基于PyTorch [Deep Learning with Python and PyTorch]

    作者:吴茂贵,郁明敏,杨本法,李涛,张粤磊 著 出版社:机械工业出版社 品牌:机工出版 出版时间:2019-11-01 Python深度学习:基于PyTorch [Deep Learning with ...

  7. 深度学习入门 基于Python的理论与实现

    作者:斋藤康毅 出版社:人民邮电出版社 品牌:iTuring 出版时间:2018-07-01 深度学习入门 基于Python的理论与实现

  8. 【深度学习】基于Pytorch进行深度神经网络计算(一)

    [深度学习]基于Pytorch进行深度神经网络计算(一) 文章目录 1 层和块 2 自定义块 3 顺序块 4 在正向传播函数中执行代码 5 嵌套块 6 参数管理(不重要) 7 参数初始化(重要) 8 ...

  9. 【深度学习】基于Pytorch进行深度神经网络计算(二)

    [深度学习]基于Pytorch进行深度神经网络计算(二) 文章目录 1 延后初始化 2 Pytorch自定义层2.1 不带参数的层2.2 带参数的层 3 基于Pytorch存取文件 4 torch.n ...

最新文章

  1. Codeforces 448E Divisors
  2. python字符串中strip() 函数和 split() 函数的详解
  3. 【送书】联邦学习在视觉领域的应用,揭秘2020年AAAI人工智能创新应用奖获奖案例!...
  4. JVM从入门到精通(二):详解Class加载过程,双亲委派机制,编译执行与解释执行
  5. 如何将数据库中的记录表导入到VC中
  6. 水瓶座的回顾-高贵的程序员
  7. 批量生成横断面_批量生动生成填充图案的边界线
  8. 客户端常见的几种数据传输方法
  9. idea拉出Output窗口和还原窗口
  10. 概率论——离散型随机变量
  11. 校园服务微信小程序-跑腿代购,失物招领,二手商城
  12. 两台计算机直连怎么写ip,两台电脑直连(两台电脑用一条网线连接)
  13. [Bilingual]Klein四元群的四个例子Four examples of Klein four-group
  14. 2020快手上市招股书
  15. h5 php 拍照上传图片,H5拍照、选择图片上传组件核心
  16. 基于线性回归的股票预测案例
  17. 解决2K 显示器的尴尬为MacBook 开启HiDPI(新方法支持M1)
  18. 更改公众号名称对用户关注的影响
  19. 配置服务器pytorch/TensorFlow环境+远程连接vscode
  20. 海量智库第3期|Vastbase G100核心技术介绍之【CSN事务快照】

热门文章

  1. CPU使用率到100%,有哪些因素影响?
  2. 简图记录-《乌合之众》阅读总结
  3. 用户故事(三):用户故事该怎么写?
  4. matlab穷举法最短路问题,基于MATLAB求解最短路问题.doc
  5. Java修炼之凡界篇 筑基期 第02卷 语法 番外1 原码 反码 补码
  6. Delphi字符串转换成代码
  7. matlab代码怎么清除,matlab个人学习笔记:数据清理
  8. ISIS:中央系统到中央系统
  9. JCJC错别字检测系统API接口使用文档-错别字检测接口说明
  10. Word文件乱码XML