这个时候测试集就要用到了,为了便于观察,我们这里先给测试集重命名,这样子,哪张图片分类错了,我们也比较好找。
重命名代码:

#!/usr/bin/python
# -*- coding:utf-8 -*-
import osouter_path = 'D:/flowers/test'
folderlist = os.listdir(outer_path)  # 列举文件夹for folder in folderlist:inner_path = os.path.join(outer_path, folder)total_num_folder = len(folderlist)  # 文件夹的总数print('total have %d folders' % (total_num_folder))filelist = os.listdir(inner_path)  # 列举图片i = 0for item in filelist:total_num_file = len(filelist)  # 单个文件夹内图片的总数if item.endswith('.jpg'):src = os.path.join(os.path.abspath(inner_path), item)  # 原图的地址dst = os.path.join(os.path.abspath(inner_path), str(folder) + '_' + str(i) + '.jpg')  # 新图的地址(这里可以把str(folder) + '_' + str(i) + '.jpg'改成你想改的名称)try:os.rename(src, dst)print'converting %s to %s ...' % (src, dst)i += 1except:continueprint'total %d to rename & converted %d jpgs' % (total_num_file, i)

随便打开测试集的,可以看到结果如下:

下面说下测试代码:
测试一整个文件夹的,这里的整个文件夹并不是指test文件夹,而是test文件夹下的五个子文件夹的任意一个,代码restall.py如下:

from PIL import Image
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
import model
#from input_data import get_files
import input_data
import os
import warnings
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
warnings.filterwarnings('ignore')#自己改最后面的sunflowers改成别的
img_dir = 'D:/test/sunflowers/'# 测试图片
def evaluate_one_image(image_array):with tf.Graph().as_default():BATCH_SIZE = 1N_CLASSES = 5image = tf.cast(image_array, tf.float32)image = tf.image.per_image_standardization(image)image = tf.reshape(image, [1, 64, 64, 3])logit = model.inference(image, BATCH_SIZE, N_CLASSES,1,0)logit = tf.nn.softmax(logit)x = tf.placeholder(tf.float32, shape=[64, 64, 3])logs_train_dir = 'D:/biye/save/train'saver = tf.train.Saver()with tf.Session() as sess:ckpt = tf.train.get_checkpoint_state(logs_train_dir)if ckpt and ckpt.model_checkpoint_path:global_step = ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1]saver.restore(sess, ckpt.model_checkpoint_path)else:print('No checkpoint file found')prediction = sess.run(logit, feed_dict={x: image_array})max_index = np.argmax(prediction)return max_index# ------------------------------------------------------------------------if __name__ == '__main__':roses=0tulips=0dandelion=0sunflowers=0daisy=0for name in os.listdir(img_dir):i=img_dir+nameimg = Image.open(i)imag = img.resize([64, 64])image = np.array(imag)if evaluate_one_image(image) == 0:print(i+'可能是玫瑰花')roses+=1elif evaluate_one_image(image) == 1:print (i+'可能是郁金香')tulips+=1elif evaluate_one_image(image) == 2:print(i+'可能是蒲公英')dandelion+=1elif evaluate_one_image(image) == 4:print(i+'有可能是雏菊')daisy+=1elif evaluate_one_image(image) == 3:print(i+'可能是向日葵')sunflowers+=1print('玫瑰花:%d 郁金香:%d' %(roses,tulips))print('蒲公英:%d 雏菊:%d 向日葵:%d' %(dandelion,daisy,sunflowers))

还有一个测试单张图片的testone.py

