如何将Keras-高斯噪声添加到图像数据

时间:2020-05-16 18:18:46

标签: python tensorflow keras

导入模块:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras.layers import GaussianNoise
from tensorflow.keras.datasets import mnist

(X_train, y_train), (X_test, y_test) = mnist.load_data()

重新缩放数据

X_train = X_train/255
X_test = X_test/255
plt.imshow(X_train[0])

使用std dev = 0.2添加高斯噪声

sample = GaussianNoise(0.2)
noisey = sample(X_test[0:2],training=True)   #plt.imshow(noisey[0])

获取错误:

ValueError: Tensor conversion requested dtype float64 for Tensor with dtype float32: 'Tensor("gaussian_noise_4_1/random_normal:0", shape=(2, 28, 28), dtype=float32)'

2 个答案:

答案 0 :(得分:2)

类型转换非常昂贵,因此Tensorflow不会执行自动类型转换。默认情况下,Tensorflow的dtype为float32,而导入的数据集的dtype为float64。您只需将可选的dtype参数传递给GaussianNoise

sample = GaussianNoise(0.2, dtype=tf.float64)

或强制转换数组:

noisey = sample(X_test[0:2].astype(np.float32),training=True)

您可以通过许多不同的方式执行此操作:重要的是它们必须协调一致。

答案 1 :(得分:0)

我在Jupyter Notebook的本地主机中尝试了此操作,以下是带有警告的结果。

Attempt with warning

从警告中可以明显看出类型转换的问题非常昂贵。 您可以将其改进为:

X_train = X_train.astype('float32') / 255

X_test = X_test.astype('float32') / 255