google-research / big_transfer

Official repository for the "Big Transfer (BiT): General Visual Representation Learning" paper.
https://arxiv.org/abs/1912.11370
Apache License 2.0
1.5k stars 175 forks source link

AttributeError: Layer block2 has no inbound nodes. #31

Open himanshurawlani opened 4 years ago

himanshurawlani commented 4 years ago

I'm trying to build an FPN network using the ResnetV2 backbone as implemented in TF2 models.py here. I have appended the below lines to the models.py:

if __name__ == "__main__":
    args_model = "BiT-M-R50x1"
    model = ResnetV2(
            num_units=NUM_UNITS[args_model],
            # num_outputs=21843,
            num_outputs=None,
            filters_factor=int(args_model[-1])*4,
            name="resnet",
            trainable=True,
            dtype=tf.float32)

    model.build((None, None, None, 3))

    # Get output layers.
    layer_names = ["block2", "block3", "block4"]
    layer_outputs = [model.get_layer(name).output for name in layer_names]
    for layer in layer_outputs:
        print(layer.shape)

I need to get the output of intermediate layers like block2, block3, and block4 in order to build the FPN pyramid, but while fetching the output of these layers I get the following error:

Traceback (most recent call last):
  File ".../big_transfer/bit_tf2/models.py", line 301, in <module>
    layer_outputs = [model.get_layer(name).output for name in layer_names]
  File ".../big_transfer/bit_tf2/models.py", line 301, in <listcomp>
    layer_outputs = [model.get_layer(name).output for name in layer_names]
  File "/home/himanshu/.conda/envs/tf2/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer.py", line 1827, in output
    raise AttributeError('Layer ' + self.name + ' has no inbound nodes.')
AttributeError: Layer block2 has no inbound nodes.

I want to use the pre-trained weights to initialize the FPN network later and hence didn't make any changes to the model code. Any suggestions on how do I solve this error?