Keras 修改resnet模型中的层

Keras 修改resnet模型中的层,keras,resnet,Keras,Resnet,我试图训练resnet50模型来解决图像分类问题。在将模型训练到我拥有的数据集之前,我已经加载了预训练的“imagenet”权重。我想在输入层和第一个卷积层之间插入一个层(平均减法层) model=ResNet50(weights='imagenet') def平均值减去(img): img=T.set_子传感器(img[:,0,:,:,:],img[:,0,:,:]-123.68) img=T.set_子传感器(img[:,1,:,:,:],img[:,1,:,:]-116.779) img=

我试图训练resnet50模型来解决图像分类问题。在将模型训练到我拥有的数据集之前,我已经加载了预训练的“imagenet”权重。我想在输入层和第一个卷积层之间插入一个层(平均减法层)

model=ResNet50(weights='imagenet')
def平均值减去(img):
img=T.set_子传感器(img[:,0,:,:,:],img[:,0,:,:]-123.68)
img=T.set_子传感器(img[:,1,:,:,:],img[:,1,:,:]-116.779)
img=T.set_子传感器(img[:,2,:,:,:],img[:,2,:,:]-103.939)
返回img/255.0
我想在输入层旁边插入
inputs=Lambda(mean_subtract,name='mean_subtraction')(inputs)
,并将其连接到resnet模型的第一个卷积层,而不会丢失保存的权重

我该怎么做


谢谢

快速回答(似乎比向模型中添加功能更好)

使用如下所述的预处理功能:

长答案

因为你的函数不会改变形状,你可以把它放在一个外部模型中,而不改变Resnet模型(改变模型可能不是那么简单,如果需要的话,我总是尝试用其他模型的零件安装新模型)

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)