前面我介绍了可视化的一些方法以及机器学习在预测方面的应用,分为分类问题(预测值是离散型)和回归问题(预测值是连续型)(具体见之前的文章)。

从本期开始,我将做一个关于图像识别的系列文章,让读者慢慢理解python进行图像识别的过程、原理和方法,每一篇文章从实现功能、实现代码、实现效果三个方面进行展示。

实现功能:

Python搭建卷积神经网络进行图像二分类

实现代码:

import os
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
from collections import Counter
from sklearn.metrics import precision_recall_curve
from sklearn.metrics import roc_curve, auc
from sklearn.metrics import roc_auc_score
import itertools
from pylab import mpl
import seaborn as snsclass Solution():#==================读取图片=================================def read_image(self,paths):os.listdir(paths)filelist = []for root, dirs, files in os.walk(paths):for file in files:if os.path.splitext(file)[1] == ".png":filelist.append(os.path.join(root, file))return filelist#==================图片数据转化为数组==========================def im_array(self,paths):M=[]for filename in paths:im=Image.open(filename)im_L=im.convert("L")                #模式LCore=im_L.getdata()arr1=np.array(Core,dtype='float32')/255.0list_img=arr1.tolist()M.extend(list_img)return Mdef CNN_model(self,train_images, train_lables):# ============构建卷积神经网络并保存=========================model = models.Sequential()model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(128, 128, 1)))  # 过滤器个数,卷积核尺寸,激活函数,输入形状model.add(layers.MaxPooling2D((2, 2)))  # 池化层model.add(layers.Conv2D(64, (3, 3), activation='relu'))model.add(layers.MaxPooling2D((2, 2)))model.add(layers.Conv2D(64, (3, 3), activation='relu'))model.add(layers.Flatten())  # 降维model.add(layers.Dense(64, activation='relu'))  # 全连接层model.add(layers.Dense(2, activation='softmax'))  # 注意这里参数,我只有两类图片,所以是2.model.summary()  # 显示模型的架构model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])return modelif __name__=='__main__':Object1=Solution()# =================数据读取===============path1="D:\DCTDV2\dataset\\train\\"test1 = "D:\DCTDV2\dataset\\test\\"pathDir = os.listdir(path1)pathDir=pathDir[1:5]for a in pathDir:path2=path1+atest2=test1+afilelist_1=Object1.read_image(path1+"Norm")filelist_2=Object1.read_image(path2)filelist_all=filelist_1+filelist_2M=Object1.im_array(filelist_all)train_images=np.array(M).reshape(len(filelist_all),128,128)#输出验证一下(400, 128, 128)label=[0]*len(filelist_1)+[1]*len(filelist_2)train_lables=np.array(label)        #数据标签train_images = train_images[..., np.newaxis]        #数据图片print(train_images.shape)#输出验证一下(400, 128, 128, 1)# ===================准备测试数据==================filelist_1T = Object1.read_image(test1+"Norm")filelist_2T = Object1.read_image(test2)filelist_allT = filelist_1T + filelist_2TN = Object1.im_array(filelist_allT)dict_label = {0: 'norm', 1: 'IgaK'}test_images = np.array(N).reshape(len(filelist_allT), 128, 128)label = [0] * len(filelist_1T) + [1] * len(filelist_2T)test_lables = np.array(label)  # 数据标签test_images = test_images[..., np.newaxis]  # 数据图片print(test_images.shape)  # 输出验证一下(100, 128, 128, 1)# #===================训练模型=============model=Object1.CNN_model(train_images, train_lables)CnnModel=model.fit(train_images, train_lables, epochs=20)# model.save('D:\电池条带V2\model\my_model.h5')  # 保存为h5模型# tf.keras.models.save_model(model,"F:\python\moxing\model")#这样是pb模型# print("模型保存成功!")# history列表print(CnnModel.history.keys())font = {'family': 'Times New Roman','size': 12,}sns.set(font_scale=1.2)plt.plot(CnnModel.history['loss'])plt.title('model loss')plt.ylabel('loss')plt.xlabel('epoch')plt.savefig('D:\\DCTDV2\\result\\V1\\loss' + "\\" + '%s.tif' % a,bbox_inches='tight',dpi=600)plt.show()plt.plot(CnnModel.history['accuracy'])plt.title('model accuracy')plt.ylabel('accuracy')plt.xlabel('epoch')plt.savefig('D:\\DCTDV2\\result\\V1\\accuracy' + "\\" + '%s.tif' % a,bbox_inches='tight',dpi=600)plt.show()

实现效果:

由于数据为非公开数据,仅展示几个图像的效果,有问题可以后台联系我。

本人读研期间发表5篇SCI数据挖掘相关论文,现在在某研究院从事数据挖掘相关工作,对数据挖掘有一定的认知和理解,会不定期分享一些关于python机器学习、深度学习、数据挖掘基础知识与案例。

致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。

关注V订阅号:数据杂坛可在后台联系我获取相关数据集和源码,送有关数据分析、数据挖掘、机器学习、深度学习相关的电子书籍。

