keras中的zca_whtening白化处理

白化:是一个比PCA稍微高级一点的算法。白化的目的就是去除输入数据中的冗余信息,假设训练数据是图像,由于图像中相邻的像素之间有很强的相关性,所以用于训练时输入是冗余的,白化的目的就是降低输入的冗余性。

其实从高光谱遥感影像的角度上,可能是可以一试的预处理。

输入数据集X,经过白化之后:

1.特征之间相关性较低。

2.所有特征具有相同的方差。

PCA作为降维算法,一般通过求出原数据的特征向量,再把原数据映射到特征向量空间内,实现了特征之间的低相关性。实现白化的第一步就是PCA,求出新特征空间中的X的坐标,在对新坐标进行方差归一化操作。


举个例子:

keras中的zca_whtening白化处理_第1张图片

白化之后:

keras中的zca_whtening白化处理_第2张图片

代码:

import matplotlib.pyplot as  plt
import glob
from PIL import Image
from keras.preprocessing import image
import numpy as np

path = 'train/'
gen_path = 'result/'

def print_result(path):
    name_list = glob.glob(path)
    fig = plt.figure()
    for i in range(9):
        img = Image.open(name_list[i])
        # add_subplot(331) 参数一:子图总行数,参数二:子图总列数,参数三:子图位置
        sub_img = fig.add_subplot(331 + i)
        sub_img.imshow(img)
    plt.show()
    return fig

datagen = image.ImageDataGenerator(zca_whitening=True)

gen = image.ImageDataGenerator()

data = gen.flow_from_directory(path, batch_size=1, class_mode=None, shuffle=True, target_size=(36, 36))
np_data = np.concatenate([data.next() for i in range(1)])

datagen.fit(np_data)

gen_data = datagen.flow_from_directory(path, batch_size=1, shuffle=False, save_to_dir=gen_path + '3', save_prefix='gen',
                                       target_size=(36, 36))

for i in range(9):
    gen_data.next()

fig = print_result(gen_path + '3/*')

fig.savefig(gen_path + '3/zcawhtening.png', dpi=200)



你可能感兴趣的:(深度学习)