PCA和ZCA的原理关系:https://my.oschina.net/findbill/blog/543485
python实现:
"""
tensorflow调用ZCA例子,先把数据归一化到[-1,1],然后将[b, h, w, c]变成[b, h*w*c]形式未给ZCA函数。
temp_data = train_data.train_data.astype(float)
temp_data = temp_data.astype(float)
temp_data[:, :, :, 0] = ((temp_data[:, :, :, 0] - 125.3)) / (63.0)
temp_data[:, :, :, 1] = ((temp_data[:, :, :, 1] - 123.0)) / (62.1)
temp_data[:, :, :, 2] = ((temp_data[:, :, :, 2] - 113.9)) / (66.7)
temp_data = np.transpose(temp_data, (0, 3, 1, 2))
temp_data = temp_data.reshape(temp_data.shape[0], temp_data.shape[1] * temp_data.shape[2] * temp_data.shape[3])
components, mean, whiten = ZCA(temp_data)
np.save('data/cifar10/zca_components', components)
np.save('data/cifar10/zca_mean', mean)
"""
import numpy as np
def pca(data):
#[btach, feature] 输入的图片要转化为向量形式