嵌套自定义类的Keras模型子类

时间:2020-08-11 23:04:19

标签: keras model tf.keras subclassing

我正在尝试构建Model类的子类的Keras模型,但找不到与Model类的子类的嵌套模型相关的任何东西。

我的模型由两个编码器(它们不共享权重)和一个完全连接的部分组成。

为此,我创建了以下两个类(我省略了一些代码,因为我认为这并不相关,但是如果需要的话,我将全部发布):

class EncoderModel(tf.keras.Model):
    def __init__(self, vocabulary_size, embedding_matrix, max_len):
        super(EncoderModel, self).__init__()
        """Code here"""

    def call(self, inputs):
        """Code here"""

class class EntailmentModel(tf.keras.Model):
   def __init__(self, vocabulary_size, embedding_matrix, max_len):
       super(EntailmentModel, self).__init__()
       # Left branch
       self.left_encoder = EncoderModel(vocabulary_size, embedding_matrix, max_len)
       self.right_encoder = EncoderModel(vocabulary_size, embedding_matrix, max_len)
    
       """Omitted code"""
    
   def call(self, inputs):
       left_enc_out = self.left_encoder(inputs[0])
       right_enc_out = self.right_encoder(inputs[1])
    
       """Omitted code"""

我创建并编译模型没有任何问题

enc = EntailmentModel(vocabulary_size, embedding_matrix, 40)
enc.compile(optimizer="Adam", loss='categorical_crossentropy', metrics=['accuracy'])

但是当我开始训练模型时,在执行第一批之后,我会收到以下错误消息

AttributeError:“ EntailmentModel”对象没有属性“ loss_functions”

这是我第一次在Keras中使用Model子类,并且不确定在嵌套两个不同模型时我做错了什么。

有人可以告诉我我在做什么错吗?

Model structure

0 个答案:

没有答案
相关问题