keras - 修改 resnet 模型中的图层
问题描述
我正在尝试为图像分类问题训练 resnet50 模型。在我拥有的数据集上训练模型之前,我已经加载了预训练的“imagenet”权重。我想在输入层和第一个卷积层之间插入一个层(平均减法层)。
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
我想inputs = Lambda(mean_subtract, name='mean_subtraction')(inputs)
在输入层旁边插入并将其连接到 resnet 模型的第一个卷积层,而不会丢失保存的权重。
我怎么做?
谢谢!
解决方案
快速回答(似乎比将功能添加到模型中更好)
使用这里描述的预处理函数:preprocessing images generated using keras function ImageDataGenerator() to train resnet50 model
长答案
由于您的函数不会改变形状,因此您可以将其放入外部模型中而无需更改 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)
推荐阅读
- php - PHP联系表单发送但不接收电子邮件
- java - 将日期作为参数传递
- html - primeng,p 表列“重新排序”不起作用
- ios - 带有动画的自定义 UIButton 类
- spring-boot - 使用数据和多部分文件配置 Spring Boot url
- java - Spring-data-jpa:线程安全的唯一插入
- angular - 如何从茉莉花中的角度访问或添加模板引用变量
- c# - 将数据从服务器传递到winform应用程序?
- javascript - Dynamics 365 门户 - 向阵列添加选项
- magento - 将 CC 或 BCC 添加到 Magento 社区联系表