[英]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.