Keras输入形状错误

时间:2020-08-17 19:17:29

标签: tensorflow keras

我有一个继承自tf.keras.model的类:

class MyModel(tf.keras.Model):

def __init__(...):
        super(MyModel, self).__init__()
        self.input_layer = InputLayer(input_shape=(num_states,))
        self.hidden_layer = ConcreteDropout(Dense(i, activation='relu'),weight_regularizer=wd, dropout_regularizer=dd))
        self.output_layer = tf.keras.layers.Dense(num_actions, activation='linear', kernel_initializer='RandomNormal')


def call(self,inputs):
     z = self.input_layer(inputs)
     z, loss = self.hidden_layer(z)
     output = self.output_layer(z)
class ConcreteDropout(Wrapper):

def build(self, input_shape=None):        
    self.input_spec = InputSpec(shape=input_shape)
    ...

def call(self, inputs, training=True):
    ...
    return self.layer.call(self.concrete_dropout(inputs, p)), regularizer

我的问题是,当我将MyModel的调用函数中的具体Dropout层的batch_size(input_spec的一部分)设置为1时,后来又用实际的batch_size调用模型时,输入不匹配。

这里是仓库的link,我从中获得了具体的Dropout层。他们使用model.compile,而我想使用Gradient.tape

我已经花了几个小时进行调试。有人可以给我指点如何在MyModel class / Gradient.tape中使Concrete Dropout类起作用。我有Pytorch的背景,现在有点迷路了;(

0 个答案:

没有答案