项目概述

把一堆苹果、香蕉的图片交给模型训练,让它判断这张图是苹果还是香蕉


说明: 环境要用到Anaconda 就是要安装下面的包,本博客只写了数据封装和模型搭建的代码。

数据集封装

import os
import cv2
import numpy as np# 数据集封装
def getFileList(dir, Filelist, ext=None):"""来源 csdn 钱彬 (Qian Bin)获取文件夹及其子文件夹中文件列表输入 dir:文件夹根目录输入 ext: 扩展名返回: 文件路径列表"""newDir = dirif os.path.isfile(dir):if ext is None:Filelist.append(dir)else:if ext in dir[-3:]:Filelist.append(dir)elif os.path.isdir(dir):for s in os.listdir(dir):newDir = os.path.join(dir, s)getFileList(newDir, Filelist, ext)return Filelistdef get_train_test_data(path):# 获取电脑里面的训练集样本,封装成数据data=[[], []]label=[[], []]for i in range(0,2):imglist = getFileList(path[i], [], "jpg")print('本次执行检索到 ' + str(len(imglist)) + ' 张训练图像')apple_list = [[], []]banana_list = [[], []]for imgpath in imglist:imgname = os.path.splitext(os.path.basename(imgpath))[0]img = cv2.imread(imgpath)# 把彩图转化成灰度图img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)img = cv2.resize(img,(28,28))# 添加到训练集if imgname[:5] == "apple":apple_list[i].append(img)else:banana_list[i].append(img)# 标签:苹果用0表示  香蕉用1表示apple_label = [0] * len(apple_list[i])banana_label = [1] * len(banana_list[i])data[i] = np.array(apple_list[i] + banana_list[i])label[i] = np.array(apple_label + banana_label)return data[0], label[0], data[1], label[1]if __name__ == '__main__':# 本次执行检索到 945 张训练图像# 本次执行检索到 351 张训练图像# dirlist = ["./fruit_data/Training", "./fruit_data/Test"]# x_train, y_train, x_test, y_test = get_train_test_data(dirlist)# print(x_train.shape)    # (945, 28, 28)# print(x_test.shape)     # (351, 28, 28)pass

模型搭建

from keras.utils import to_categorical
from keras.models import Sequential
from keras.layers import Dense, Conv2D, MaxPooling2D, Flatten
# 数据集 需要自己封装
import get_fruit_data2   # 创建卷积神经网络模型 训练数据集
def load_datasets():# 数据集返回的是 数据 和 标签# x_train,y_train = get_fruit_data.get_train_test_data("./fruit_data/Training")# x_test,y_test = get_fruit_data.get_train_test_data("./fruit_data/Test")dirlist = ["./fruit_data/Training", "./fruit_data/Test"]x_train, y_train, x_test, y_test = get_fruit_data2.get_train_test_data(dirlist)# 图像: 张 行 列 通道    astype 归一化x_train = x_train.reshape(x_train.shape[0], 28, 28, 1).astype('float') / 255x_test = x_test.reshape(x_test.shape[0], 28, 28, 1).astype('float') / 255# 对训练用标签进行one-hot编码y_train = to_categorical(y_train, num_classes=10)return x_train, x_test, y_train, y_testdef model_create():# 创建神经网络模型model = Sequential()# 添加卷积层: 卷积核个数,卷积核大小,输入维度,激活函数model.add(Conv2D(filters=32, kernel_size=(5,5), input_shape=(28,28,1), activation='relu'))# 添加池化层model.add(MaxPooling2D())model.add(Conv2D(filters=64, kernel_size=(5,5), activation='relu'))model.add(MaxPooling2D())# 一维化model.add(Flatten())model.add(Dense(units=1024, activation='relu'))model.add(Dense(units=512, activation='relu'))model.add(Dense(units=10, activation='softmax'))model.compile(optimizer='adam', loss='mse')return modeldef model_train(model, x_train, y_train):print("Train..................")model.fit(x_train, y_train, batch_size=20, epochs=2, verbose=1)def model_test(model, x_test, y_test):print("Test.................")y_test = to_categorical(y_test, num_classes=10)# 验证模型,得到损失值loss = model.evaluate(x_test, y_test, batch_size=20, verbose=1)print("test loss: ", loss)if __name__ == '__main__':# 加载数据集x_train, x_test, y_train, y_test = load_datasets()# 创建卷积神经网络model = model_create()# 训练model_train(model, x_train, y_train)# 验证model_test(model, x_test, y_test)# 预测y_pre = model.predict_classes(x_test)print("pre : ", y_pre)print("true: ", y_test)# 保存模型  .h5就是模型的后缀名model.save("./fruit_train_model.h5")