#!/bin/pythonimport wx
# from test import evaluate_one_image
from PIL import Image
import numpy as np
import tensorflow as tf
import model
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'def evaluate_one_image(image_array):with tf.Graph().as_default():BATCH_SIZE = 1N_CLASSES = 5image = tf.cast(image_array, tf.float32)image = tf.image.per_image_standardization(image)image = tf.reshape(image, [1, 64, 64, 3])logit = model.inference(image, BATCH_SIZE, N_CLASSES,1,0)logit = tf.nn.softmax(logit)x = tf.placeholder(tf.float32, shape=[64, 64, 3])logs_train_dir = 'D:/biye/save/train'saver = tf.train.Saver()with tf.Session() as sess:ckpt = tf.train.get_checkpoint_state(logs_train_dir)if ckpt and ckpt.model_checkpoint_path:global_step = ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1]saver.restore(sess, ckpt.model_checkpoint_path)else:print('No checkpoint file found')prediction = sess.run(logit, feed_dict={x: image_array})max_index = np.argmax(prediction)return max_indexclass HelloFrame(wx.Frame):def __init__(self,*args,**kw):super(HelloFrame,self).__init__(*args,**kw)pnl = wx.Panel(self)self.pnl = pnlst = wx.StaticText(pnl, pos=(200, 0))font = st.GetFont()font.PointSize += 10font = font.Bold()st.SetFont(font)# 选择图像文件按钮btn = wx.Button(pnl, -1, "select")btn.Bind(wx.EVT_BUTTON, self.OnSelect)self.makeMenuBar()self.CreateStatusBar()def makeMenuBar(self):menuBar = wx.MenuBar()self.SetMenuBar(menuBar)def OnSelect(self, event):wildcard = "image source(*.jpg)|*.jpg|" \"Compile Python(*.pyc)|*.pyc|" \"All file(*.*)|*.*"dialog = wx.FileDialog(None, "Choose a file", os.getcwd(),"", wildcard, wx.ID_OPEN)if dialog.ShowModal() == wx.ID_OK:print(dialog.GetPath())img = Image.open(dialog.GetPath())imag = img.resize([64, 64])image = np.array(imag)print(evaluate_one_image(image))if evaluate_one_image(image) == 0:result = ('这可能是玫瑰花')elif evaluate_one_image(image) == 1:result = ('这可能是郁金香')elif evaluate_one_image(image) == 2:result = ('这可能是蒲公英')elif evaluate_one_image(image) == 4:result = ('这有可能是雏菊')elif evaluate_one_image(image) == 3:result = ('这可能是向日葵')# result =evaluate_one_image(image)result_text = wx.StaticText(self.pnl, label=result, pos=(320, 0))font = result_text.GetFont()font.PointSize += 8result_text.SetFont(font)self.initimage(name= dialog.GetPath())# 生成图片控件def initimage(self, name):imageShow = wx.Image(name, wx.BITMAP_TYPE_ANY)sb = wx.StaticBitmap(self.pnl, -1, imageShow.ConvertToBitmap(), pos=(0,30), size=(600,600))return sbif __name__ == '__main__':app = wx.App()frm = HelloFrame(None, title='基于卷积神经网络的花卉图像识别', size=(600,600))frm.Show()app.MainLoop()

所有的代码就都列出来了。原本github上的源代码准确率只有70左右,经过数据增强后(也就是训练集由2500张变成7500张后),准确率提高了很多,我的是到了80了。
源码的dropout的代码注释了,也就是没用到,我是用到了,还调了最合适的也就是0.45.这里要注意训练的时候是0.45.但是验证集和测试集上都是1.用了这个准确率到了85.左右了。
其实还可以再高的,如果你还想提升,可以考虑调参,加几层网络,毕竟我的网络结构太简单了。数据增强有很多方式,你也可以试试别的。

运行代码的顺序是先运行数据增强的代码----裁剪大小的代码(两次)------训练的代码----重命名代码(也可以不要)----测试代码

