1

我正在训练 1000 张 28x28 大小的图像。但在训练之前,我通过参考如何实施 ZCA 美白?蟒蛇

由于我有 1000 个大小为 28x28 的数据图像,经过展平后,它变为 1000x784。但如下代码所示,X 是否是我的 1000x784 图像数据集?

如果是这样,则意味着 ZCAMatrix 大小为 1000x1000。在这种情况下,对于预测,我有一个大小为 28x28 的图像,或者我们可以说,大小为 1x784。因此将 ZCAMatrix 与图像相乘是没有意义的。

所以我认为,X 是图像数据集的转置。我对吗?如果我是对的,那么 ZCAMatrix 的大小是 784x784。

现在我应该如何计算 ZCA 白化图像,我应该使用np.dot(ZCAMatrix, transpose_of_image_to_be_predict)还是np.dot(image_to_be_predict, ZCAMatrix)?建议将不胜感激。

def zca_whitening_matrix(X):
    """
    Function to compute ZCA whitening matrix (aka Mahalanobis whitening).
    INPUT:  X: [M x N] matrix.
        Rows: Variables
        Columns: Observations
    OUTPUT: ZCAMatrix: [M x M] matrix
    """
    # Covariance matrix [column-wise variables]: Sigma = (X-mu)' * (X-mu) / N
    sigma = np.cov(X, rowvar=True) # [M x M]
    # Singular Value Decomposition. X = U * np.diag(S) * V
    U,S,V = np.linalg.svd(sigma)
        # U: [M x M] eigenvectors of sigma.
        # S: [M x 1] eigenvalues of sigma.
        # V: [M x M] transpose of U
    # Whitening constant: prevents division by zero
    epsilon = 1e-5
    # ZCA Whitening matrix: U * Lambda * U'
    ZCAMatrix = np.dot(U, np.dot(np.diag(1.0/np.sqrt(S + epsilon)), U.T)) # [M x M]
    return ZCAMatrix

以及一个使用示例:

X = np.array([[0, 2, 2], [1, 1, 0], [2, 0, 1], [1, 3, 5], [10, 10, 10] ]) # Input: X [5 x 3] matrix
ZCAMatrix = zca_whitening_matrix(X) # get ZCAMatrix
ZCAMatrix # [5 x 5] matrix
xZCAMatrix = np.dot(ZCAMatrix, X) # project X onto the ZCAMatrix
xZCAMatrix # [5 x 3] matrix
4

1 回答 1

2

我从此处提供的 Keras 代码中获得了参考。

很明显,在我的情况下,协方差矩阵将给出 784x784 矩阵,在该矩阵上执行奇异值分解。它给出了 3 个矩阵,用于计算principal_components,该principal_components用于查找 ZCA 白化数据。

现在我的问题是

我应该如何计算 ZCA 白化图像,我应该使用 np.dot(ZCAMatrix, transpose_of_image_to_be_predict) 还是 np.dot(image_to_be_predict, ZCAMatrix)?建议将不胜感激。

为此,我从这里得到了参考。

这里我需要使用np.dot(image_to_be_predict, ZCAMatrix)ZCA白化图像来计算。

于 2017-07-11T12:55:41.807 回答