Python图像识别实战(四):搭建卷积神经网络进行图像二分类(附源码和实现效果)相关推荐

  1. 卷积神经网络-猫狗识别(附源码)

    一,项目描述 该项目将使用卷积神经网络算法,识别图片中的动物是猫还是狗 数据集地址:https://momodel.cn/explore/5efc77dbc018c95e69fb2a81?type=d ...

  2. Python-深度学习-学习笔记(13):keras搭建卷积神经网络(对二维数据进行一维卷积)

    Python-深度学习-学习笔记(13):keras搭建卷积神经网络(对二维数据进行一维卷积) 卷积神经网络进行图像分类是深度学习关于图像处理的一个应用,卷积神经网络的优点是能够直接与图像像素进行卷积 ...

  3. 【 卷积神经网络CNN 数学原理分析与源码详解 深度学习 Pytorch笔记 B站刘二大人(9/10)】

    卷积神经网络CNN 数学原理分析与源码详解 深度学习 Pytorch笔记 B站刘二大人(9/10) 本章主要进行卷积神经网络的相关数学原理和pytorch的对应模块进行推导分析 代码也是通过demo实 ...

  4. 【深度学习】卷积神经网络实现图像多分类的探索

    [深度学习]卷积神经网络实现图像多分类的探索 文章目录 1 数字图像解释 2 cifar10数据集踩坑 3 Keras代码实现流程 3.1 导入数据 3.2 浅层CNN 3.3 深层CNN 3.4 进 ...

  5. Python 实现图片格式转换,jpg\png\webp等,附源码

    Python 实现图片格式转换,jpg\png\webp等,附源码 需要使用 PIL库,但python 3是无法安装该库的,如果是python 3安装pillow库即可. 1.安装 python 2 ...

  6. 【图像处理】——Python实现图像特征提取BP神经网络实现图像二分类

    目录 一.图像特征提取 二.BP实现图像二分类 1.输入层.隐层.输出层结点个数设置 (1)one hot码(假设是n分类问题) (2)一个输出,输出层结点为1 一.图像特征提取 图像具有灰度特征.G ...

  7. 04【Verilog实战】SPI协议底层硬件接口设计(附源码RTL/TB)

    脚  本:makefile 工  具:vcs 和 verdi 写在前面 这个专栏的内容记录的是个人学习过程,博文中贴出来的代码是调试前的代码,方便bug重现. 调试后的程序提供下载,[下载地址] 发现 ...

  8. Netty实战:Springboot+Netty+protobuf开发高性能服务器 (附源码下载)

    Springboot-cli 开发脚手架系列 Netty系列:Springboot使用Netty集成protobuf开发高性能服务器 文章目录 Springboot-cli 开发脚手架系列 简介 1. ...

  9. Python图像识别实战(一):实现按数量随机抽取图像复制到另一文件夹(附源码和实现效果)

    前面我介绍了可视化的一些方法以及机器学习在预测方面的应用,分为分类问题(预测值是离散型)和回归问题(预测值是连续型)(具体见之前的文章). 从本期开始,我将做一个关于图像识别的系列文章,让读者慢慢理解 ...

最新文章

  1. Maven+mybatis教程
  2. mongodb全套配置
  3. Python数据可视化词云展示周董的歌
  4. python经典100例(41-60)
  5. OpenCV实现立体视觉的案例
  6. 没有电脑可以学习python_有没有适合初学者学习Python的方法?
  7. python心跳包原理_Python 用心跳(UDP包)探测不活动主机
  8. ATmega328p EEprom读写
  9. python移动文件_python 复制/移动文件
  10. 电脑版idm下载器好不好用?
  11. matlab 数值计算方法 pdf,《现代数值计算方法(MATLAB版)》习题解答.pdf
  12. js 万年历农历转阳历 方法_JS简单获取当前日期和农历日期的方法
  13. 有何特长及英语计算机水平怎么写,熟悉专业有何特长填写(范文篇).doc
  14. NLP 语义匹配:经典前沿方案整理
  15. Linux性能优化大杀器—平均负载率详解(鼓励收藏)
  16. 如何生成玫瑰?|数字艺术
  17. 自旋对于synchronized关键字的底层意义与价值分析:
  18. 代谢组学数据处理软件——NormalizeMets
  19. Reverse for 'xxx' not found. 'xxx' is not a valid view function or pattern name.问题的原因以及解决
  20. 第八章 连词(Les conjonction )

热门文章

  1. css过渡 取消过渡_CSS过渡
  2. QoS服务质量三DiffServ模型报文的标记及PHB
  3. 三、Diff-Serv模型
  4. ue4的右键菜单总是会点一下就消失,只能重启软件
  5. 【IT项目管理】学习笔记(一)
  6. matlab 深度学习黑暗图片画质增强
  7. 质量工具之PDPC法
  8. 微信小程序详细开发记录
  9. java计算机毕业设计科研成果管理系统设计与实现源码+mysql数据库+系统+lw文档+部署
  10. 8051单片机外扩ROM