ZCA отбеливание в питоне для машинного обучения

Я тренирую 1000 изображений размером 28х28. Но перед тренировкой я выполняю ZCA-отбеливание своих данных, взяв ссылку из раздела Как реализовать 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

1 ответ

Решение

Я получил ссылку из кода Keras, доступного здесь.

Ясно, что в моем случае матрица ковариации даст матрицу 784х784, на которой выполняется декомпозиция сингулярного значения. Это дает 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 отбеленное изображение.

Другие вопросы по тегам