Python 基于CNN-Keras的多图像分类

Python 基于CNN-Keras的多图像分类,python,keras,Python,Keras,我是CNN领域的新手。 我想对100幅图像进行分类。 这些图像分为12类。 我有一个csv文件,其中包含图像ID(ID是图像文件名)和图像类。 如何使用csv文件中的类并将其划分为训练和测试。 我的意思是,当我将数据分为训练和测试时,我如何将csv文件中的100张图片及其类划分为训练和测试,然后将它们提供给模型。 我使用python和Keras库。 提前感谢。 import os import cv2 from keras.layers import Input,Dense,Flatten,Dr

我是CNN领域的新手。
我想对100幅图像进行分类。
这些图像分为12类。
我有一个csv文件,其中包含图像ID(ID是图像文件名)和图像类。
如何使用csv文件中的类并将其划分为训练和测试。
我的意思是,当我将数据分为训练和测试时,我如何将csv文件中的100张图片及其类划分为训练和测试,然后将它们提供给模型。
我使用python和Keras库。
提前感谢。

import os
import cv2
from keras.layers import Input,Dense,Flatten,Dropout,merge,Reshape,Conv3D,MaxPooling3D,UpSampling3D,Conv2DTranspose
from keras.layers.normalization import BatchNormalization
from keras.models import Model,Sequential
from keras.callbacks import ModelCheckpoint
from keras.optimizers import Adadelta, RMSprop,SGD,Adam
from keras import regularizers
from keras import backend as K
import numpy as np
import scipy.misc
import numpy.random as rng
from PIL import Image, ImageDraw, ImageFont
from sklearn.utils import shuffle
import nibabel as nib #reading MR images
from sklearn.model_selection import train_test_split
import math
import glob
from matplotlib import pyplot as plt
import pandas as pd
from google.colab import drive
drive.mount('/content/drive')
files = glob.glob('/content/drive/My Drive/im_id/*')
files[0]
len(files)
images = []
for f in range(len(files)):
  a = nib.load(files[f])
  a = a.get_data()
  images.append(a)
print(a.shape)
images = np.asarray(images)
print(images.shape)
labeles = pd.read_csv('/content/drive/My 
Drive/img_id.csv')
print(labeles)
class_names = labeles["Class"]
from tensorflow.keras import datasets, layers, models
model = models.Sequential()
model.add(layers.Conv3D(32, (3, 3, 3), activation='relu', input_shape=(110, 110, 110, 1)))
model.add(layers.MaxPooling3D((2, 2, 2)))
model.add(layers.Conv3D(64, (3, 3, 3), activation='relu'))
model.add(layers.MaxPooling3D((2, 2, 2)))
model.add(layers.Conv3D(64, (3, 3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.summary()

您需要创建一个
tf.data.Dataset
,它是一个表示元素序列的抽象,其中每个元素由一个或多个组件组成。换句话说,它是python中的生成器

我不知道你的数据,所以我不能帮你。我所能做的就是给你一个如何做的要点,并分享一些链接

简而言之,您需要阅读您的
csv
文件,我建议使用
pandas
,以及图像的路径。现在,您可以使用
NumPy
拆分它们,例如,您可以洗牌数据,然后获取数组中前10%的值用于测试,其余值用于训练

接下来,您需要使用
tf.data
API来生成数据集。方法
tf.data.Dataset.from_tensor_slices
为您完成这项工作。您只需将
NumPy
数组作为参数传递,并将生成器传递到
Keras
管道。您必须对培训和测试阵列执行此操作

我有一条管道可以做到这一点。请随意使用它。您还可以查看手册和


我希望它能帮助您。

请为您迄今为止所做的工作发布一个代码。我不知道如何拆分它们。我只制作了模型并加载了数据,非常感谢。我的数据是3D的mri图像。这是相同的管道,你只需要改变从磁盘加载数据的方式。张量切片将以同样的方式工作。