[英]Poisson/non-negative gaussian noise data augmentation in Keras
在將能量分布的“圖像”傳遞給 CNN 之前,我正在使用 Keras 進行一些數據增強。 我想給圖像添加一些噪點,但是這個噪點不能小於 0。
數據位於形狀為 (5000,29,29) 的 numpy 數組中,數據增強的代碼目前為:
data_augmentation = keras.Sequential([
keras.layers.experimental.preprocessing.RandomFlip(),
keras.layers.GaussianNoise(1)
], name='DataAugm')
有沒有辦法添加泊松噪聲,這顯然已經是非負的,或者具有被截斷到數據增強層的負值的高斯噪聲,或者我是否必須在將其解析到 NN 之前手動將其添加到數據中?
編輯:遵循此處給出的建議: 如何在 Keras 中向輸入數據添加均勻分布的噪聲?
我像這樣創建了一個 class :
class noiseLayer(keras.layers.Layer):
def __init__(self,mean):
super(noiseLayer, self).__init__()
self.mean = mean
def call(self, input):
mean = self.mean
return input + np.random.poisson(mean)
我將它添加到我的數據增強中,如下所示:
data_augmentation = keras.Sequential([
keras.layers.experimental.preprocessing.RandomFlip(),
noiseLayer(mean = 1)(x)
], name='DataAugm')
但我收到錯誤:添加的層必須是 class 層的實例。 找到:Tensor("noise_layer_8/Identity:0", shape=(None, 29, 29, 1), dtype=float32)
我不明白為什么定義為 keras.layer 的 class 實際上不被視為一個層。
有人可以幫我解決這個問題嗎?
第二次編輯以刪除 tf.keras,因為我已經讀到問題可能是 tf.keras 層和 keras 層之間的兼容性,但是我仍然遇到相同的錯誤
備查:
根據youngseok jeon 在我上面鏈接的線程上的建議,問題似乎在於包含(x)。
改為使用:
data_augmentation = keras.Sequential([
keras.layers.experimental.preprocessing.RandomFlip(),
noiseLayer(mean = 1)
], name='DataAugm')
代碼運行沒有錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.