使用Python 机器学习-5-Python Mini Project–使用深度学习进行乳腺癌分类

一、前言

该文章仅作为个人学习使用

二、正文

项目源代码:Python 项目 - 使用深度学习进行乳腺癌分类 - DataFlair (data-flair.training)

数据集:乳腺组织病理学图像 |卡格尔 (kaggle.com)

Python 中的乳腺癌分类项目

了解 Python 中乳腺癌分类项目中使用的术语

什么是深度学习?

深度学习是一种密集的机器学习方法,其灵感来自人脑及其生物神经网络的工作原理。深度神经网络、递归神经网络、卷积神经网络和深度信念网络等架构由多层组成,供数据在最终生成输出之前通过。深度学习有助于改进人工智能,使其许多应用成为可能;它应用于计算机视觉、语音识别、自然语言处理、音频识别和药物设计等许多此类领域。

什么是Keras?

Keras 是一个用 Python 编写的开源神经网络库。它是一个高级 API,可以在 TensorFlow、CNTK 和 Theano 之上运行。Keras 旨在实现快速实验和原型设计,同时在 CPU 和 GPU 上无缝运行。它是用户友好的、模块化的和可扩展的。

乳腺癌分类 – 目标

在 IDC 数据集上构建乳腺癌分类器,该分类器可以准确地将组织学图像分类为良性或恶性。

乳腺癌分类 – 关于 Python 项目

在这个 python 项目中,我们将构建一个分类器来训练 80% 的乳腺癌组织学图像数据集。其中,我们将保留 10% 的数据进行验证。使用 Keras,我们将定义一个 CNN(卷积神经网络),将其命名为 CancerNet,并在我们的图像上对其进行训练。然后,我们将推导出一个混淆矩阵来分析模型的性能。

IDC 是浸润性导管癌;在乳腺导管中发展并侵入乳腺导管外的纤维或脂肪乳腺组织的癌症;它是最常见的乳腺癌形式,占所有乳腺癌诊断的 80%。组织学是对组织微观结构的研究。

数据集

我们将使用 Kaggle 的 IDC_regular 数据集(乳腺癌组织学图像数据集)。该数据集包含 2,77,524 个大小为 50×50 的斑块,这些斑块是从 162 张以 40 倍扫描的乳腺癌标本的整个载玻片图像中提取的。其中,IDC 检测结果为阴性 1,98,738 人,78,786 人检测呈阳性。该数据集在公共领域可用,您可以在此处下载。为此,您至少需要 3.02GB 的磁盘空间。

此数据集中的文件名如下所示:

8863_idx5_x451_y1451_class0

这里,8863_idx5 是患者 ID,451 和 1451 是作物的 x 和 y 坐标,0 是类标签(0 表示没有 IDC)。

先决条件

您需要安装一些 python 包才能运行此高级 python 项目。你可以用 pip- 来做到这一点

pip install numpy opencv-python pillow tensorflow keras imutils scikit-learn matplotlib

Python 高级项目的步骤 – 乳腺癌分类

1. 下载此 zip。在您喜欢的位置解压缩,到达那里。

截图:

乳腺癌检测蟒蛇项目

2. 现在,在内部乳腺癌分类目录中,创建目录数据集 - 在此目录中,创建原始目录:

mkdir 数据集
mkdir 数据集\原始

3. 下载数据集。

4. 解压原始目录下的数据集。要观察此目录的结构,我们将使用 tree 命令:

cd 乳腺癌分类\乳腺癌分类\数据集\原始

输出截图:

Python 中的原始结构项目

我们为每个患者 ID 提供了一个目录。在每个这样的目录中,我们都有 0 和 1 目录,用于具有良性和恶性内容的图像。

config.py:

这包含了构建数据集和训练模型所需的一些配置。您可以在 cancernet 目录中找到它。

