简体   繁体   English

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

[英]PCA in CNN deep learning model using Keras

I built a CNN model for image classification using Keras and I want to use principal component analysis (PCA) with the model.我使用 Keras 构建了一个用于图像分类的 CNN 模型,并且我想对模型使用主成分分析 (PCA)。 How to use PCA in CNN for image recognition using Keras?如何使用 CNN 中的 PCA 使用 Keras 进行图像识别?

I have tried the following code but when I run pca.fit() code, the code still running for hours and the RAM become full.我已经尝试了以下代码,但是当我运行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)

you can use truncated SVD instead.您可以改用截断的 SVD。 Another method that you can use is, IncrementalPCA PCA.您可以使用的另一种方法是 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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM