Какова цель утилизации керасов? - PullRequest
0 голосов
/ 29 сентября 2018

Я хотел бы нормализовать свой тренировочный набор, прежде чем передать его в свой NN, поэтому вместо того, чтобы делать это вручную (вычесть среднее значение и разделить на стандартное отклонение), я попытался keras.utils.normalize(), и я поражен результатами, которые я получил.

Запуск этого:

r = np.random.rand(3000) * 1000
nr = normalize(r)
print(np.mean(r))
print(np.mean(nr))
print(np.std(r))
print(np.std(nr))
print(np.min(r))
print(np.min(nr))
print(np.max(r))
print(np.max(nr))

Результатов этого:

495.60440066771866
0.015737914577213984
291.4440194021
0.009254802974329002
0.20755517410064872
6.590913227674956e-06
999.7631481267636
0.03174747238214018

К сожалению, документы не объясняют, что происходит под капотом,Не могли бы вы объяснить, что он делает, и если бы я использовал keras.utils.normalize вместо того, что я бы сделал вручную?

1 Ответ

0 голосов
/ 29 сентября 2018

Это не та нормализация, которую вы ожидаете.На самом деле, it использует np.linalg.norm() под капотом для нормализации данных с использованием Lp-норм:

def normalize(x, axis=-1, order=2):
    """Normalizes a Numpy array.
    # Arguments
        x: Numpy array to normalize.
        axis: axis along which to normalize.
        order: Normalization order (e.g. 2 for L2 norm).
    # Returns
        A normalized copy of the array.
    """
    l2 = np.atleast_1d(np.linalg.norm(x, order, axis))
    l2[l2 == 0] = 1
    return x / np.expand_dims(l2, axis)

Например, в случае по умолчанию этонормализует данные, используя L2-нормализацию (т.е. сумма квадратов элементов будет равна единице).

Вы можете использовать эту функцию, или если вы не хотите выполнять нормализацию среднего и стандартного значений вручнуюВы можете использовать StandardScaler() от Sklearn или даже MinMaxScaler().

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