Я тренирую шумоподавляющий автоэнкодер в Tensorflow 2, одна часть времени работы тратится на ЦП, выполняющего маскировку части входных данных, случайным образом выбирая индексы, которые должны быть замаскированы, затем устанавливая их значения на ноль. Это моя маскирующая функция, эта маскировка повторяется в начале каждой эпохи при различных значениях v:
import numpy as np
def masking_noise(X, v):
X_noise = X.copy()
n_samples = X.shape[0]
n_features = X.shape[1]
v = int(np.round(n_features*v))
for i in range(n_samples):
mask = np.random.choice(n_features, v, replace=False)
for m in mask:
X_noise[i][m] = np.repeat(0.,X.shape[2])
return X_noise
Вот пример игрушки:
a = np.array([[[1., 0.],
[1., 0.],
[1., 0.],
[1., 0.],
[0., 1.]],
[[1., 0.],
[1., 0.],
[1., 0.],
[1., 1.],
[0., 1.]],
[[1., 0.],
[1., 0.],
[1., 0.],
[1., 0.],
[1., 1.]]])
masking_noise(a, 0.40)
Вывод:
array([[[1., 0.],
[0., 0.],
[1., 0.],
[1., 0.],
[0., 0.]],
[[0., 0.],
[0., 0.],
[1., 0.],
[1., 1.],
[0., 1.]],
[[1., 0.],
[1., 0.],
[1., 0.],
[0., 0.],
[0., 0.]]])
Мой вопрос: как я могу сделать ту же операцию маскировки в Tensorflow?