如何使用 CNN 中的 PCA 使用 Keras 进行图像识别?

数据挖掘 深度学习 喀拉斯 张量流 主成分分析 卷积神经网络
2021-09-20 21:30:49

我创建了一个用于图像分类的 CNN 模型,并且我想使用主成分分析 (PCA),但是当我运行pca.fit()代码时,代码仍会运行数小时并且 RAM 已满。那么,我想知道如何在 CNN 中使用 PCA 来使用 Keras 进行图像识别?

我的代码:

#Data files
train_iris_data = 'Iris_Database_01/Training'
valid_iris_data = 'Iris_Database_01/Validation'
test_iris_data = 'Iris_Database_01/Testing'

#Image data generator
train_iris_datagen = ImageDataGenerator(
rotation_range=10,
shear_range=0.2,
zoom_range=0.1,
width_shift_range=0.1,
height_shift_range=0.1
)

test_iris_datagen = ImageDataGenerator()

#Image batches
image_size = (224, 224)
batch = 32

# Training
train_iris_generator = train_iris_datagen.flow_from_directory(
train_iris_data,
target_size=image_size,
batch_size=batch,
class_mode='categorical')

# Validation
validation_iris_generator = test_iris_datagen.flow_from_directory(
valid_iris_data, 
target_size=image_size, 
batch_size=batch, 
class_mode='categorical',
shuffle = False)

# Testing
test_iris_generator = test_iris_datagen.flow_from_directory(
test_iris_data,
target_size=image_size, 
batch_size=1, 
class_mode='categorical',
shuffle = False)

pca = PCA(n_components=2)
pca.fit(train_iris_generator)

#pca = PCA(n_components=0.8)
#pca.fit(train_iris_generator)
1个回答

PCA 的标准实现计算整个数据集的统计数据,以便找到具有最大方差的投影。需要将整个数据集加载到内存中以进行该计算。

您正在使用ImageDataGenerator生成数据的合成变体,大大增加了必须加载到内存中的训练集的大小。

这里有几个运行 PCA 的选项:

  • 减少 ImageDataGenerator 中的变化数量
  • 使用近似 PCA
  • 获取更大的机器或跨集群分布