我正在像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