在去噪自編碼器中,模型的輸入是原始的輸入經過某種形式的加噪過程后的衰弱的形式,所以加噪聲一般分為:加高斯白噪聲,掩模噪聲,椒鹽噪聲。
1.加性高斯噪聲
self.scale = tf,placeholder(dtype = tf.float32)
self.x_corrupted = tf.add(self.x, self.scale*tf.random_normal(shape = (self.n_input,)))
2.掩模噪聲
self.keep_prob = tf.placeholder(dtype = tf.float32)
self.x_corrupted = tf.nn.dropout(self.x, self.keep_prob)
3.椒鹽噪聲
def salt_and_pepper_noise(X,v)
X_noise = X.copy()
n_features = X.shape[1]
mn = X.min()
mx = X.max()
for i,sample in enumerate(X):
mask = np.random.randint(0,n_features,v)
for m in mask:
if np.random.rand() < .5:
X_noise[i][m] = mn
else:
X_noise[i][m] = mx
return X_noise
講解:
1. enumerate(X):
此函數是python內帶的一個函數,它的功能就是對一個可迭代,可遍歷的對象組成一個序列,可以同時獲取索引和值,說白了就是將一個個列表,字符串都全都團在一起,然后呢,用這個函數可以返回其中的每個元素,並返回每個元素所在的位置坐標。
要是我們呢既想遍歷元素,又要遍歷索引(元素所在的位置)就可以用for 循環來實現,就像上面的椒鹽噪聲添加的時候一樣,i就是索引(元素的位置),sample就是每個元素
2..np.random.randint(low,high,size)
這個函數看起來就很簡單了,隨即產生一些數,這些數是什么呢,就是在定義的最大值和最小值之間來取,那么我們取多少呢,就看size,如果是1.......n之間的數字就會產生一行n列的元素,若是類似於(1,3),(2,6)等,那么就會形成一個數組矩陣
只有low
np.random.randint(2,size = 5)
array([0,1,1,1,1])
np.random.randint(5,size = (3,4))
array([[1,2,3,4],
[2,3,4,1],
[2,1,4,0]])
WARNING:low的值是取不到的,若是有high,則[low,high),也就是high取不到
