Modify layers in resnet model

a 夏天 提交于 2019-12-13 18:13:09

问题


I am trying to train resnet50 model for image classification problem. I have loaded the pretrained 'imagenet' weights before training the model on the dataset I have. I want to insert a layer (mean subtraction layer) in-between the input layer and the first convolutiuon layer.

model = ResNet50(weights='imagenet')
def mean_subtract(img):
    img = T.set_subtensor(img[:,0,:,:],img[:,0,:,:] - 123.68)
    img = T.set_subtensor(img[:,1,:,:],img[:,1,:,:] - 116.779)
    img = T.set_subtensor(img[:,2,:,:],img[:,2,:,:] - 103.939)

    return img / 255.0

I want to insert inputs = Lambda(mean_subtract, name='mean_subtraction')(inputs) next to the input layer and connect this to the first convolution layer of resnet model without losing the weights saved.

How do I do that?

Thanks!


回答1:


Quick answer (Seems better than adding the function to the model)

Use the preprocessing function as described here: preprocessing images generated using keras function ImageDataGenerator() to train resnet50 model

Long answer

Since your function doesn't change shapes, you can put it in an outer model without changing the Resnet model (changing models may not be so simple, I always try to mount new models with parts from other models if needed).

resnet_model = ResNet50(weights='imagenet')

inputs = Input((None,None,3)) 
    #it seems you're using (3,None,None) instead.    
    #choose based on your "data_format", which by default is channels_last 

outputs = Lambda(mean_subtract,output_shape=not_necessary_with_tensorflow)(inputs)
outputs = resnet_model(outputs)

model = Model(inputs, outputs)


来源:https://stackoverflow.com/questions/50136032/modify-layers-in-resnet-model

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!