导入操作系统
INPUT_DATASET = “数据集/原始”
BASE_PATH = “数据集/IDC”
TRAIN_PATH = 操作系统。路径9月join([BASE_PATH, “训练”])
VAL_PATH = 操作系统。路径9月join([BASE_PATH, “验证”])
TEST_PATH = 操作系统。路径9月join([BASE_PATH, “测试”])
TRAIN_SPLIT = 0.8
VAL_SPLIT = 0.1

截图:

乳腺癌分类 - Python Project

在这里,我们声明输入数据集的路径 (datasets/original)、新目录的路径 (datasets/idc) 以及使用基本路径的训练、验证和测试目录的路径。我们还声明整个数据集的 80% 将用于训练,其中 10% 将用于验证。

build_dataset.py:

这会将我们的数据集按上述比例分为训练集、验证集和测试集——80% 用于训练(其中 10% 用于验证),20% 用于测试。使用 Keras 的 ImageDataGenerator,我们将提取批量图像,以避免一次在内存中为整个数据集腾出空间。

从 cancernet 导入配置
从 imutils 导入路径
导入随机、shutil、操作系统
originalPaths=listpaths.list_imagesconfig.INPUT_DATASET))
随机。种子7)
随机。shuffle原始路径)
index=intlenoriginalPaths*配置。TRAIN_SPLIT)
trainPaths=originalPaths[:index]
testPaths=originalPaths[索引:]
index=intlentrainPaths*config。VAL_SPLIT)
valPaths=trainPaths[:index]
trainPaths=trainPaths[index:]
datasets=[(“training”, trainPaths, config.TRAIN_PATH
(“validation”, valPaths, config.VAL_PATH
(“testing”、testPaths、配置。TEST_PATH)
]
forsetType, originalPaths, basePath 数据集中:
printf'构建 {setType} set')
如果不是 OS。路径存在basePath):
printf'构建目录 {base_path}')
操作系统。makedirsbasePath))
对于 originalPaths 中的 path
file=路径。splitos.路径9月)[-1]
标签=文件[-5-4]
labelPath=os。路径9月join([basePath,label])
如果不是 OS。路径存在labelPath):
广告

printf'构建目录 {labelPath}')

操作系统。makedirslabelPath)
newPath=os。路径9月join([labelPath, 文件])
舒蒂尔。copy2输入路径, newPath)

截图:

Python 机器学习项目

在这里,我们将从 config、imutils、random、shutil 和 os 导入。我们将构建图像的原始路径列表,然后对列表进行随机排序。然后,我们通过将此列表的长度乘以 0.8 来计算索引,以便我们可以对该列表进行切片以获得训练和测试数据集的子列表。接下来,我们进一步计算一个指数,将 10% 的列表用于训练数据集进行验证,并将其余部分保留用于训练本身。

现在,数据集是一个包含元的列表,用于提供有关训练集、验证集和测试集的信息。它们保存每个路径和基本路径。对于此列表中的每个 setType、路径和基本路径,我们将打印“构建测试集”。如果基本路径不存在,我们将创建目录。对于 originalPaths 中的每个路径,我们将提取文件名和类标签。我们将构建标签目录(0 或 1)的路径 - 如果它还不存在,我们将显式创建此目录。现在,我们将构建生成图像的路径,并将图像复制到它所属的位置。

5. 运行脚本build_dataset.py:

py build_dataset。py

输出截图:

构建数据集

cancernet.py:

我们将构建的网络将是CNN(卷积神经网络),并将其称为CancerNet。该网络执行以下操作:

  • 使用 3×3 个 CONV 滤波器
  • 将这些过滤器堆叠在一起
  • 执行最大池化
  • 使用深度可分离卷积(效率更高,占用内存更少)
