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

news2024/12/29 9:37:11

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

从本期开始,我将做一个关于图像识别的系列文章,让读者慢慢理解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 sns

class 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")                #模式L
            Core=im_L.getdata()
            arr1=np.array(Core,dtype='float32')/255.0
            list_img=arr1.tolist()
            M.extend(list_img)
        return M

    def 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 model

if __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+a
        test2=test1+a
        filelist_1=Object1.read_image(path1+"Norm")
        filelist_2=Object1.read_image(path2)
        filelist_all=filelist_1+filelist_2
        M=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_2T
        N = 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订阅号:数据杂坛可在后台联系我获取相关数据集和源码,送有关数据分析、数据挖掘、机器学习、深度学习相关的电子书籍。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108413.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大疆A3飞控使用|飞控配置

大疆A3飞控使用|飞控配置大疆A3飞控介绍总体特性飞行特性外围设备保护功能SDK拓展拓展功能A3 飞控使用配置连接飞机基本设置机架安装遥控器电调动力配置感度电池控制参数调试基础感度动力带宽高级感度灵敏度控制器性能参数大疆A3飞控介绍 全新A3系列飞控系统结合安全可靠和精准…

【虹科案例】用于超高磁场的虹科 digitizerNETBOX——高采样率和完全同步采样

应用背景 国际 MegaGauss 科学实验室是东京大学固态物理研究所 (ISSP) 的一部分。实验室的目的是研究固态材料(如半导体、磁性材料、金属、绝缘体、超导材料)在超高磁场下的物理特性,这些领域还包括研究新材料并控制其阶段和功能。实验室脉冲…

百度工程师带你体验引擎中的nodejs

作者 | 糖果candy 导读 如果你是一个前端程序员,你不懂得像PHP、Python或Ruby等动态编程语言,然后你想创建自己的服务,那么Node.js是一个非常好的选择。 Node.js 是运行在服务端的 JavaScript,如果你熟悉Javascript,那…

【Kotlin 协程】Flow 异步流 ③ ( 冷流 | 流被收集时运行 | 流的连续性 )

文章目录一、冷流 ( 流被收集时运行 )二、流的连续性一、冷流 ( 流被收集时运行 ) Flow 异步流 的 构建器函数 flow 函数 中的 代码 , 在 调用 Flow#collect 函数 时 , 也就是在 Flow 异步流 收集元素时 , 才会 执行 flow 构建器 中的代码 ; 这种机制的异步流 称为 冷流 ; 代…

移动WEB开发之响应式布局--Bootstrap栅格系统

