【发布时间】:2019-07-01 13:36:22
【问题描述】:
我正在尝试更改 ResNet50 网络的输入形状。我需要超过 3 个通道的输入。当您指定输入形状而不加载 imagenet 权重时,ResNet 应用程序可以工作,但我想使用 imagenet 的权重来避免长时间的训练阶段。
我知道 imagenet 的权重适用于具有三个通道的输入形状,但理论上通过切割网络的头部并添加一个新的输入层这应该可以工作。
我试图删除头部层,但我遇到了一些问题,说过滤器的数量与 3 不同
ValueError: 输入通道数不匹配对应 过滤器的尺寸,6 != 3
model=keras.applications.resnet50.ResNet50(include_top=False,
input_shape(200,200,3),weights='imagenet')
model.layers.pop(0)
model.layers.pop(0)
model.layers.pop()
X_input = Input((200,200,6), name='input_1')
X = ZeroPadding2D((3, 3), name='conv1_pad')(X_input)
model = Model(inputs=X, outputs=model(X))
model.summary()
我认为可以更改输入形状的通道数并仍然使用来自 imagenet 的权重,但我尝试的方法似乎是错误的。
【问题讨论】:
-
不,不要尝试这个,它不起作用,ImageNet 权重仅适用于 3 通道图像。
-
为什么?因为遵循 resnet 架构只有前两层发生了变化
-
是的,但是您将如何重建与额外频道相关的缺失信息?你就是不能
-
之后训练模型。我将使用 imagenet 权重来设置权重,并避免随机初始化,因为在我的案例中也可以使用在 imagenet 上学习的一些特征。因此,在创建模型后,我将对其进行训练
标签: keras neural-network resnet