来自Keras。模型导入顺序
来自Keras。规范化导入 BatchNormalization
来自Keras。卷积导入 SeparableConv2D
来自Keras。卷积导入 MaxPooling2D
来自Keras。核心导入激活
来自Keras。核心导入 Flatten
来自Keras。核心导入 Dropout
来自Keras。核心导入密集
从 keras 导入后端为 K
CancerNet:
@staticmethod
def buildwidth,height,depth,classes
model=顺序()
shape=高度,宽度,深度)
通道Dim=-1
如果 K。image_data_format()==“channels_first”
shape=深度,高度,宽度)
通道Dim=1
型。addSeparableConv2D323,3, padding=“相同”,input_shape=形状))
型。add激活“relu”))
型。addBatchNormalizationaxis=channelDim))
型。添加MaxPooling2Dpool_size=2,2)))
型。add辍学0.25))
型。添加SeparableConv2D643,3, padding=“相同”))
型。add激活“relu”))
型。addBatchNormalizationaxis=channelDim))
型。添加SeparableConv2D643,3, padding=“相同”))
型。add激活“relu”))
型。addBatchNormalizationaxis=channelDim))
型。添加MaxPooling2Dpool_size=2,2)))
型。add辍学0.25)

型。addSeparableConv2D1283,3, padding=“相同”))

型。add激活“relu”))
型。addBatchNormalizationaxis=channelDim))
型。addSeparableConv2D1283,3, padding=“相同”))
型。add激活“relu”))
型。addBatchNormalizationaxis=channelDim))
型。addSeparableConv2D1283,3, padding=“相同”))
型。add激活“relu”))
型。addBatchNormalizationaxis=channelDim))
型。添加MaxPooling2Dpool_size=2,2)))
型。add辍学0.25))
型。add扁平化())
型。密集256))
型。add激活“relu”))
型。addBatchNormalization())
型。add辍学0.5))
型。addDense))
型。add激活“softmax”))
返回模型

截图:

cancernet CNN python 迷你项目

截图:

cancernet CNN有趣的python项目

我们使用 Sequential API 来构建 CancerNet,并使用 SeparableConv2D 来实现深度卷积。类 CancerNet 有一个静态方法构建,它采用四个参数——图像的宽度和高度、深度(每张图像中的颜色通道数)以及网络将预测的类数,对我们来说,它是 2(0 和 1)。

在这种方法中,我们初始化模型和形状。使用 channels_first 时,我们会更新形状和通道尺寸。

现在,我们将定义三个 DEPTHWISE_CONV => RELU => POOL 层;每个都具有更高的堆叠和更多的过滤器。softmax 分类器输出每个类的预测百分比。最后,我们返回模型。

train_model.py:

这将训练和评估我们的模型。在这里,我们将从 keras、sklearn、cancernet、config、imutils、matplotlib、numpy 和 os 导入。

导入 matplotlib
matplotlib 中。use“Agg”)
来自Keras。预处理图像导入 ImageDataGenerator
来自Keras。回调导入 LearningRateScheduler
来自Keras。optimizers import Adagrad
来自Keras。utils 导入np_utils
来自 Sklearn。指标导入classification_report
来自 Sklearn。指标导入confusion_matrix
来自 cancernet。cancernet 导入 CancerNet
从 cancernet 导入配置
从 imutils 导入路径
导入 matplotlib。pyplot 作为 plt
导入 numpy 作为 np
导入操作系统
NUM_EPOCHS=40;INIT_LR=1e-2;BS=32
trainPaths=listpaths.list_imagesconfig.TRAIN_PATH))
lenTrain=lentrainPaths)
lenVal=lenlistpaths.list_imagesconfig.VAL_PATH)))
lenTest=lenlistpaths.list_imagesconfig.TEST_PATH)))
trainLabels=[intp.splitos.路径sep)[-2]) for p in trainPaths]
trainLabels=np_utils。to_categoricaltrainLabels)
classTotals=trainLabels。轴=0)
classWeight=classTotals。max()/classTotals
trainAug = 图像数据生成器(
重新缩放=1/255.0
rotation_range=20
zoom_range=0.05
width_shift_range=0.1
height_shift_range=0.1
shear_range=0.05
horizontal_flip=
vertical_flip=

fill_mode=“最

valAug=ImageDataGeneratorrescale=1 / 255.0)
trainGen = 火车Aug。flow_from_directory(
配置。TRAIN_PATH
class_mode=“分类”
target_size=48,48
color_mode=“rgb”
shuffle=True
batch_size=BS)
valGen = valAug。flow_from_directory(
配置。VAL_PATH
class_mode=“分类”
target_size=48,48
color_mode=“rgb”
shuffle=False
batch_size=BS)
testGen = valAug。flow_from_directory(
配置。TEST_PATH
class_mode=“分类”
target_size=48,48
color_mode=“rgb”
shuffle=False
batch_size=BS)
model=CancerNet。构建宽度=48,高度=48,深度=3,类=2)
opt=阿达格勒lr=INIT_LR,衰变=INIT_LR/NUM_EPOCHS)
型。compileloss=“binary_crossentropy”,optimizer=opt,metrics=[“accuracy”])
M=模型。fit_generator(
trainGen,
steps_per_epoch=lenTrainBS,
validation_data=valGen,
validation_steps=lenValBS,
class_weight=classWeight,
纪元=NUM_EPOCHS)
print“正在评估模型”)
测试生成。重置()
pred_indices=模型。predict_generatortestGen,steps=lenTestBS)+1)
pred_indices=np。argmaxpred_indices,轴=1)
printclassification_reporttestGen.、pred_indices、target_names=testGen。class_indices钥匙()))
cm=confusion_matrixtestGen.,pred_indices)

