簡體   English   中英

tensorflow/keras 中的自定義層 - 這兩個選項是否相等?

[英]Custom layers in tensorflow/keras - are these two options equal?

根據https://www.tensorflow.org/guide/keras/custom_layers_and_models#layers_are_recursively_composable custom layers in tensorflow2 / Z063009BB15C8272CF2ZB0C7 可以這樣定義

class CustomLayer(layers.Layer):
    def __init__(self, ntimes):
        super().__init__()
        self.convs = [layers.Conv2D(10, (3, 3),  padding='same') for i in range(ntimes)]

    def call(self, x, **kwargs):
        for conv in self.convs:
            x = conv(x)
        return x

但是,最近我遇到了另一種表示法:

def CustomLayer(ntimes):
    def layer(x):
        for i in range(ntimes):
            x = layers.Conv2D(10, (3, 3), padding='same')(x)
        return x

    return layer

顯然它不是 Layer 類的實例,但結果操作似乎是相同的。 還是我錯過了什么? 這種方法有什么缺點嗎?


Ps:這樣的層將在以下示例性上下文中使用:

xin = layers.Input((10,10,3))
layer = CustomLayer(5)
xout = layer(xin)
model = models.Model(xin, xout)
model.summary()

在我看來,您正在做的是創建一個具有預定義功能的圖層塊,而不是創建一個新的自定義圖層。 為了詳細說明,您可以單獨訪問塊中的每一層,因此它不是層。 創建塊可以使用兩者來完成,但如果您想在層內實現自己的功能或進行一些修改,例如在每個時期打印該層的結果或其他特定層的結果,那么您需要使用第一種方法.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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