卷积神经网络模型搭建(水果识别项目)
项目概述
把一堆苹果、香蕉的图片交给模型训练,让它判断这张图是苹果还是香蕉
说明: 环境要用到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
卷积神经网络模型搭建(水果识别项目)相关推荐
- keras卷积处理rgb输入_CNN卷积神经网络模型搭建
前言 前段时间尝试使用深度学习来识别评测过程中的图片,以减少人力成本.目前是在深度学习框架Keras(后端使用TensorFlow)下搭建了一个CNN卷积神经网络模型,下面就如何搭建一个最简单的数字图 ...
- 基于Tensorflow的卷积神经网络模型实现水果分类识别(实践案例)
前言 写这篇博客的目的,就是记录下实现Fruit Dataset Image Classification Network的过程,所以从头开始写.这里感谢下会飞的小咸鱼提供了思路,文章内容主要翻译自K ...
- PyTorch | (4)神经网络模型搭建和参数优化
PyTorch | (1)初识PyTorch PyTorch | (2)PyTorch 入门-张量 PyTorch | (3)Tensor及其基本操作 PyTorch | (4)神经网络模型搭建和参数 ...
- 采用keras深度学习框架搭建卷积神经网络模型实现垃圾分类,基于树莓派上进行实时视频流的垃圾识别源代码
一.项目概述 简介:该垃圾分类项目主要在于对各种垃圾进行所属归类,本次项目采用keras深度学习框架搭建卷积神经网络模型实现图像分类,最终移植在树莓派上进行实时视频流的垃圾识别. 前期:主要考虑PC端 ...
- 卷积神经网络模型解读及数学原理 ——翻拍图片识别
目录 一.需求背景 二.知识储备 1.深度学习 2.卷积神经网络 3.PyTorch框架 4.张量 5.梯度下降法 三.模型解读 1.输入层 2.隐藏层 1)卷积层 2)激活函数 3)池化层 4)流向 ...
- 基于tensorflow的MNIST手写字识别(一)--白话卷积神经网络模型
一.卷积神经网络模型知识要点卷积卷积 1.卷积 2.池化 3.全连接 4.梯度下降法 5.softmax 本次就是用最简单的方法给大家讲解这些概念,因为具体的各种论文网上都有,连推导都有,所以本文主要 ...
- Keras之CNN:基于Keras利用cv2建立训练存储卷积神经网络模型(2+1)并调用摄像头进行实时人脸识别
Keras之CNN:基于Keras利用cv2建立训练存储卷积神经网络模型(2+1)并调用摄像头进行实时人脸识别 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 # -*- codin ...
- TensorFlow精进之路(三):两层卷积神经网络模型将MNIST未识别对的图片筛选出来
1.概述 自从开了专栏<TensorFlow精进之路>关于对TensorFlow的整理思路更加清晰.上两篇讲到Softmax回归模型和两层卷积神经网络模型训练MNIST,虽然使用神经网络能 ...
- 图神经网络(一)DGL框架搭建GCN图卷积神经网络模型
一.DGL DGL是基于pytorch开发的一个专门用于图神经网络模型搭建的框架,到现在为止,DGL已经高度封装了如GCN.GraphSage.GAT等常见的图神经网络模型,可以直接调用,比较方便,当 ...
最新文章
- proxmox 宕机转义_Proxmox+Ceph的HCI环境搭建
- 源码分析-GLSurfaceView的内部实现
- Varnish使用小结
- Leangoo 6.2.6 版发布
- linux创建隐藏进程6,在Linux 2.6内核下实现进程隐藏
- *[hackerrank]Maximizing XOR
- oracle数据库克隆工具,OracleCopier
- python如何输出百分比的数字_Python如何输出百分比
- 网络:NAT使用场景
- OpenCV--fstream格式化读取坐标数据存为vector
- 如何做漂亮实用的UI界面?UI/UX设计模板,帮你入手!
- Web服务器Nginx多方位优化策略
- 13个坏习惯让IT工作者中过劳(转)
- pl/sql developer安装与配置
- 【学堂在线数据挖掘:理论方法笔记】第一天(3.17)
- Atitit prgrmlan 编程语言主题列表 \0 it impttech topic\prgrmlan topic编程语言专题\AOP拦截器 表达式写法.docx \0 it impttec
- 中国IP网通IP地址段
- c语言 素数环,C语言素数环 DFS +回溯
- loadRunner12压力测试工具使用流程
- 时间管理——帕累托法则(二八定律)