总计=sumsumcm))

精度=cm[0,0]+cm[1,1])/总计
特异性=cm[1,1]/cm[1,0]+cm[1,1])
灵敏度=cm[0,0]/cm[0,0]+cm[0,1])
打印cm)
printf'精度: {accuracy}')
printf'特异性: {特异性}')
printf'灵敏度: {sensitivity}')
N = NUM_EPOCHS
PLT。风格use“ggplot”)
PLT。数字()
PLT。plotnp.arange0,N, M.history[“损失”], label=“train_loss”)
PLT。plotnp.arange0,N, M.历史[“val_loss”], label=“val_loss”)
PLT。plotnp.arange0,N, M.history[“acc”], label=“train_acc”)
PLT。plotnp.arange0,N, M.历史[“val_acc”], label=“val_acc”)
PLT。title“IDC 数据集上的训练损失和准确性”)
PLT。xlabel“纪元号”)
PLT。ylabel“损失/精度”)
PLT。legendloc=“左下角”)
PLT。savefig'plot.png')

截图:

Python 开源项目

截图:

中级 Python 项目

截图:

Python 项目示例

在此脚本中,首先,我们设置了 epoch 数、学习率和批处理大小的初始值。我们将获取三个目录中用于训练、验证和测试的路径数。然后,我们将获得训练数据的类权重,以便我们处理不平衡。

现在,我们初始化训练数据增强对象。这是一个有助于泛化模型的正则化过程。在这里,我们稍微修改了训练示例,以避免需要更多的训练数据。我们将初始化验证和测试数据增强对象。

我们将初始化训练、验证和测试生成器,以便它们可以生成大小为 batch_size 的批量图像。然后,我们将使用 Adagrad 优化器初始化模型,并使用 binary_crossentropy 损失函数对其进行编译。现在,为了拟合模型,我们调用 fit_generator()。

我们已经成功地训练了我们的模型。现在,让我们根据测试数据评估模型。我们将重置生成器并对数据进行预测。然后,对于来自测试集的图像,我们得到具有相应最大预测概率的标签的索引。我们将显示分类报告。

现在,我们将计算混淆矩阵并获得原始准确度、特异性和灵敏度,并显示所有值。最后,我们将绘制训练损失和准确性。

输出截图:

学习 Python 项目

输出截图:

高级 Python 项目

输出:

带有源代码的 Python 项目

总结

在这个 python 项目中,我们学会了在 IDC 数据集上构建乳腺癌分类器(带有浸润性导管癌的组织学图像),并为其创建了网络 CancerNet。我们使用 Keras 来实现相同的结果。希望你喜欢这个 Python 项目。

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

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

