簡體   English   中英

如何使用 Model 子類化 API 在我的 model 中實現自定義 PCA 層?

[英]How can I implement a custom PCA layer in my model using Model Subclassing API?

我正在嘗試為正在使用 Model 子類 API 開發的 model 實現自定義 PCA 層。這就是我定義層的方式。

class PCALayer(tf.keras.layers.Layer):
    def __init__(self):
        super(PCALayer, self).__init__()
    
        self.pc = pca

    def call(self, input_tensor, training=False):
       x = K.constant(self.pc.transform(input_tensor)) 
       return x 

pca 本身來自sklearn.decomposition.PCA並且已經適合所需的數據並且沒有被轉換。

現在,這就是我將圖層添加到我的 model 的方式

class ModelSubClassing(tf.keras.Model):
    def __init__(self, initizlizer):
        super(ModelSubClassing, self).__init__()
        # define all layers in init
        # Layer of Block 1
        self.pca_layer = PCALayer()
        self.dense1 = tf.keras.layers.Dense(...)
        self.dense2 = tf.keras.layers.Dense(...)
        self.dense3 = tf.keras.layers.Dense(...)


    def call(self, input_tensor, training=False):
        # forward pass: block 1 
        x = self.pca_layer(input_tensor)
        x = self.dense1(x)
        x = self.dense2(x)
        
        return self.dense3(x)

當我編譯 model 時沒有錯誤。 但是,當我安裝 model 時,出現以下錯誤:

NotImplementedError: Cannot convert a symbolic Tensor (model_sub_classing_1/Cast:0) to a numpy array. This error may indicate that you're trying to pass a Tensor to a NumPy call, which is not supported

誰能幫幫我...

來自self.pc.transform的 self.pc.transform 需要一個 numpy 數組,但您提供了一個 tf 張量。 構建圖層時,它傳遞一個符號張量來構建圖形等,而這個張量不能轉換為 numpy 數組。 答案有誤:

您正在嘗試將 Tensor 傳遞給 NumPy 調用,這是不支持的

暫無
暫無

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

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