簡體   English   中英

Keras 中的泊松/非負高斯噪聲數據增強

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM