繁体   English   中英

使用子文件夹中的图像训练 CNN 模型(Train、Val、Test)

[英]Train CNN model with images in sub-folders (Train, Val, Test)

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

我有一个 145 个神经心理学科目数据集,分为三类(1=正常,2=……,3=认知障碍)。 在每个患者的数据集中,我在每个 MRI 文件夹中同时拍摄了 90 组 MRI 扫描图像,总数据集的摘要为 145,总数据集内是每个具有 90 个 MRI 图像的患者的子文件夹。

我学会了如何处理基本的“Cat-Dog-CNN-Classifier”,这很容易,因为我将所有的猫和狗图像放在一个文件夹中来训练网络,这不是我的情况。 但是我如何解决我的神经心理学科目数据集中的问题,并在训练后一次使用每个科目的所有图像进行预测?

我查过有人问过类似的问题,但答案不清楚,申请后也没有用。 训练具有多个文件夹和子文件夹的 CNN 模型

谢谢,请推荐一些我可以使用的算法。

如果您确定要一次从一个主题的所有图像中学习,您的输入形状需要包含图像数量作为维度,如下所示:

(num_of_images, x_pix, y_pix, 通道)

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

这是一个相当大的处理输入,我会使用像 (10,256,256,3) 这样的扫描子集将它们分成更小的组

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

from tensorflow.keras.utils import Sequence
import numpy as np
class Custom_Generator(Sequence):

    #initialise generator
    def __init__(self, file_sets, label, batch_size) :
        self.file_sets = file_sets
        self.label = label
        self.batch_size = batch_size
    
    #returns number of data batches this generator will return
    def __len__(self) :
        return (np.ceil(len(self.file_sets) / float(self.batch_size))).astype(np.int)
  
    #returns a single batch 
    def __getitem__(self, idx) :

        #do all the operations you need to load and pre-process your data here

        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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM