我正在训练喀拉拉邦的模型,我想在每个时期后绘制结果图。我知道keras回调提供了“ on_epoch_end”函数,如果一个人想在每个纪元后进行一些计算,可以重载,但是我的函数需要一些附加参数,这些参数给出时会因元类错误而使代码崩溃。详细信息如下:
这是我现在正在做的事情,工作正常:-
class NewCallback(Callback):
def on_epoch_end(self, epoch, logs={}): #working fine, printing epoch after each epoch
print("EPOCH IS: "+str(epoch))
epochs=5
batch_size = 16
model_saved=False
if model_saved:
vae.load_weights(args.weights)
else:
# train the autoencoder
vae.fit(x_train,
epochs=epochs,
batch_size=batch_size,
validation_data=(x_test, None),
callbacks=[NewCallback()])
但我想要这样的回调函数:-
class NewCallback(Callback,models,data,batch_size):
def on_epoch_end(self, epoch, logs={}):
print("EPOCH IS: "+str(epoch))
x=models.predict(data)
plt.plot(x)
plt.savefig(epoch+".png")
如果我这样称呼它:
callbacks=[NewCallback(models, data, batch_size=batch_size)]
我收到此错误:
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
我正在寻找一个更简单的解决方案来调用我的函数或解决此元类错误,任何帮助将不胜感激!
我认为您想做的是定义一个从回调派生的类,并将模型,数据等作为构造函数参数。所以:
class NewCallback(Callback):
""" NewCallback descends from Callback
"""
def __init__(self, models, data, batch_size):
""" Save params in constructor
"""
self.models = models
def on_epoch_end(self, epoch, logs={}):
x = self.models.predict(self.data)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句