我正在寻找一种解决方案,将预先训练好的Resnet50模型重用为一个大的定制模型中的定制子层。
在我的场景中,我使用Resnet50作为FCN主干,然后我将使用FCN输出结果作为另一个网络层的输入。
你可以看到我的代码:https://github.com/piginzoo/textscanner/blob/master/network/layers/fcn_layer.py https://github.com/piginzoo/textscanner/blob/master/network/model.py
我的问题是,我找不到一个示例代码,要将TF2.0中的Resnet50层集成为自定义层的一部分,我搜索了stackoverflow,TF2.0官网和博客,找不到一个可行的代码片段来演示如何实现这些需求。
但我相信这是一个非常常见的范例,有没有人遇到过这样的问题,任何建议或代码演示都会非常感谢。
发布于 2020-05-31 15:36:25
最后我找到了一个可行的方法,比如:
如代码所示,我创建了一个新模型,该模型使用预先训练好的Resnet50的输入作为输入,并使用3个“conv_block_out”作为新模型的输出,在call method中,我只是将该模型称为"a layer“样式。
有关详细信息,请参阅我的completed code Github。
伪代码:
class FCNLayer(Layer):
def __init__(self, name, resnet50_model):
super().__init__(name=name)
resnet50_model.layers.pop()
resnet50_model.summary()
self.resnet50_model = resnet50_model
def build(self, input_image, FILTER_NUM=4):
layer_names = [
"conv3_block4_out", # 1/8
"conv4_block6_out", # 1/16
"conv5_block3_out", # 1/32
]
layers = [self.resnet50_model.get_layer(name).output for name in layer_names]
self.FCN_left = Model(inputs=self.resnet50_model.input, outputs=layers)
......
def call(self, input_image, training=True):
pool3, pool4, pool5 = self.FCN_left(input_image)
.......https://stackoverflow.com/questions/61649083
复制相似问题