python - 使用 CNN Keras 进行多图像分类
问题描述
我想对 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
管道。您必须对您的训练和测试数组执行此操作。
推荐阅读
- flutter - Updating state in flutter
- javascript - How to render the landing page in server and the rest in client side?
- c - 为什么 %c 之前需要空格才能使代码正常工作?
- gerrit - How to hide some compiled files from showing up in gerrit review
- lua - 如何将字符串转换为变量名?
- html - 元素不遵守流量,并在浏览器中的意外位置呈现
- javascript - How to place text inside each bar of the chart using d3
- angular - Angular Input Date display from datatable
- flutter - Connection refused error when creating Http server using dart
- c# - 如何在 c# 中循环遍历表并在 datagridview 中显示结果?