基于Pytorch深度学习的脑肿瘤分类识别

3f6a7ab0347a4af1a75e6ebadee63fc1.gif

🤵‍♂️ 个人主页:@艾派森的个人主页

✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+


目录

实验背景

实验目的

实验环境

实验过程

1.加载数据

2.训练模型

3.模型评估

源代码

文末福利


 

实验背景

        脑肿瘤是一种严重的疾病,对患者的生命和健康造成了威胁。在脑肿瘤的治疗过程中,准确地识别和分类不同类型的脑肿瘤对于制定个性化的治疗方案和预测患者的病情发展非常重要。

        传统的脑肿瘤分类方法通常依赖于医学专家对影像学图像的视觉解读和分析,但这种方法受限于主观性、经验依赖性和人力成本较高等问题。随着深度学习技术的快速发展,特别是在计算机视觉领域的应用,基于深度学习的脑肿瘤图片识别分类成为了一种有潜力的解决方案。深度学习模型,尤其是卷积神经网络(Convolutional Neural Networks,简称CNN),具备从大规模数据中自动学习特征和进行高度抽象的能力。这使得它们在图像分类和分割任务中具有出色的表现。通过使用深度学习方法,可以将医学影像图像作为输入,训练一个分类器来自动识别和分类不同类型的脑肿瘤,从而为医生提供辅助诊断和治疗决策的依据。基于深度学习的脑肿瘤图片识别分类实验具有重要的研究意义和应用前景。通过该实验,可以评估深度学习模型在脑肿瘤分类任务中的准确性、鲁棒性和可解释性。同时,还可以探索不同深度学习架构、数据增强技术和迁移学习方法对脑肿瘤分类性能的影响。这些研究成果有望为脑肿瘤的早期检测、治疗规划和病情预测提供有力的支持,提高医疗诊断的精确性和效率,最终改善患者的治疗结果和生存率。

实验目的

        本实验旨在利用深度学习方法,特别是卷积神经网络(CNN),进行脑肿瘤图片的识别和分类,以实现以下目标:

1.提高脑肿瘤识别的准确性:通过训练深度学习模型,使其能够准确地识别不同类型的脑肿瘤,包括恶性和良性肿瘤。通过提高准确性,可以辅助医生进行更精确的诊断和制定个性化的治疗方案。

2.探索深度学习模型的鲁棒性:在面对不同的脑肿瘤图像数据集时,评估深度学习模型的鲁棒性和泛化能力。通过研究模型的鲁棒性,可以提高在实际应用中的可靠性,并应对不同来源、不同质量和不同噪声水平的脑肿瘤图像数据。

3.比较不同深度学习架构的性能:尝试使用不同的深度学习架构,如常见的卷积神经网络(CNN)模型和一些最新的架构,比较它们在脑肿瘤分类任务上的性能和效果。通过对比不同模型的表现,可以确定最适合该任务的模型架构,为后续的研究和应用提供参考。

4.评估深度学习模型在临床实践中的应用价值:将深度学习模型应用到真实世界的脑肿瘤影像数据中,并与传统的医学影像诊断方法进行对比。通过评估深度学习模型在临床实践中的准确性和效率,可以为医生提供辅助诊断的工具,并改善脑肿瘤患者的治疗结果和预后。

实验环境

Python3.9

Jupyter notebook

实验过程

1.加载数据

首先导入本次实验用到的第三方库

1c94e2dbb05143cd98d0ea18f1d2169b.png

定义数据集的路径 

 ec0697d4cd484e77b99b301766b3575e.png

 计算该图像数据集的均值和STD

0d25d10914ce477281b300df3a5940d0.png

创建数据加载器,为训练和验证数据集组合转换
df5bb015156043f2892a9f127c34af77.png

使用采样器在训练和验证之间分割数据 

68051678c9b944f083f13127de03a747.png

配置数据集定义加载器 

 24b52728f52b45988b46578da2f81112.png

 将数据进行展示f4c8c9c72ef24046b9e479a6a65ada67.png

2.训练模型

训练模型配置,初始化模型

70eb4a4d94c44e4fa72599315354e098.png

开始训练模型 

