我试图使用KerasModel子类化重写函数模型,但是在新的Model子类中,摘要生成不起作用。在
作为参考,函数模型及其输出。在
filters = 32
# placeholder for inputs
inputs = Input(shape=[16, 16, 16, 12])
# L-hand side of UNet
conv1 = DoubleConv3D(filters*1)(inputs)
pool1 = MaxPooling3D()(conv1)
...
# middle bottleneck
conv5 = DoubleConv3D(filters*5)(pool4)
# R-hand side of UNet
rsdc6 = ConcatConv3D(filters*4)(conv5, conv4)
conv6 = DoubleConv3D(filters*4)(rsdc6)
...
# sigmoid activation
outputs = Conv3D(1, (1, 1, 1), activation='sigmoid')(conv9)
model = Model(inputs=[inputs], outputs=[outputs])
model.summary()
^{pr2}$
而Model子类看起来像:
^{3}$但是,没有输出层和参数数量,总结给出了
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
Total params: 0
Trainable params: 0
Non-trainable params: 0
_________________________________________________________________
最初,我认为这是一个错误,在调用summary之前没有调用build
,并尝试显式地调用该函数并在第一个卷积层之前添加一个InputLayer
,如本文related answer所述。但是,这两个解决方案都无法帮助修复model子类上的摘要生成。在
通过查看下面的example,我找到了这个模型子类化问题的解决方案。贷款应该归回购的作者所有。在
创建将Keras函数转换为模型子类的一种方法是创建并调用一个复制模型初始化的函数,例如
Model(inputs=[inputs], outputs=[outputs])
。在这里,我们使用_build
函数来实现这一点。在相关问题 更多 >
编程相关推荐