Что означает аргумент `order` в` tf.keras.utils.normalize () `? - PullRequest
1 голос
/ 30 сентября 2019

Рассмотрим следующий код:

import numpy as np

A = np.array([[.8, .6], [.1, 0]])
B1 = tf.keras.utils.normalize(A, axis=0, order=1)
B2 = tf.keras.utils.normalize(A, axis=0, order=2)

print('A:')
print(A)
print('B1:')
print(B1)
print('B2:')
print(B2)

, который возвращает

A:
[[0.8 0.6]
 [0.1 0. ]]
B1:
[[0.88888889 1.        ]
 [0.11111111 0.        ]]
B2:
[[0.99227788 1.        ]
 [0.12403473 0.        ]]

Я понимаю, как B1 вычисляется через order=1, так что каждая запись в A делитсяпо сумме элементов в его столбце. Например, 0.8 становится 0.8/(0.8+0.1) = 0.888. Тем не менее, я просто не могу понять, как order=2 производит B2, и не могу найти какую-либо документацию по этому поводу.

Ответы [ 3 ]

1 голос
/ 01 октября 2019

Тем не менее, я просто не могу понять, как order = 2 создает B2, и не могу найти какую-либо документацию по этому поводу.

order=1 означает норму L1, тогда как order=2 означаетL2 норма. Для нормы L2 Вам необходимо взять квадратный корень после суммирования отдельных квадратов. Какие элементы для квадрата зависят от оси.

Керас

A = np.array([[.8, .6], [.1, 0]])
B2 = tf.keras.utils.normalize(A, axis=0, order=2)
print(B2)

array([[0.99227788, 1.        ],
       [0.12403473, 0.        ]])

Ручная

B2_manual = np.zeros((2,2))
B2_manual[0][0] = 0.8/np.sqrt(0.8 ** 2 + 0.1 ** 2)
B2_manual[1][0] = 0.1/np.sqrt(0.8 ** 2 + 0.1 ** 2)
B2_manual[0][1] = 0.6/np.sqrt(0.6 ** 2 + 0 ** 2)
B2_manual[1][1] =  0 /np.sqrt(0.6 ** 2 + 0 ** 2)
print(B2_manual)

array([[0.99227788, 1.        ],
       [0.12403473, 0.        ]])

Вы можете посмотретьразличные типы норм здесь: https://en.wikipedia.org/wiki/Norm_(mathematics) Сработанные примеры: https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.norm.html

0 голосов
/ 30 сентября 2019

Пропуск порядка 2 в параметре order означает, что вы будете применять регуляризацию Тихонова , широко известную как L2 или Хребет . L1 и L2 - это разные методы регуляризации, с плюсами и минусами, которые вы можете подробно прочитать здесь, в википедии и здесь, в kaggle . Подход для L2 состоит в том, чтобы решить стандартное уравнение для восстановления, при вычислении остаточной суммы квадратов добавляя дополнительный член λβTβ , который является квадратом транспонированной бета-матрицы (поэтому он называется L2, потому чтоSqaure).

0 голосов
/ 30 сентября 2019

Порядок 1 нормализует входные данные таким образом, что сумма абсолютных значений всех элементов равна 1 (L1 норма входного значения равна 1). Порядок 2 нормализует входные данные таким образом, что сумма квадратов всех элементов равна 1 (норма L2 входного значения равна 1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...