30df6ddd05fc44fbb8c477b6cdbbd556.png

be264e8a6aa14df596fc34e65cc2530f.png

3.模型评估

绘制训练和验证损失

26b76c14c71646478368bf4c9d4ca2d6.png

 绘制验证精度图2c429bf0673644519c678fa62d8c2bec.png

源代码

import numpy as np
from pathlib import Path
import random
import torch
import torchvision
from torchvision import transforms
import tqdm
data_dir = Path("./brain_tumor_dataset")
list(data_dir.iterdir())
# 计算该图像数据集的均值和STD
def calculate_dataset_mean(dataloader): images, labels = next(iter(dataloader))return images.mean([0,2,3])
def calculate_dataset_std(dataloader):images, labels = next(iter(dataloader))return images.std([0,2,3])raw_dataset_transforms = transforms.Compose([transforms.Resize(255), transforms.CenterCrop(225), transforms.ToTensor()])
raw_dataset = torchvision.datasets.ImageFolder(root = str(data_dir), transform=raw_dataset_transforms)
raw_dataloader = torch.utils.data.DataLoader(raw_dataset, batch_size=len(raw_dataset))
print(f"mean = {calculate_dataset_mean(raw_dataloader)} and std = {calculate_dataset_std(raw_dataloader)}")
'''
创建数据加载器
为训练和验证数据集组合转换
创建应用了适当转换的数据集
使用数据集创建数据加载程序
'''
# 数据集配置
CLASSES = ["no","yes"]
NUMBER_OF_CLASSES = len(CLASSES)
SHUFFLE = True
VALIDATION_SIZE = 0.2
RESIZE = 64
# 为训练和验证数据集组合图像转换
normalize = transforms.Normalize(mean=calculate_dataset_mean(raw_dataloader),std=calculate_dataset_std(raw_dataloader),)
training_transform = transforms.Compose([transforms.RandomRotation(30),transforms.Resize(RESIZE),transforms.CenterCrop(RESIZE),transforms.RandomHorizontalFlip(),transforms.ToTensor(),normalize,
] )
validation_transform = transforms.Compose([transforms.Resize(RESIZE),transforms.CenterCrop(RESIZE),         transforms.ToTensor(),normalize,])# 创建数据集并应用相关转换
training_dataset = torchvision.datasets.ImageFolder(root = str(data_dir),transform = training_transform,
)
validation_dataset = torchvision.datasets.ImageFolder(root = str(data_dir),transform = validation_transform
)
# 检查数据集规范化
# 归一化后,均值应接近0,std应接近1
normalized_dataloader = torch.utils.data.DataLoader(validation_dataset, batch_size=len(validation_dataset),)
print(f"mean = {calculate_dataset_mean(normalized_dataloader)}",f"std = {calculate_dataset_std(normalized_dataloader)}")
# 使用采样器在训练和验证之间分割数据
split = int(np.floor(len(training_dataset) * VALIDATION_SIZE))
indices = list(range(len(training_dataset)))
if SHUFFLE:random.shuffle(indices)validation_indices, training_indices = indices[: split], indices[split :]training_sampler = torch.utils.data.sampler.SubsetRandomSampler(training_indices)
validation_sampler = torch.utils.data.sampler.SubsetRandomSampler(validation_indices)
# 数据加载器配置
BATCH_SIZE = 4
NUMBER_OF_WORKERS = 2
PIN_MEMORY = False
# 创建数据加载器
training_dataloader = torch.utils.data.DataLoader(training_dataset, batch_size=BATCH_SIZE, sampler=training_sampler,num_workers=NUMBER_OF_WORKERS, pin_memory=PIN_MEMORY,)validation_dataloader = torch.utils.data.DataLoader(training_dataset, batch_size=BATCH_SIZE, sampler=validation_sampler,num_workers=NUMBER_OF_WORKERS, pin_memory=PIN_MEMORY,)
import matplotlib.pyplot as plt
%matplotlib inline# 展示图片
for images, labels in training_dataloader:fig = plt.figure(figsize = (14, 7))for i in range(BATCH_SIZE):ax = fig.add_subplot(2, 4, i + 1, xticks = [], yticks = [])ax.set_xlabel(f"cancer = {CLASSES[labels[i]]}")image = images[i][0, :, :]plt.imshow(image)break
# 训练模型配置
MODEL_NAME = "resnet18"
WEIGHTS = "DEFAULT"
LEARNING_RATE = 0.0001
MOMENTUM = 0.9
NUMBER_OF_EPOCHS = 10
MODEL_SAVE_PATH = "model.pt"# 初始化模型
model = torchvision.models.get_model(MODEL_NAME, weights=WEIGHTS)
model.fc = torch.nn.Linear(512, 2)
# 选择一个损失函数和一个优化函数
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=LEARNING_RATE, momentum=MOMENTUM)
# 开始训练模型
# 存储训练过程状态的地方
training_loss_history = []
validation_loss_history = []
validation_accuracy_history = []# 训练和验证循环
for epoch in range(NUMBER_OF_EPOCHS):model.train()training_step_loss = []print(f"Epoch {epoch + 1}/{NUMBER_OF_EPOCHS}")for data in tqdm.tqdm(training_dataloader, desc="training"):features, labels = dataoptimizer.zero_grad()outputs = model(features)training_loss = criterion(outputs, labels)training_loss.backward()optimizer.step()training_step_loss.append(training_loss.item())training_epoch_loss = sum(training_step_loss)/len(training_step_loss)training_loss_history.append(training_epoch_loss)model.eval()validation_step_loss = []correct_predictions = 0 for data in tqdm.tqdm(validation_dataloader, desc="validating"):features, labels = dataoutputs = model(features)correct_predictions += torch.sum(torch.argmax(outputs, axis=1)==labels)validation_loss = criterion(outputs, labels)validation_step_loss.append(validation_loss.item())validation_epoch_loss = sum(validation_step_loss)/len(validation_step_loss)validation_loss_history.append(validation_epoch_loss)validation_epoch_accuracy = correct_predictions / (len(validation_dataloader) * BATCH_SIZE)print(f"Training Loss: {training_epoch_loss:.4f},"f"Validation Loss: {validation_epoch_loss:.4f}," f"Validation Acc: {validation_epoch_accuracy:.4f}")# 保存模型if epoch==0 or validation_epoch_accuracy > max(validation_accuracy_history):print("Validation loss improved, saving checkpoint.")torch.save({'epoch': epoch,'model_state_dict': model.state_dict(),'optimizer_state_dict': optimizer.state_dict(),'loss': validation_epoch_loss,}, MODEL_SAVE_PATH)print("Checkpoint saved")validation_accuracy_history.append(validation_epoch_accuracy)
print('Finished Training')
# 绘制训练和验证损失
plt.plot(training_loss_history, label='training_loss')
plt.plot(validation_loss_history,label='validation_loss')
plt.legend()
plt.show
# 绘制验证精度图
plt.plot(validation_accuracy_history, label='validation accuracy')
plt.legend()
plt.show

