我试图理解去噪自动编码器。我已经按照这个keras教程 - https://blog.keras.io/building-autoencoders-in-keras.html
了在本教程中,通过以下列方式添加人工噪声来创建训练数据:
x_train_noisy = x_train + noise_factor * np.random.normal(loc=0.0, scale=1.0, size=x_train.shape)
x_test_noisy = x_test + noise_factor * np.random.normal(loc=0.0, scale=1.0, size=x_test.shape)
产生:
这意味着MINST数据集中的噪声和基础数据的值介于0和1之间。
我试图用很少的人工噪音训练模型,但是在-5到5的间隔内如下:
def noise_matrix(arr, num, min, max):
m = np.product(arr.shape)
arr.ravel()[np.random.randint(0, m, size=num)] = np.random.uniform(min, max, num)
return arr
x_train_noisy = noise_matrix(x_train, x_train.shape[0] * 2, -5, 5)
x_test_noisy = noise_matrix(x_test, x_test.shape[0] * 2, -5, 5)
产生:
(上图中对比度的差异是由matplotlib
库中的隐式规范化引起的)
现在,当我训练自动编码器并应用模型时,我得到以下结果:
大部分噪音未被删除。为了消除区间(-5,5)
中的噪音,我需要执行哪些步骤?在将噪声添加到区间(0,1)
之后,我尝试将所有数据标准化,但这不是可行的方法(使用此方法我的结果非常糟糕)。
答案 0 :(得分:0)
解码后的图像仍有明显的噪点。由于您没有提供用于自动编码器的代码,因此我猜您正在将其安装在噪声数据ae.fit(x=x_noised, y=x_noised)
上,
而您应该适合原始数据:
ae.fit(x=x_noised, y=x_original)