图像分类之花卉图像分类(五)测试数据相关推荐

  1. 图像分类之花卉图像分类(一)数据增强

    网上有很多图像分类的代码,有很多是必须要在GPU上面才能跑的,因为我想在自己的电脑跑,所以很多都是不能用的,而且说实话很多对我这个小白来说,都很难看懂.所以我找了一个就是之间用CNN写的神经卷积模型用 ...

  2. 图像分类之花卉图像分类(四)训练模型

    本来我想用tensorbaord来观察LOSS曲线变化的,但是我代码改得不对,如果有小伙伴改出来了,如果可以的话可以告诉我,我懒得改了.下面代码也是注意改成自己的路径 # 导入文件 import os ...

  3. 【实验课程】花卉图像分类实验

    转载地址:https://bbs.huaweicloud.com/forum/thread-80033-1-1.html 作者:yangyaqin 实验介绍 随着电子技术的迅速发展,人们使用便携数码设 ...

  4. 基于SIFT和颜色特征的花卉图像分类

    基于SIFT特征和颜色直方图的花卉图像分类 摘 要 课程实验提取图片的SIFT特征,通过k均值聚类的方法将所有训练图片的特征聚类为800类,以每个类出现的频率构建特征向量(又称为词袋模型),同时,通过 ...

  5. 【项目实战课】基于Pytorch的InceptionNet花卉图像分类实战

    欢迎大家来到我们的项目实战课,本期内容是<基于Pytorch的InceptionNet花卉图像分类实战>.所谓项目课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题,进行 ...

  6. 深度学习之图像分类(二十五)-- S2MLPv2 网络详解

    深度学习之图像分类(二十五)S2MLPv2 网络详解 目录 深度学习之图像分类(二十五)S2MLPv2 网络详解 1. 前言 2. S2MLPv2 2.1 S2MLPv2 Block 2.2 Spat ...

  7. 【图像分类】 关于图像分类中类别不平衡那些事

    欢迎大家来到图像分类专栏,类别不平衡时是很常见的问题,本文介绍了类别不平衡图像分类算法的发展现状,供大家参考学习. 作者&编辑 | 郭冰洋 1 简介 小伙伴们在利用公共数据集动手搭建图像分类模 ...

  8. 花卉识别--五个类别的检测

    花卉识别–五个类别的检测 文章目录 花卉识别--五个类别的检测 一.数据集的观察与查看 二.将数据集分为data_train(训练集)和data_test(测试集) 三.明确网络流程.建立网络结构 四 ...

  9. 基于深度学习模型的花卉图像分类代码_华为不止有鸿蒙!教你快速入门华为免编程深度学习神器ModelArts...

    引言: 本文介绍利用华为ModelArts进行深度学习的图像分类任务,不用一行代码. 今年8月9日,在华为史上规模最大的开发者大会上,华为正式发布全球首个基于微内核的全场景分布式OS--鸿蒙操作系统( ...

最新文章

  1. SAP MM 外部采购退货的ARM功能实在是鸡肋?
  2. base--AuditResult
  3. linux中强大且常用命令:find、grep
  4. 工厂模式 — 在项目中的用法
  5. ZJOI2008皇帝的烦恼
  6. 中国 AI 开发者真实现状:写代码这条路,会走多久?
  7. 不读取nan行_一个参数一个Excel表,让你玩转Pandas中read_excel()表格读取!
  8. python find函数原理_Opencv findcontours函数原理,以及python numpy实现
  9. vue axios封装 类方法
  10. ESMap三维地图开发流程
  11. 开源代码学习之persepolis【二】
  12. 前端面试题 Doctype作用是什么?严格模式与混杂模式如何区分?他们之间有何意义?
  13. Non-local的一些理解
  14. VS插件--Resharper
  15. android 自定义关机界面,怎么定制Android关机界面
  16. 闭环控制(自动控制理论)
  17. uGUI学习篇: UI元素的渲染与性能
  18. uniapp从企业微信、微信公众号获取地址栏的参数
  19. 基于深度学习特征的植物病虫害检测
  20. pidgin连接 gtalk

热门文章

  1. 云计算技术的产生、概念、原理、应用和前景
  2. 【51Nod1815】调查任务
  3. android无障碍模式读取web,W3C 移动端无障碍 | Web Accessibility Initiative (WAI) | W3C
  4. 针对图像的一阶导数和二阶导数
  5. 树莓派python识别二维码_Zbar树莓派二维码(QR)识别(基于图片)
  6. 二维码WIFI自动连接生成格式
  7. 人工智能是用计算机模拟人的智能特别是模拟,张钹院士:人工智能是让计算机模拟人的三种功能...
  8. WebDav多平台挂载(Linux+Windows+安卓+IOS)
  9. SYLK文件中的XML宏可绕过Mac版Office的安全限制
  10. 二叉树几种遍历算法的非递归实现