相关文章

【数据结构】二叉树——顺序结构——堆及其实现

一、树 1.1、树的概念和结构 树是一种非线性的数据结构,它是由n(n>0)个有限节点组成的一个具有层次关系的集合。 树有一个特殊的节点,称为根节点,根节点没有前驱结点。 除根节点外,其余部分被分为M&…

海康视频WEB插件

引入相关依赖 index.html <script src"/video/web-control_1.2.5.min.js"></script> <script src"/video/jquery-1.12.4.min.js" type"text/javascript"></script> <script src"/video/jsencrypt.min.js" …

[UE 虚幻引擎] DTHmacSha 蓝图HMACSHA加密算法插件说明

本插件可以在虚幻引擎中使用蓝图对字符串和文件进行HMACSHA加密。 1.节点说明 HMACSHA一共有5种加密方式&#xff0c;分辨是 HMAC SHA-1&#xff0c; HMAC SHA-224&#xff0c;HMAC SHA-256&#xff0c;HMAC SHA-384&#xff0c;HMAC SHA-512。 本插件对每种加密方式提供3个节点…

快自查一下,你的手机有没有被乱扣费吧!查询方法都告诉你了!

不知道你有没有这种困扰&#xff0c;明明办的是29元的套餐&#xff0c;但是每月扣费的时候总是莫名其妙的被多收&#xff0c;如果你也有这种情况&#xff0c;那么有可能是被乱扣费了&#xff0c;下面这篇文章教你如何自查是否被乱扣费以及解决方法&#xff0c;大家可以参考。 ​…

npm上传自己的包以及发布过程遇到的问题

大家好&#xff0c;我是前端追寻路上的【酱酱仔】 作为在前端领域不断探索的一员&#xff0c;在此记录开发中遇到的问题&#xff0c;如果你也遇到了相同的问题&#xff0c;希望本文对你有帮助。 前提&#xff1a;本文涉及的命令都是在要发布的包的根目录下执行的&#xff0c;在…

unity文字||图片模糊

一.文字模糊 1、增大字体大小后等比缩放 快捷键R 2、更改字体渲染模式 二.图片模糊 1、更改过滤模式 2、更改格式或者压缩 3、如果只是图片边缘看不清&#xff0c;可以增加canvas/图片的每单位参考像素

nginx漏洞修复 ngx_http_mp4_module漏洞(CVE-2022-41742)【低可信】 nginx版本升级

风险描述&#xff1a; Nginx 是一款轻量级的Web服务器、反向代理服务器。 Nginx 的受影响版本中的ngx _http_mp4_module模块存在内存越界写入漏洞&#xff0c;当在配置中使用 mp4 directive时&#xff0c;攻击者可利用此漏洞使用使用ngx_http_mp4_module模块处理特制的音频或视…

WARNING: The Nouveau kernel driver is currently in use by your system. 处理方法

实践系统&#xff1a; 安装NVIDIA驱动时&#xff0c;提示&#xff1a; WARNING: The Nouveau kernel driver is currently in use by your system. This driver is incompatible with the NVIDIA driver&#xff0c;and must be disabled before proceeding.警告&#xff1…

Meta发布Llama 3.1开源大语言模型;谷歌发布NeuralGCM AI天气预测模型

&#x1f989; AI新闻 &#x1f680; Meta发布Llama 3.1开源大语言模型 摘要&#xff1a;Meta正式发布了开源大语言模型Llama 3.1&#xff0c;包括8B、70B和405B参数版本。Llama 3.1在推理能力和多语言支持方面有所改进&#xff0c;上下文长度提升至128K&#xff0c;405B参数…

node和npm安装;electron、 electron-builder安装

1、node和npm安装 参考&#xff1a; https://blog.csdn.net/sw150811426/article/details/137147783 下载&#xff1a; https://nodejs.org/dist/v20.15.1/ 安装&#xff1a; 点击下载msi直接运行安装 安装完直接cmd打开可以&#xff0c;默认安装就已经添加了环境变量&…

