使用 Keras 的 CNN 深度学习模型中的 PCA

Posted

技术标签:

【中文标题】使用 Keras 的 CNN 深度学习模型中的 PCA【英文标题】:PCA in CNN deep learning model using Keras 【发布时间】:2019-12-10 06:12:16 【问题描述】:

我使用 Keras 构建了一个用于图像分类的 CNN 模型,我想对模型使用主成分分析 (PCA)。如何使用 CNN 中的 PCA 使用 Keras 进行图像识别?

我尝试了以下代码,但是当我运行 pca.fit() 代码时,代码仍然运行了几个小时并且 RAM 已满。

#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】:

您可以改用截断的 SVD。您可以使用的另一种方法是 IncrementalPCA PCA。

from sklearn.decomposition import TruncatedSVD
from sklearn.decomposition import IncrementalPCA

def func_PCA(input_data):
    input_data = np.array(input_data)
    pca = IncrementalPCA(n_components=50, batch_size=50)
    pca.fit(input_data)
    pca_input_data = pca.transform(input_data)
    eigenvalues = pca.explained_variance_
    eigenvectors = pca.components_
    return pca_input_data, eigenvalues, eigenvectors

def svd_func(input_data):
    svd = TruncatedSVD(n_components=50)
    svd.fit(input_data)
    pca_input_data = svd.transform(input_data)
    eigenvalues = svd.explained_variance_
    eigenvectors = svd.components_
    return pca_input_data, eigenvalues, eigenvectors

【讨论】:

以上是关于使用 Keras 的 CNN 深度学习模型中的 PCA的主要内容,如果未能解决你的问题,请参考以下文章

基于CNN卷积神经网络的TensorFlow+Keras深度学习的人脸识别

Keras深度学习实战——卷积神经网络详解与实现

keras构建1D-CNN模型

[Python人工智能] 三十.Keras深度学习构建CNN识别阿拉伯手写文字图像

Keras深度学习实战(15)——从零开始实现YOLO目标检测

如何求CNN模型(keras)的ROC曲线和AUC分数