基于Keras的卷积神经网络模型预测–狗的品种识别

from sklearn.datasets import load_files
from keras.utils import np_utils
import numpy as np
from glob import glob
import os
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
from matplotlib import image
from keras.preprocessing import image as image1
from tqdm import tqdm
from PIL import ImageFile
from keras.callbacks import ModelCheckpoint
#定义加载数据集函数
def load_dataset(path):data=load_files(path)dog_files=np.array(data['filenames'])raw_targets=np.array(data['target'])dog_targets=np_utils.to_categorical(raw_targets,num_classes)return dog_files,raw_targets,dog_targets
#加载数据集
def draw_random_9_dog_images(dogpath_prefix_len):fig,axes=plt.subplots(nrows=3,ncols=3)fig.set_size_inches(10,9)random_9_nums=np.random.choice(len(x_train),9)random_9_imgs=x_train[random_9_nums]print(random_9_imgs)imgname_list=[]for imgpath in random_9_imgs:imgname=imgpath[dogpath_prefix_len:]imgname=imgname[:imgname.find('/')]imgname_list.append(imgname)index=0for row_index in range(3):for col_index in range(3):img=image.imread(random_9_imgs[index])ax=axes[row_index,col_index]ax.imshow(img)ax.set_xlabel(imgname_list[index])index+=1plt.show()
def path_to_tensor(img_path):img=image1.load_img(img_path,target_size=(224,224,3))x=image1.img_to_array(img)return np.expand_dims(x,axis=0)
def paths_to_tensor(img_paths):list_of_tensors=[path_to_tensor(img_path) for img_path in tqdm(img_paths)]return np.vstack(list_of_tensors)if __name__ == '__main__':num_classes = 120path0=os.path.join(os.getcwd(),'Images')# path0=r'Images/'dog_filepaths,dog_raw_targets,dog_targets=load_dataset(path0)print(dog_filepaths)print(dog_raw_targets)print(dog_targets)dogpath_prefix_len=len(os.path.join(path0,'n02085602-'))dog_names=[item[dogpath_prefix_len:] for item in sorted(glob(os.path.join(path0,'*')))]print("dog_names=",dog_names)print(glob(path0))print("狗的品种有{}种".format(len(dog_names)))print("狗的图片一共有{}张".format(len(dog_filepaths)))print(dog_names[:5])print(dog_filepaths[:5])print(dog_raw_targets[:10])print(dog_targets[:3])dog_filepaths=dog_filepaths[:9000]dog_targets=dog_targets[:9000]x_train,x_test,y_train,y_test=train_test_split(dog_filepaths,dog_targets,test_size=0.2)half_test_count=int(len(x_test)/2)x_valid=x_test[:half_test_count]y_valid=y_test[:half_test_count]x_test=x_test[half_test_count:]y_test=y_test[half_test_count:]print("x_train.shape={},y_train.shape={}".format(x_train.shape,y_train.shape))print("x_valid.shape={},y_valid.shape={}".format(x_valid.shape, y_valid.shape))print("x_test.shape={},y_test.shape={}".format(x_test.shape, y_test.shape))plt.style.use('default')draw_random_9_dog_images(dogpath_prefix_len)dogs_shape_list=[]for filepath in dog_filepaths:shape=image.imread(filepath).shapeif len(shape)==3:dogs_shape_list.append(shape)dogs_shapes=np.asarray(dogs_shape_list)print("总共{}张".format(len(dogs_shapes)))print("随机抽取3张照片的维度是{}。".format(dogs_shapes[np.random.choice(len(dogs_shapes),3)]))dogs_mean_width=np.mean(dogs_shapes[:,0])dogs_mean_height=np.mean(dogs_shapes[:,1])print("狗的图片的平均宽:{}*平均高:{}。".format(dogs_mean_width,dogs_mean_height))plt.plot(dogs_shapes[:,0],dogs_shapes[:,1],'o')plt.title("The Image Sizes of All Categories of Dog")plt.xlabel("Image Width")plt.ylabel("Image Height")plt.show()plt.hist(dogs_shapes[:,0],bins=100)plt.title("Dog Images Width Distribution")plt.show()plt.hist(dogs_shapes[:,1],bins=100)plt.title("Dog Images Height Distribution")plt.show()#数据预处理ImageFile.LOAD_TRUNCATED_IMAGES=Truetrain_tensors=paths_to_tensor(x_train).astype(np.float32)/255valid_tensors=paths_to_tensor(x_valid).astype(np.float32)/255test_tensors=paths_to_tensor(x_test).astype(np.float32)/255#创建模型from keras.layers import Conv2D,MaxPooling2D,GlobalAveragePooling2Dfrom keras.layers import Dropout,Flatten,Densefrom keras.models import Sequentialmodel=Sequential()model.add(Conv2D(filters=16,kernel_size=(2,2),strides=(1,1),padding='same',activation='relu',input_shape=train_tensors.shape[1:]))model.add(MaxPooling2D(pool_size=(2,2)))model.add(Dropout(0.2))model.add(Conv2D(filters=32,kernel_size=(2,2),strides=(1,1),padding='same',activation='relu'))model.add(Conv2D(filters=64, kernel_size=(2, 2), strides=(1, 1), padding='same', activation='relu'))model.add(MaxPooling2D(pool_size=(2,2)))model.add(Dropout(0.2))model.add(GlobalAveragePooling2D())model.add(Dropout(0.5))model.add(Dense(num_classes,activation='softmax'))model.summary()model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])path1=os.path.join(os.getcwd(),'saved_models','weights.best.from_scratch.hdf5')checkpointer=ModelCheckpoint(filepath=path1,verbose=1,save_best_only=True)epochs=20model.fit(train_tensors,y_train,validation_data=(valid_tensors,y_valid),epochs=epochs,batch_size=20,callbacks=[checkpointer],verbose=1)##加载具有最好验证权重的模型model.load_weights(path1)dog_breed_predictions=[np.argmax(model.predict(np.expand_dims(tensor,axis=0))) for tensor in test_tensors]test_accuracy=100*np.sum(np.array(dog_breed_predictions==np.argmax(y_test,axis=1))/len(dog_breed_predictions))print('Test Accuracy:{}'.format(test_accuracy))


