Убедитесь, что keras GaussianNoise включен во время поезда при использовании логического вывода с Эдвардом

Я хотел бы проверить, действительно ли шум добавляется и используется во время обучения моей нейронной сети. Поэтому я строю свой NN с помощью керас так:

from keras.layers import Input
from keras.layers.noise import GaussianNoise
inp = Input(tensor=self.X_ph)
noised_x = GaussianNoise(stddev=self.x_noise_std)(inp)
x = Dense(15, activation='elu')(noised_x)
x = Dense(15, activation='elu')(x)
self.estimator = x
...
# kernel weights, as output by the neural network
self.logits = logits = Dense(n_locs * self.n_scales, activation='softplus')(self.estimator)
self.weights = tf.nn.softmax(logits)

# mixture distributions
self.cat = cat = Categorical(logits=logits)
self.components = components = [MultivariateNormalDiag(loc=loc, scale_diag=scale) for loc in locs_array for scale in scales_array]
self.mixtures = mixtures = Mixture(cat=cat, components=components, value=tf.zeros_like(self.y_ph))

Затем я использую Эдварда для выполнения вывода:

self.inference = ed.MAP(data={self.mixtures: self.y_ph})
self.inference.initialize(var_list=tf.trainable_variables(), n_iter=self.n_training_epochs)
tf.global_variables_initializer().run()

Согласно документации, ближе всего я получаю это через ed.MAP's run() а также update() функции.

Предпочтительно, я бы сделал что-то вроде этого:

noised_x = self.sess.run(self.X_ph, feed_dict={self.X_ph: X, self.y_ph: Y}) 
np.allclose(noised_x, X) --> False

Как я могу правильно проверить, что шум используется во время поезда и отключен во время теста в ed.MAP?

Обновление 1

Видимо, то, как я использую GaussianNoise, похоже, не добавляет шума к моему входу, так как следующий юнит-тест не проходит:

X, Y = self.get_samples(std=1.0)

model_no_noise = KernelMixtureNetwork(n_centers=5, x_noise_std=None, y_noise_std=None)
model_no_noise.fit(X,Y)
var_no_noise = model_no_noise.covariance(x_cond=np.array([[2]]))[0][0][0]

model_noise = KernelMixtureNetwork(n_centers=5, x_noise_std=20.0, y_noise_std=20.0)
model_noise.fit(X, Y)
var_noise = model_noise.covariance(x_cond=np.array([[2]]))[0][0][0]
self.assertGreaterEqual(var_noise - var_no_noise, 0.1)

Я также убедился, что во время inference.update(...) утверждениеassert tf.keras.backend.learning_phase() == 1проходит.

Где что-то могло пойти не так?

0 ответов

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