'Keras Error TypeError: ('Keyword argument not understood:', 'mode')

**I am using 100 tiramisu code and I am getting this error. I know it is probably because of version changes in Keras but not sure how to fix it.

I have changed the old merger method to keras.layer.concatenate but it still gives the same error.**

def relu(x): return Activation('relu')(x)
def dropout(x, p): return Dropout(p)(x) if p else x
def bn(x): return BatchNormalization(mode=2, axis=-1)(x)
def relu_bn(x): return relu(bn(x))
def concat(xs): return keras.layers.Concatenate(xs, mode='concat', concat_axis=-1)


def conv(x, nf, sz, wd, p, stride=1): 
   # x = Convolution2D(nf, sz, sz, init='he_uniform', border_mode='same', 
   #                   subsample=(stride,stride), W_regularizer=regularizers.l1_l2(wd))(x)
    x = Convolution2D(nf, (sz, sz), padding='same', 
                   strides=(stride,stride), kernel_regularizer=regularizers.l1_l2(wd))(x)

    return dropout(x, p)
   
  def down_path(x, nb_layers, growth_rate, p, wd):
        skips = []
        for i,n in enumerate(nb_layers):
            x,added = dense_block(n,x,growth_rate,p,wd)
            skips.append(x)
            x = transition_dn(x, p=p, wd=wd)
        return skips, added

def transition_up(added, wd=0):
    x = concat(added)
    _,r,c,ch = x.get_shape().as_list()
   W_regularizer=l2(wd))(x)
    return Deconvolution2D(ch, (3, 3), (None,r*2,c*2,ch), 
              padding='same', stride=(2,2), kernel_regularizer=l2(wd))(x)


def up_path(added, skips, nb_layers, growth_rate, p, wd):
    for i,n in enumerate(nb_layers):
        x = transition_up(added, wd)
        x = concat([x,skips[i]])
        x,added = dense_block(n,x,growth_rate,p,wd)
    return x

def reverse(a): return list(reversed(a))

def create_tiramisu(nb_classes, img_input, nb_dense_block=6, 
    growth_rate=16, nb_filter=48, nb_layers_per_block=5, p=None, wd=0):
    
    if type(nb_layers_per_block) is list or type(nb_layers_per_block) is tuple:
        nb_layers = list(nb_layers_per_block)
    else: nb_layers = [nb_layers_per_block] * nb_dense_block

    x = conv(img_input, nb_filter, 3, wd, 0)
    skips,added = down_path(x, nb_layers, growth_rate, p, wd)
    x = up_path(added, reverse(skips[:-1]), reverse(nb_layers[:-1]), growth_rate, p, wd)
    
    x = conv(x, nb_classes, 1, wd, 0)
    _,r,c,f = x.get_shape().as_list()
    x = Reshape((-1, nb_classes))(x)
    return Activation('softmax')(x)

input_shape = (224,224,3)
img_input = Input(shape=input_shape)
x = create_tiramisu(32, img_input, nb_layers_per_block=[4,5,7,10,12,15], p=0.2, wd=1e-4)

The error I am getting is:

TypeError                                 Traceback (most recent call last)
<ipython-input-80-acecdf7dd0b2> in <module>()
      1 input_shape = (224,224,3)
      2 img_input = Input(shape=input_shape)
----> 3 x = create_tiramisu(32, img_input, nb_layers_per_block=[4,5,7,10,12,15], p=0.2, wd=1e-4)

10 frames
/usr/local/lib/python3.7/dist-packages/keras/utils/generic_utils.py in validate_kwargs(kwargs, allowed_kwargs, error_message)
   1172   for kwarg in kwargs:
   1173     if kwarg not in allowed_kwargs:
-> 1174       raise TypeError(error_message, kwarg)
   1175 
   1176 

TypeError: ('Keyword argument not understood:', 'mode')

I have tried to change a few arguments which changed from Keras version but still give the wrong answer.



Sources

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

Source: Stack Overflow

Solution Source