这个神经网络比较简单,准确率不高。

基于Keras的卷积神经网络模型预测--狗的品种识别相关推荐

  1. 笔记:基于keras的不同神经网络模型Minst手写体识别

    基于keras的不同神经网络模型MNIST手写体识别 1.CNN版 1.导入数据 相关库(导入plt是为了看数据集的图) import keras from keras.datasets import ...

  2. 基于Keras的卷积神经网络用于猫狗分类(未进行数据增强)+卷积层可视化

    首先看数据集路径: cats和dogs存放的就是各种大小的猫狗图片. 读取数据集代码: import os import matplotlib.pyplot as plt ""&q ...

  3. 基于Keras的卷积神经网络用于猫狗分类(进行了数据增强)+卷积层可视化

    接着我上一篇博客,https://blog.csdn.net/fanzonghao/article/details/81149153. 在上一篇基础上对数据集进行数据增强.函数如下: "&q ...

  4. 基于Tensorflow的卷积神经网络模型实现水果分类识别(实践案例)

    前言 写这篇博客的目的,就是记录下实现Fruit Dataset Image Classification Network的过程,所以从头开始写.这里感谢下会飞的小咸鱼提供了思路,文章内容主要翻译自K ...

  5. Keras之CNN:基于Keras利用cv2建立训练存储卷积神经网络模型(2+1)并调用摄像头进行实时人脸识别

    Keras之CNN:基于Keras利用cv2建立训练存储卷积神经网络模型(2+1)并调用摄像头进行实时人脸识别 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 # -*- codin ...

  6. 采用keras深度学习框架搭建卷积神经网络模型实现垃圾分类,基于树莓派上进行实时视频流的垃圾识别源代码

    一.项目概述 简介:该垃圾分类项目主要在于对各种垃圾进行所属归类,本次项目采用keras深度学习框架搭建卷积神经网络模型实现图像分类,最终移植在树莓派上进行实时视频流的垃圾识别. 前期:主要考虑PC端 ...

  7. 图片2分类卷积神经网络模型训练、分类预测案例全过程(1)

    图片2分类卷积神经网络模型训练.分类预测案例全过程(1) 前言 (1)尽管目前有关卷积神经网络深度学习的相关材料较多,但深度学习牵涉到数据预处理.模型构建.模型调用等环节,我也是一个初学者,中间有很多 ...

  8. keras卷积处理rgb输入_CNN卷积神经网络模型搭建

    前言 前段时间尝试使用深度学习来识别评测过程中的图片,以减少人力成本.目前是在深度学习框架Keras(后端使用TensorFlow)下搭建了一个CNN卷积神经网络模型,下面就如何搭建一个最简单的数字图 ...

  9. 图片2分类卷积神经网络模型训练、分类预测案例全过程(2)

    上一篇博客内容讲述了卷积神经网络模型构建.训练以及模型的保存,包括训练样本数据的预处理和喂给网络. 本篇博客内容讲述训练好的模型的应用和实际图片数据的分类预测. 图片2分类卷积神经网络模型训练.分类预 ...

最新文章

  1. Android 监听多个Spinner 的点击事件
  2. 印度小哥“神剑”:PDF提取表格so easy!
  3. 指导你成为C++编程高手的魔幻之书——写给大家看的C++书
  4. 一些关于mathematica的tips
  5. DCOM 示例:演示如何远程调用 COM 对象
  6. linux 常用查看网络连接方法及脚本
  7. libnet TCP示例
  8. 分段线性变换与直方图修正
  9. DataNode逻辑结构
  10. php 小墙 垃圾评论,关于php过滤垃圾评论
  11. 2复数与复变函数(二)
  12. 终极算法【2】——终极算法
  13. 【JavaScript】JS中的自定义对象
  14. 标准正态分布表_机器学习
  15. 52单片机C语言如何用间接寻址,单片机要如何寻址?
  16. EF多表关联数据更新
  17. 【Alpha版本】项目测试
  18. π120M31 10Mbps双通道数字隔离器兼容代替ADuM1200BR
  19. Android桌面图标布局,android安装运行launcher并修改桌面图标
  20. 拉卡拉智能POS收单渠道前景如何?

热门文章

  1. 初步认识数据库:数据、数据库、数据库管理系统、数据库系统分别是什么?
  2. 已被Windows defender smartscreen阻止
  3. 【STM32篇】驱动MXL90614红外测温模块
  4. 为什么你会觉得苹果已无创新?耶稣已死,商人掌舵!!
  5. Cesium开发基础篇 | 02加载地形数据
  6. MySQL DELETE 操作后没有释放磁盘空间
  7. WRF后处理/Python处理nc数据与可视化/极坐标网格绘制(Cartopy、netcdf4)——以北极雪水当量数据为例
  8. android 游戏降低画质6,怎么改善Android游戏的画质?
  9. Python——模块:模块就是程序
  10. 补码加法器中低位进位信息是什么?