科技引领水资源管理新篇章:深入剖析智慧水利解决方案,展现其在提升水资源利用效率、优化水环境管理方面的创新实践

本文关键词&#xff1a;智慧水利、智慧水利工程、智慧水利发展前景、智慧水利技术、智慧水利信息化系统、智慧水利解决方案、数字水利和智慧水利、数字水利工程、数字水利建设、数字水利概念、人水和协、智慧水库、智慧水库管理平台、智慧水库建设方案、智慧水库解决方案、智慧…

JavaDS —— 排序

排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&a…

人大金仓亮相国际金融展,助力数字金融跑出“加速度”

7月19日至21日&#xff0c;由商务部批准、中国金融电子化集团有限公司主办的2024中国国际金融展&#xff08;以下简称“金融展”&#xff09;在北京国家会议中心举办。作为数据库领域国家队&#xff0c;人大金仓携金融领域创新成果与解决方案亮相本次金融展&#xff0c;获得了业…

亚信安全与软银中国全资企业爱思比通信达成战略合作

近日&#xff0c;亚信安全携手软银集团旗下全资企业爱思比通信科技&#xff08;上海&#xff09;有限公司&#xff08;以下简称“爱思比通信”&#xff09; 共同宣布&#xff0c;双方正式签署战略合作协议。依托双方在技术、业务和资源三大层面的实力与优势&#xff0c;亚信安全…

学习在测试时学习(Learning at Test Time): 具有表达性隐藏状态的循环神经网络(RNNs)

摘要 https://arxiv.org/pdf/2407.04620 自注意力机制在长文本语境中表现良好&#xff0c;但其复杂度为二次方。现有的循环神经网络&#xff08;RNN&#xff09;层具有线性复杂度&#xff0c;但其在长文本语境中的性能受到隐藏状态表达能力的限制。我们提出了一种新的序列建模…

controller层-请求格式为json-请求方法为get

前置条件 get请求映射&#xff0c;内容和PostMapping一致&#xff0c;需要请求参数更换为get数据 请求过程&#xff1a;用户请求--初始化DispatcherServlet及对接和分发用户请求--controller--service 用户请求&#xff1a;http://ip:port/user/getinfo 请求方法&#xff1a;ge…

redis全局唯一ID生成策略、countDownLatch、Lambda表达式总结

redis全局唯一ID生成策略 一、有哪些生成全局唯一ID的策略二、使用Redis自增1. 分析2. RedisIdWorker配置类3 单元测试注解分析&#xff08;难点较多&#xff09;3.1 countDownLatch前言3.2 常用方法 一、有哪些生成全局唯一ID的策略 二、使用Redis自增 1. 分析 2. RedisIdWor…

Java查询ES报错 I/O 异常解决方法: Request cannot be executed; I/O reactor status: STOPPED

问题 ES Request cannot be executed; I/O reactor status: STOPPED 报错解决 在使用ES和SpringBoot进行数据检索时&#xff0c;在接口中第一次搜索正常。第二次在搜索时在控制台就会输出Request cannot be executed; I/O reactor status: STOPPED错误 原因 本文错误是因为在使…

大语言模型-GPT-Generative Pre-Training

一、背景信息&#xff1a; GPT是2018 年 6 月由OpenAI 提出的预训练语言模型。 GPT可以应用于复杂的NLP任务中&#xff0c;例如文章生成&#xff0c;代码生成&#xff0c;机器翻译&#xff0c;问答对话等。 GPT也采用两阶段的训练过程&#xff0c;第一阶段是无监督的方式来预训…

7.23 字符串简单中等 520 125 14 34

520 Detect Capital 思路&#xff1a; 题目&#xff1a;判定word &#xff1a;if the usage of capitals in it is right.遍历所有的string&#xff1a; 两种情况&#xff1a; 首字母capitals–>判定第二个字母是否大写–>所有字母大写 otherwise 除第一个以外全部小写&a…