使用子文件夹中的图像训练CNN模型(训练、验证、测试)

我正在开发一个卷积神经网络(CNN)模型,用于预测患者属于第1、2或3类。我使用TensorFlow上的Keras进行开发。

我有一个包含145名神经心理学受试者的数据集,这些受试者被分为三类(1=正常,2=……,3=认知障碍)。每个患者的数据集中包含90组同时拍摄的MRI扫描图像,每个MRI文件夹内包含这些图像。总数据集包含145个病例,每个病例的子文件夹中包含90张MRI图像。

我已经学会了如何处理基本的“猫狗-CNN分类器”,因为我只需将所有的猫和狗图像放入一个文件夹中来训练网络,这与我的情况不同。但是,我该如何处理我的神经心理学受试者数据集,并在训练后一次性使用每个受试者的所有图像进行预测呢?

我查看了类似的提问,但答案不够清晰,且在应用后不起作用。使用多个文件夹和子文件夹训练CNN模型

谢谢,请建议一些我可以使用的算法。


回答:

如果你确定要一次性从一个受试者的所有图像中学习,你的输入形状需要包括图像数量作为一个维度,像这样:

(num_of_images, x_pix, y_pix, channels)

例如,如果你将扫描图像缩小到256*256的RGB图像,那么你的形状将是:(90,256,256,3)

这是一个相当大的输入需要处理,我建议你将其分成更小的组,只使用扫描图像的一个子集,比如(10,256,256,3)

很可能你无法将所有图像预处理到内存中来解决这个问题,你应该使用生成器作为输入,尝试这个模板:

from tensorflow.keras.utils import Sequenceimport numpy as npclass Custom_Generator(Sequence):    #初始化生成器    def __init__(self, file_sets, label, batch_size) :        self.file_sets = file_sets        self.label = label        self.batch_size = batch_size        #返回这个生成器将返回的数据批次数量    def __len__(self) :        return (np.ceil(len(self.file_sets) / float(self.batch_size))).astype(np.int)      #返回一个批次     def __getitem__(self, idx) :        #在这里执行你需要的所有操作来加载和预处理你的数据        return x, y

为你的训练和验证集制作一个生成器,并在调用model.fit()时使用它

或者查看https://www.tensorflow.org/api_docs/python/tf/data/Dataset

如这里所使用https://www.tensorflow.org/tutorials/images/segmentation

对于模型本身,从你见过的教程中的简单CNN开始,整理好你的预处理流程,然后看看你的模型得分。如果你仍然需要改进,可以尝试这些之一:https://keras.io/api/applications/

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注