繁体   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