文末福利

《人工智能与ChatGPT免费包邮送出3本!

ff0a9db439cc4522911ef739410b0fc2.jpeg

内容简介:

        人们相信人工智能可以为这个时代的技术带来突破,而ChatGPT则使这种希望成为现实。现在,许多人都渴望了解与ChatGPT相关的一切,包括技术的历史和背景,其神奇的功能以及如何使用它。虽然ChatGPT的使用方法很简单,但它具有无限的潜力。如果不去亲身体验,很难体会到它的强大之处。本书尽可能全面地介绍了与ChatGPT相关的内容,特别是许多应用示例,可以给读者带来启发。

        希望读者通过这本书了解ChatGPT后,在自己的工作中也能充分利用它。本书适合希望了解和使用ChatGPT的人阅读。

编辑推荐:

ChatGPT的背景:从大语言模型到GPT

ChatGPT的技术:从Transformer模型到RLHF

ChatGPT的使用:从对话到OpanAI API

ChatGPT的应用:从编程到统计分析

ChatGPT的案例:从写专利到出试卷

  • 抽奖方式:评论区随机抽取3位小伙伴免费送出!
  • 参与方式:关注博主、点赞、收藏、评论区评论“人生苦短,拒绝内卷!”(切记要点赞+收藏,否则抽奖无效,每个人最多评论三次!
  • 活动截止时间:2023-07-10 20:00:00
  • 京东购买链接:https://item.jd.com/14049920.html

 名单公布时间:2023-07-10 21:00:00  

36a8c5d95d0b4fc1aaccff2956271405.png

 

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

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

相关文章

chatgpt赋能python:Python写完程序之后如何正确运行

Python写完程序之后如何正确运行 作为一名10年以上的Python工程师,我深知Python作为高级编程语言的强大之处。但在写完程序之后,可能会遇到运行不成功的问题。在本文中,我将为大家详细介绍Python写完程序之后的正确运行方法,以及…

chatgpt赋能python:使用Python编写股票代码:提高交易效率

使用Python编写股票代码:提高交易效率 随着越来越多的投资者加入股票市场,交易效率的重要性变得越来越高。一种方法是使用自动化交易程序来执行买卖。Python是一种脚本语言,广泛应用于数据分析和自动化交易。在本文中,我们将介绍…

Python实现手机号自动判断男女性别

python实现手机号男女性别判断 如果你觉得有用欢迎关注我吧 本文性别判断主要依靠airtest中的自动化测试实现 通过自动对比支付宝页面男女图像,从而实现男女判断 代码如下: 男女判断函数: // An highlighted block def numbe():if exists(…

猜数字游戏 python

1.运行结果 2. 源代码如下 import random n random.randint(0, 9) count 0 print(n) s int(input("please enter a number!: \n")) while True:if 0 < s < 9 and s ! n:if s > n:count 1print("is bigger")else:count 1print("is smal…

男女声识别~ you are boy or girl?

提示&#xff1a;所有代码均已开源&#xff0c;版权所有转载请标注来源&#xff0c;谢谢~ 目录 背景一、结果二、基础知识介绍1.数据读取&#xff1a;2.分帧&#xff1a;3.平滑4.端点检测 三、基音计算1.预处理&#xff1a;2.对分帧数据进行滤波&#xff1a;3.计算每帧数据相关…

使用tkinter 实现一个猜数字游戏

使用tkinter 实现一个猜数字游戏 实现效果如下 先导入我们要实现的模块名 import time import tkinter as tk import tkinter.font as tkFont import randomLOG_LINE_NUM 0后面我们开始编写实现的类 类名&#xff0c;定位为APP类 类方法里面变量初始化&#xff0c;我们后面…

skynet开发一个猜数字游戏

skynet开发一个猜数字游戏 游戏简介接口设计和实现agent服务接口room服务接口hall服务接口redis服务gate服务接口 编写skynet的config文件游戏演示总结 游戏简介 猜数字游戏目的是掌握 actor 模型开发思路。 规则&#xff1a; 满三个人开始游戏&#xff0c;游戏开始后不能退…

数字人全集

Mixlab 请查阅 Mixlab社群数字人讨论合辑&#xff0c;文末附有合辑资料汇总&#xff5e; 数字人专题分享合辑目录 #01 数字人驱动方式 离线式驱动实时驱动跨平台数字人形象统一接入工具 #02 数字人虚拟偶像制作 虚拟偶像创作与运营指南虚拟形象制作开发工具 #03 数字人实业应用…

哈登砍58分遇“里程悲” 火箭破单场3分出手纪录

资料图&#xff1a;哈登遭遇“里程悲” 资料图&#xff1a;哈登遭遇“里程悲” 中新网客户端1月17日 在17日进行的美职篮常规赛中&#xff0c;虽然哈登在45分钟的出场时间里拿到58分、6次助攻以及10个篮板的恐怖数据&#xff0c;但休斯敦火箭还是以142&#xff1a;145加时不敌…

连续21场30+ 哈登砍61分创个人生涯得分记录

资料图&#xff1a;哈登。 中新网1月24日电 北京时间24日上午&#xff0c;2018-2019赛季NBA常规赛继续进行。火箭客场以114&#xff1a;110力克尼克斯&#xff0c;此役哈登砍下61分、15个篮板和5次抢断&#xff0c;创造个人职业生涯得分记录。 上半场比赛&#xff0c;哈登21投…

NBA上周最佳球员:哈登场均54分 拉塞尔首次入选

哈登近期的表现惊艳全联盟。(资料图) 中新网1月22日电 北京时间22日凌晨&#xff0c;NBA官方公布了上一周东西部最佳球员&#xff0c;布鲁克林篮网队丹吉洛-拉塞尔与休斯顿火箭队詹姆斯-哈登分别当选。这是哈登赛季第3次当选周最佳。 拉塞尔上周率领篮网队取得3胜0负&#x…

火箭主帅德安东尼赞哈登低位防守:他是控球中锋

资料图&#xff1a;哈登。 中新网北京1月28日电 北京时间1月28日&#xff0c;火箭103&#xff1a;98战胜魔术。据NBA中文网报道&#xff0c;火箭主帅德安东尼在赛后夸赞了球队当家核心哈登的低位防守。 本场比赛&#xff0c;克里斯-保罗在缺席了17场比赛之后回归&#xff0c;…

哈登骑小牛刷街是营销炒作?你可能想多了

近日&#xff0c;哈登骑小牛电动车在上海刷街的视频和图片轰炸了微博、百度等各大平台&#xff0c;广大网友插科打诨之余不免猜测&#xff0c;这肯定是小牛电动的一次精心营销&#xff1f;虽然不排除这种可能&#xff0c;但我觉得&#xff0c;这更像是哈登自己的炒作。 哈登和…

接口怎么分批量同步数据_常规赛场均34分,季后赛场均31分,数据下滑的哈登到底怎么了...

詹姆斯哈登再一次因为季后赛中不理想的表现被球迷们推上了风口浪尖&#xff0c;其实哈登在这轮系列赛中的数据表现还是挺不错的&#xff0c;场均31.8分6.8个篮板和7.8次助攻的数据已经可以和历史上很多伟大名宿相提并论了&#xff0c;但是就算打出了这样的数据&#xff0c;球队…

姚明当年这罚球有多难?哈登欧文难复制,吉诺比利:罚不进真难

体育竞技&#xff0c;是力量和技巧的比拼&#xff0c;是心态和经验的比拼&#xff01;面对勇者&#xff0c;每个体育健儿都是雄鹰&#xff0c;他们能够勇猛的搏击长空&#xff0c;让啸声响彻云霄&#xff1b;面对智者&#xff0c;每个体育健儿都是蛟龙&#xff0c;能够畅游四海…

盘一盘 Python 系列 10 - Keras (上)

本文含 12119 字&#xff0c; 64 图表截屏 建议阅读 62 分钟 0 引言 本文是 Python 系列的第十三篇&#xff0c;也是深度学习框架的第一篇 - Keras。 深度学习之 Keras深度学习之 TensorFlow深度学习之 PyTorch深度学习之 MXnet Keras 是一个高级的 (high-level) 深度学习框架…

这届全明星,把NBA又燃回来了

第一个罚球&#xff0c;戴维斯出手后&#xff0c;听到哐当医生&#xff0c;皮球掉了出来。我又紧张了。微信群了很多人开始发消息&#xff0c;说詹姆斯队又要输了。回到比赛。戴维斯当时没有任何微笑&#xff0c;我估计他内心也是紧张的&#xff0c;他有点埋怨哈登&#xff0c;…

CTR---DIN原理,及deepctr组网实现DIN

文章目录 原理小结deepctr实现DIN&#xff08;基于df的数据格式&#xff09; 原理小结 Candidate Ad item&#xff0c;在这指广告特征。 User profile features 代表用户的特征。 Context Features 代表跟场景有关的特征&#xff0c;比如时间戳之类的。 User Behaviors 代表…

第02章 PyTorch基础知识

文章目录 第02章 Pytorch基础知识2.1 张量2.2 自动求导2.3 并行计算简介2.3.1 为什么要做并行计算2.3.2 CUDA是个啥2.3.3 做并行的方法 补充&#xff1a;通过股票数据感受张量概念。 本图文是Datawhale组队学习Pytorch的学习笔记&#xff0c;主要内容包括张量的概念&#xff08…