如何为keras子类别模型

时间:2018-08-08 16:11:41

标签: python tensorflow keras keras-layer

我正在像tensorflow guide

中那样对keras模型进行子类化
class Decoder(tf.keras.Model):
    def __init__(self):
        super(Decoder, self).__init__()
        self.gru = GRU(32, return_sequences=True, return_state=True)
        self.dense = Dense(4, name='decoder_dense')

    def call(self, inputs):
        input, hidden = inputs
        gru_output, state = self.gru(input, initial_state=hidden)
        outputs = self.dense(gru_output)
        return outputs, state

    def compute_output_shape(self, input_shape):
        return input_shape

 my_model = Decoder()

在这种情况下,我无法访问my_decoder.input_shape并收到错误消息 AttributeError: The layer has never been called and thus has no defined input shape.

如果我使用keras功能API创建模型,则参数my_model.built将自动设置为True,并且我可以访问input_shape。这对我来说完全有意义,因为在功能性API中,我明确地为Input()层提供了形状

所以,我的问题是,在拟合数据之前,我该怎么做才能在keras子类化模型中访问input_shape

0 个答案:

没有答案