栅格系统简介 栅格系统英文为“grid systems”,也有人翻译为“网格系统”,它是指将页面布局划分为等宽的列,然后通过列数 的定义来模块化页面布局。 Bootstrap 提供了一套响应式、移动设备优先的流式栅格系统,随着屏幕或视口(vi…

spring-statemachine状态机梳理

目录 一、基本回顾 1、为什么要用状态机 2、什么是状态机 3、状态机可归纳为4个要素 4、对应Spring StateMachine的核心步骤 5、简单例子 添加maven依赖 定义状态枚举和事件枚举 完成状态机的配置 简单测试一下 添加Listener 监听器,当状态变更时,触发方…

1. SpringMVC概述与入门

1. SpringMVC简介 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架优点 使用简单,开发便捷(相比于Servlet)灵活性强 2. 入门案例 2.1 实现步骤分析 1 创建web工程(Maven结构) 2 设置tomcat服务器,加…

Qt属性系统(Qt Property System)

Qt提供了巧妙的属性系统,它与某些编译器支持的属性系统相似。然而,作为平台和编译器无关的库,Qt不能够依赖于那些非标准的编译器特性,比如__property 或者 [property]。Qt的解决方案能够被任何Qt支持的平台下的标准C编译器支持。它…

Kafka工作流程简介

消息传递模式简介: 一个消息系统负责将数据从一个应用程序传递到另外一个应用程序中,应用程序只关注数据,无需关注数据在多个应用之间是如何传递的。 分布式消息传递基于可靠的消息队列,在客户端应用和消息系统之间异步传递消息。 消息传递有…

MySQL面试常问问题(日志) —— 赶快收藏

目录 1.MySQL日志文件有哪些?分别介绍下作用? 2.binlog和redo log有什么区别? 3.一条更新语句怎么执行的了解吗? 4.那为什么要两阶段提交呢? 5.redo log怎么刷入磁盘的知道吗? 1.MySQL日志文件有哪些&…

Typora配合PicGo阿里云图床配置

写博客的时候,刚开始直接在各大平台上直接写,后来还是觉得不太方便,需要在各大平台之间来回切换。于是就改用Typora,但是有个问题就是图片的处理,只能放在本地。想要发布到各大平台,就需要图床。本文结合阿…

2022年安徽最新水利水电施工安全员模拟试题及答案

百分百题库提供水利水电施工安全员考试试题、水利水电施工安全员考试预测题、水利水电施工安全员考试真题、水利水电施工安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 15.围堰工程可以直接判定为生产安全重大事故隐…

【UE4 第一人称射击游戏】02-玩家健康和护甲

步骤: 1.在“ThirdPersonCharacter”中添加两个浮点变量“Health”和“Armor” 将默认值设为1.0,表示默认100% 2.新建一个控件蓝图,命名为“FPSHUD” 打开“FPSHUD”,添加两个进度条,分别表示当前的生命值和护甲量 调…

InnoDB架构体系

2、InnoDB架构体系 2.1、内存结构 2.1.1、buffer pool InnoDB内存缓存区,使用空间换时间的思想,给数据做了一个缓存。把热点的数据存储在内存中,减少IO次数,提高效率。 show variables like %innodb_buffer_pool%;buffer pool …

基于polar码和SCMA的多用户检测的联合检测译码matlab仿真,polar采用SCAN软译码,SCMA用MPA算法

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 构造的核心是通过信道极化(channel polarization)处理,在编码侧采用方法使各个子信道呈现出不同的可靠性,当码长持续增加时,部分信道将…

【C语言】初阶习题

目录 1.图案问题 2、时分秒转换 3、打印1-100之间所有3的倍数的数字 4、打印100~200之间的素数 5、给定两个数,求这两个数的最大公约数 6、在屏幕上输出9*9乘法口诀表 7、计算1/1-1/21/3-1/41/5 …… 1/99 - 1/100 的值,打印出结果 8、二分查找 …

说明DBCO-PEG-SH二苯并环辛炔-聚乙二醇-巯基科研试剂材料,DBCO-PEG-SH结构式

结构式 英文:DBCO-PEG-SH,DBCO-PEG-Thiol 中文:二苯并环辛炔-聚乙二醇-巯基 溶剂:溶于水、DMSO等常规有机溶剂 性状:液体/固体白色或淡黄色粉末,取决于分子量 用途范围:广泛应用于医药、生物…

一文搞懂Linux下并制作环形缓冲区

1.环形缓冲区log_buf[]又是存在内核的哪个文件呢? 位于/proc/kmsg里,所以除了dmesg命令查看,也可以使用cat /proc/kmsg来查看 2.但是,dmesg命令和cat /proc/kmsg有所不同 2.1 dmesg命令 每次使用,都会打印出环形缓冲区的所有信息 2.2 cat /proc/kmsg 只会打印…

项目管理中,进度计划是摆设吗?

1、忽视进度计划 项目管理中,有的人认为进度计划是摆设,不重视计划,只是为了满足合同工期,做给客户看,因此草率的编制进度计划。 在通过客户要求后,就将计划搁置在一边,这就导致后期在执行任务…

科班演员陶奕菱亮相海南电影节:人生没有白走的路,每一步都算数

今天的记忆是带着海水的味道………”12月18日,在年末岁尾之际,徽风皖韵熏陶下成长的新生代演员陶奕菱再次来到海南三亚,受邀参加第四届海南岛国际电影节,迫不及待地跑向沙滩面朝大海,感受多姿多彩的魅力三亚。 优雅端…