'Value error in using get_weights() for xception

I am trying to access the filters and biases using get_weights() for Xception network. It's showing value error- ValueError: not enough values to unpack (expected 2, got 1). The code I am using -

model = Xception()
model.summary()
#filters, biases = model.layers[10].get_weights()
#print(model.layers[10].name, filters.shape)

for layer in model.layers:
    if 'conv' not in layer.name:
        continue
    # to get filter weights
    filters, biases = layer.get_weights()
    print(layer.name, filters.shape)

The error, I got -

Traceback (most recent call last):
  File "weights_biases.py", line 32, in <module>
    filters, biases = layer.get_weights()
ValueError: not enough values to unpack (expected 2, got 1)

It is working for VGG16 but not for Xception. I am new to this area. Please let me know how to fix this.



Solution 1:[1]

You can implement an exception call using a try-except block to make your code work with any network,ResNet,VGG16 etc as shown below

 try:
   filters,biases = layer.get_weights()
     break
   except ValueError: 
     filters = layer.get_weights()

Updating your code:

model = Xception()
model.summary()
#filters, biases = model.layers[10].get_weights()
#print(model.layers[10].name, filters.shape)

for layer in model.layers:
    if 'conv' not in layer.name:
        continue
    # to get filter weights
    try:
      filters,biases = layer.get_weights()
      break
    except ValueError: 
      filters = layer.get_weights()

    print(layer.name, filters.shape)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 izbid