ZFTurbo/Keras-inference-time-optimizer

inbound_layers.append(res[inbound_layer_id]) KeyError: '140072123108824'

rematchka opened this issue · 5 comments

I had a problem when running reduce_keras_model, I get an error at line 55 in init.py at inbound_layers.append(res[inbound_layer_id])
I guess the problem happens when the model has a large number of filters

def get_simple_2d_model():
    inp = keras.layers.Input((60,60,1))
    x = Conv2D(32, 3, padding='same', kernel_initializer='random_uniform')(inp)
    x = BatchNormalization()(x)
    x = Conv2D(128, 3, padding='same', kernel_initializer='random_uniform')(inp)
    x = MaxPool2D((2,2))(x)
    x = BatchNormalization()(x)
    x = Conv2D(256, 3, padding='same', kernel_initializer='random_uniform')(inp)
    x = BatchNormalization()(x)
    x = MaxPool2D((2,2))(x)
    x = keras.layers.Activation('relu')(x)
    x = Conv2D(512, 3, padding='same', kernel_initializer='random_uniform')(x)
    x = BatchNormalization()(x)
    x = MaxPool2D((2,2))(x)
    x = Flatten()(x)
    x = Dense (512, activation = tf.nn.relu,kernel_regularizer=l2(0.01))(x)    
    out = Dense(1, activation='sigmoid')(x)
    model= keras.Model(inputs=inp, outputs=out)
    return model

Can you please provide tensorflow and keras version?

I changed your code like that. And it works totally fine for me:

def get_simple_2d_model():
    import tensorflow as tf
    import tensorflow.keras as keras
    from tensorflow.keras.layers import MaxPool2D, Flatten, ReLU

    inp = keras.layers.Input((60,60,1))
    x = Conv2D(32, 3, padding='same', kernel_initializer='random_uniform')(inp)
    x = BatchNormalization()(x)
    x = Conv2D(128, 3, padding='same', kernel_initializer='random_uniform')(inp)
    x = MaxPool2D((2,2))(x)
    x = BatchNormalization()(x)
    x = Conv2D(256, 3, padding='same', kernel_initializer='random_uniform')(inp)
    x = BatchNormalization()(x)
    x = MaxPool2D((2,2))(x)
    x = keras.layers.Activation('relu')(x)
    x = Conv2D(512, 3, padding='same', kernel_initializer='random_uniform')(x)
    x = BatchNormalization()(x)
    x = MaxPool2D((2,2))(x)
    x = Flatten()(x)
    x = Dense(512)(x)
    out = Dense(1, activation='sigmoid')(x)
    model= keras.Model(inputs=inp, outputs=out)
    return model

strangely, it's working. I am using TensorFlow 2.3.0. I get this error if I am loading a model with these params mentioned above. if I called function it works but if I loaded a pre-trained model it shows the error

May be it's because this line?

x = Dense (512, activation = tf.nn.relu,kernel_regularizer=l2(0.01))(x)

There are direct TF calls.

if I called this function, with no direct TF calls., I get the error

def get_simple_2d_model():
    import tensorflow as tf
    from tensorflow import keras
    from keras.layers import MaxPool2D, Flatten, ReLU,Conv2D,BatchNormalization,Dense,Input
    from keras.models import Sequential
    
    model=Sequential()


    model.add(Conv2D(32,kernel_2, input_shape=(60,60,1), strides = 1, padding='valid'))
    model.add(BatchNormalization())
    model.add(Conv2D(32,kernel_2))
    model.add(MaxPool2D(pooling))
    model.add(Dropout(dropout))
    model.add(BatchNormalization())

   
    model.add(Dropout(dropout))
    model.add(BatchNormalization())
    model.add(Flatten())
    model.add(Dense(512))
    model.add(Dropout(0.4))
    model.add(Dense(num_classes, activation = 'softmax'))
   

    return model