我试图在tf.keras中用以下方式实现模型定义的子类,并面对随后的属性错误。
def my_model(Model):
def __init__(self, dim):
super(my_model, self).__init__(**kwargs)
self.efnet = efn.EfficientNetB0(input_shape=(dim, 3), include_top = False, weights = 'imagenet')
self.gap = L.GlobalAveragePooling2D()
self.bn = L.BatchNormalization()
self.denseA = L.Dense(784, activation='relu', name = 'dense_A')
self.out = L.Dense(1, activation='sigmoid')
def call(self, inputs):
x = self.efnet(inputs)
x_gap = self.gap(x)
bn = self.bn(x_gap)
den_A = self.denseA(bn)
drop = self.drop(den_A)
return self.out(drop)
dim = (124,124)
model = my_model((dim)错误
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-3-e8086e70a144> in <module>()
27 dim = (124,124)
28 model = my_model(dim)
---> 29 model.compile(
30 optimizer='adam',
31 loss = 'binary_crossentropy',
AttributeError: 'NoneType' object has no attribute 'compile'环境
OS: Windows OS
TF Ver. tf 2.1Reproducibility这里是colab中的可复制代码。
提亚
发布于 2020-09-09 11:05:18
它应该是类,而不是函数。
而不是def my_model(Model):,它应该是class my_model(Model):。此外,我们还需要进一步build模型。以下是完整的代码:
class my_model(Model):
def __init__(self, dim):
super(my_model, self).__init__(**kwargs)
self.efnet = efn.EfficientNetB0(input_shape=(dim, 3), include_top = False, weights = 'imagenet')
self.gap = L.GlobalAveragePooling2D()
self.bn = L.BatchNormalization()
self.denseA = L.Dense(784, activation='relu', name = 'dense_A')
self.out = L.Dense(1, activation='sigmoid')
def call(self, inputs):
x = self.efnet(inputs)
x_gap = self.gap(x)
bn = self.bn(x_gap)
den_A = self.denseA(bn)
drop = self.drop(den_A)
return self.out(drop)
dim = (124,124)
model = my_model((dim)
model.build((None, *dim))
model.compile(...)
model.summary()https://stackoverflow.com/questions/62198201
复制相似问题