测试模型

import cv2
from keras.models import load_model# 测试模型
def test_fruit(fruit_path):# 获取本地图片img = cv2.imread(fruit_path)# 把彩图转化成灰度图img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)img = cv2.resize(img, (28, 28))# 把图片转化成训练集的shapeimg = img.reshape(1, 28, 28, 1)img = img.astype('float') / 255# 加载模型model = load_model("./fruit_train_model.h5")# 预测y_pre = model.predict_classes(img)# print("Pre: ", y_pre)return y_pre[0]if __name__ == '__main__':# 导入一张苹果的图片或者香蕉的图片# y_pre = test_fruit("./fruit_data/Test/apple_00018.jpg")# 0表示苹果  1表示香蕉# print(y_pre)pass

卷积神经网络模型搭建(水果识别项目)相关推荐

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

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

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

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

  3. PyTorch | (4)神经网络模型搭建和参数优化

    PyTorch | (1)初识PyTorch PyTorch | (2)PyTorch 入门-张量 PyTorch | (3)Tensor及其基本操作 PyTorch | (4)神经网络模型搭建和参数 ...

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

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

  5. 卷积神经网络模型解读及数学原理 ——翻拍图片识别

    目录 一.需求背景 二.知识储备 1.深度学习 2.卷积神经网络 3.PyTorch框架 4.张量 5.梯度下降法 三.模型解读 1.输入层 2.隐藏层 1)卷积层 2)激活函数 3)池化层 4)流向 ...

  6. 基于tensorflow的MNIST手写字识别(一)--白话卷积神经网络模型

    一.卷积神经网络模型知识要点卷积卷积 1.卷积 2.池化 3.全连接 4.梯度下降法 5.softmax 本次就是用最简单的方法给大家讲解这些概念,因为具体的各种论文网上都有,连推导都有,所以本文主要 ...

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

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

  8. TensorFlow精进之路(三):两层卷积神经网络模型将MNIST未识别对的图片筛选出来

    1.概述 自从开了专栏<TensorFlow精进之路>关于对TensorFlow的整理思路更加清晰.上两篇讲到Softmax回归模型和两层卷积神经网络模型训练MNIST,虽然使用神经网络能 ...

  9. 图神经网络(一)DGL框架搭建GCN图卷积神经网络模型

    一.DGL DGL是基于pytorch开发的一个专门用于图神经网络模型搭建的框架,到现在为止,DGL已经高度封装了如GCN.GraphSage.GAT等常见的图神经网络模型,可以直接调用,比较方便,当 ...

最新文章

  1. proxmox 宕机转义_Proxmox+Ceph的HCI环境搭建
  2. 源码分析-GLSurfaceView的内部实现
  3. Varnish使用小结
  4. Leangoo 6.2.6 版发布
  5. linux创建隐藏进程6,在Linux 2.6内核下实现进程隐藏
  6. *[hackerrank]Maximizing XOR
  7. oracle数据库克隆工具,OracleCopier
  8. python如何输出百分比的数字_Python如何输出百分比
  9. 网络:NAT使用场景
  10. OpenCV--fstream格式化读取坐标数据存为vector
  11. 如何做漂亮实用的UI界面?UI/UX设计模板,帮你入手!
  12. Web服务器Nginx多方位优化策略
  13. 13个坏习惯让IT工作者中过劳(转)
  14. pl/sql developer安装与配置
  15. 【学堂在线数据挖掘:理论方法笔记】第一天(3.17)
  16. Atitit prgrmlan 编程语言主题列表 \0 it impttech topic\prgrmlan topic编程语言专题\AOP拦截器 表达式写法.docx \0 it impttec
  17. 中国IP网通IP地址段
  18. c语言 素数环,C语言素数环 DFS +回溯
  19. loadRunner12压力测试工具使用流程
  20. 时间管理——帕累托法则(二八定律)

热门文章

  1. 美国2020年攻破艾滋病_2020年美国和欧洲的游戏状况
  2. 微软MSDN原版系统下载
  3. 如何做一名成功的业务员 【转帖】
  4. 判断设置了css省略号样式的元素是否出现了省略号
  5. 小程序根据地址信息获取经纬度导航功能实现
  6. 基于android o版本单手模式实现
  7. educoder 国标码转区位码实验(详细)
  8. vue中实现文字间加空格的方法
  9. 亚马逊关键词工具网站梳理
  10. Keras Image Data Augmentation 各参数详解