title: AttributeError: can't set attribute,
body: <p>I have this vgg model. Which I am using to extract an image features. But I am getting an attribute error: I can't seem to understand the error. I am using keras 2.2.4 and tensorflow 1.13.1 with python 3.7.3. I am using anaconda with spyder as IDE. </p>
  
  <pre><code>
  import numpy as np
  import warnings
  
  
  #tf.compat.v1.reset_default_graph()
  
  from tensorflow.keras.models import Model
  from tensorflow.keras.layers import Flatten
  from tensorflow.keras.layers import Dense
  from tensorflow.keras.layers import Input
  from tensorflow.keras.layers import Conv2D
  from tensorflow.keras.layers import MaxPooling2D
  from tensorflow.keras.layers import GlobalMaxPooling2D
  from tensorflow.keras.layers import GlobalAveragePooling2D
  from tensorflow.keras.preprocessing import image
  from tensorflow.python.keras.utils import layer_utils , get_source_inputs
  from tensorflow.python.keras.utils.data_utils import get_file
  from tensorflow.python.keras import backend as K
  from tensorflow.python.keras.applications.imagenet_utils import decode_predictions
  from tensorflow.python.keras.applications.imagenet_utils import preprocess_input
  from keras_applications.imagenet_utils import _obtain_input_shape
  #from keras.engine.topology import get_source_inputs
  
  #from tensorflow.python.keras.utils.layer_utils import get_source_inputs
  
  
  WEIGHTS_PATH = 'https://github.com/fchollet/deep-learning-models/releases/download/v0.1/vgg16_weights_tf_dim_ordering_tf_kernels.h5'
  WEIGHTS_PATH_NO_TOP = 'https://github.com/fchollet/deep-learning-models/releases/download/v0.1/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5'
  
  import ssl
  
  ssl._create_default_https_context = ssl._create_unverified_context
  
  def VGG16(include_top=True, weights='imagenet',
            input_tensor=None, input_shape=None,
            pooling=None,
            classes=1000):
  
      if weights not in {'imagenet', None}:
          raise ValueError('The `weights` argument should be either '
                           '`None` (random initialization) or `imagenet` '
                           '(pre-training on ImageNet).')
  
      if weights == 'imagenet' and include_top and classes != 1000:
          raise ValueError('If using `weights` as imagenet with `include_top`'
                           ' as true, `classes` should be 1000')
      # Determine proper input shape
      input_shape = _obtain_input_shape(input_shape,
                                        default_size=224,
                                        min_size=48,
                                        data_format=K.image_data_format(),
                                        require_flatten=include_top)
  
      if input_tensor is None:
          img_input = Input(shape=input_shape)
      else:
          if not K.is_keras_tensor(input_tensor):
              img_input = Input(tensor=input_tensor, shape=input_shape)
          else:
              img_input = input_tensor
      # Block 1
      x = Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv1')(img_input)
      x = Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv2')(x)
      x = MaxPooling2D((2, 2), strides=(2, 2), name='block1_pool')(x)
  
      # Block 2
      x = Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv1')(x)
      x = Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv2')(x)
      x = MaxPooling2D((2, 2), strides=(2, 2), name='block2_pool')(x)
  
      # Block 3
      x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv1')(x)
      x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv2')(x)
      x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv3')(x)
      x = MaxPooling2D((2, 2), strides=(2, 2), name='block3_pool')(x)
  
      # Block 4
      x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv1')(x)
      x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv2')(x)
      x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv3')(x)
      x = MaxPooling2D((2, 2), strides=(2, 2), name='block4_pool')(x)
  
      # Block 5
      x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv1')(x)
      x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv2')(x)
      x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv3')(x)
      x = MaxPooling2D((2, 2), strides=(2, 2), name='block5_pool')(x)
  
      if include_top:
          # Classification block
          x = Flatten(name='flatten')(x)
          x = Dense(4096, activation='relu', name='fc1')(x)
          x = Dense(4096, activation='relu', name='fc2')(x)
          x = Dense(classes, activation='softmax', name='predictions')(x)
      else:
          if pooling == 'avg':
              x = GlobalAveragePooling2D()(x)
          elif pooling == 'max':
              x = GlobalMaxPooling2D()(x)
  
      # Ensure that the model takes into account
      # any potential predecessors of `input_tensor`.
      if input_tensor is not None:
          inputs = get_source_inputs(input_tensor)
      else:
          inputs = img_input
      # Create model.
      model = Model(inputs, x, name='vgg16')
  
      # load weights
      if weights == 'imagenet':
          if include_top:
              weights_path = get_file('vgg16_weights_tf_dim_ordering_tf_kernels.h5',
                                      WEIGHTS_PATH,
                                     )
          else:
              weights_path = get_file('vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5',
                                      WEIGHTS_PATH_NO_TOP,
                                      cache_subdir='models')
          model.load_weights(weights_path)
          if K.backend() == 'theano':
              layer_utils.convert_all_kernels_in_model(model)
  
          if K.image_data_format() == 'channels_first':
              if include_top:
                  maxpool = model.get_layer(name='block5_pool')
                  shape = maxpool.output_shape[1:]
                  dense = model.get_layer(name='fc1')
                  layer_utils.convert_dense_weights_data_format(dense, shape, 'channels_first')
  
              if K.backend() == 'tensorflow':
                  warnings.warn('You are using the TensorFlow backend, yet you '
                                'are using the Theano '
                                'image data format convention '
                                '(`image_data_format="channels_first"`). '
                                'For best performance, set '
                                '`image_data_format="channels_last"` in '
                                'your Keras config '
                                'at ~/.keras/keras.json.')
      model.layers.pop() # Get rid of the classification layer
      model.outputs = [model.layers[-1].output]
      model.layers[-1].outbound_nodes = [ ]
      return model```
  
  </code></pre>
  
  <p>I am getting the following error on the second last line of the code:</p>
  
  <pre><code>File "/home/natsu/Final_code/vgg16.py", line 200, in VGG16
  
      model.layers[-1].outbound_nodes = []
  
    File "/home/natsu/anaconda3/envs/py-env/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer.py", line 1639, in __setattr__
      super(Layer, self).__setattr__(name, value)
  
  AttributeError: can't set attribute```
  </code></pre>