【问题标题】:Train CNN model with images in sub-folders (Train, Val, Test)使用子文件夹中的图像训练 CNN 模型(训练、验证、测试)
【发布时间】:2021-11-03 02:38:05
【问题描述】:

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

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

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

我检查了类似的问题被问到,但答案不明确,并且在申请后不起作用。 Train CNN model with multiple folders and sub-folders

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

【问题讨论】:

  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: python tensorflow machine-learning keras


【解决方案1】:

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

(num_of_images, x_pix, y_pix, channels)

例如,如果您将扫描缩小为 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/

【讨论】:

    猜你喜欢
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 2019-05-04
    • 2019-08-09
    相关资源
    最近更新 更多