每个epoch显示结果中添加auc,costtime
以下代码,显示结果中添加了auc,acc,costtime,当然这几个参数也可以写在callbacks中
for epoch in range(10):
starttime=time.time()
#注意,这里也可以是fit_generate,不过要保证epochs=1
model.fit(train_data,train_label,epochs=1, batch_size=32)
#注意这里,若是生成器,建议单独写一个方法,对于test_generate里的全部数据取出,
#放入列表中,转变格式,np.array(..).squeeze()等操作之后继续执行如下操作即可
y_pre=model.predict(test_data)
auc=metrics.roc_auc_score(test_label.flatten(),y_pre.flatten())
predict=np.argmax(y_pre,axis=1)
test_pre=np.argmax(test_label,axis=1)
acc=metrics.accuracy_score(test_pre,predict)
costtime=time.time()-starttime
print('auc:{auc},acc:{acc},costtime:{costtime}'.format(auc=auc,acc=acc,costtime=costtime))
写在callbacks中
#这里若是生成器,on_x_begin用next(generate)值,之后操作类似
class RocAucMetricCallback(keras.callbacks.Callback):
def __init__(self,validation_data):
self.x_val,self.y_val=validation_data
def on_epoch_begin(self,epoch,logs={}):
#添加roc_auc_val属性
starttime=time.time()
if not ('roc_auc_val' in self.params['metrics']):
self.params['metrics'].append('roc_auc_val')
if not ('costtime' in self.params['metrics']):
self.params['metrics'].append('costtime')
return starttime
def on_epoch_end(self,epoch,logs={}):
starttime=self.on_epoch_begin(epoch)
nowtime=time.time()
costtime=nowtime-starttime
#costtime=time.time()
#print(costtime)
y_pre=model.predict(self.x_val)
logs['roc_auc_val']=float('-inf')
if(self.validation_data):
logs['roc_auc_val']=roc_auc_score(self.y_val.flatten(),y_pre.flatten())
logs['costtime']=costtime
print('auc:{auc},costtime:{costtime}'.format(auc=logs.get('roc_auc_val'),costtime=logs.get('costtime')))
my=RocAucMetricCallback(validation_data=(test_data,test_label))
model.fit(train_data,train_label,epochs=20, batch_size=32,validation_data=(test_data,test_label),callbacks=[my])