keras输出预测值和真实值方式

时间:2021-05-22

在使用keras搭建神经网络时,有时需要查看一下预测值和真是值的具体数值,然后可以进行一些其他的操作。这几天查阅了很多资料。好像没办法直接access到训练时的数据。所以我们可以通过回调函数,传入新的数据,然后查看预测值和真是值。

参考这篇解决:

https://stackoverflow.com/questions/47079111/create-keras-callback-to-save-model-predictions-and-targets-for-each-batch-durin

我的解决方法是这样的:

from keras.callbacks import Callbackimport tensorflow as tfimport numpy as npclass my_callback(Callback): def __init__(self,dataGen,showTestDetail=True): self.dataGen=dataGen self.showTestDetail=showTestDetail self.predhis = [] self.targets = [] def mape(self,y,predict): diff = np.abs(np.array(y) - np.array(predict)) return np.mean(diff / y) def on_epoch_end(self, epoch, logs=None): x_test,y_test=next(self.dataGen) prediction = self.model.predict(x_test) self.predhis.append(prediction) #print("Prediction shape: {}".format(prediction.shape)) #print("Targets shape: {}".format(y_test.shape)) if self.showTestDetail: for index,item in enumerate(prediction): print(item,"=====",y_test[index],"====",y_test[index]-item) testLoss=self.mape(y_test,prediction) print("test loss is :{}".format(testLoss))

画一下知识点,我们在继承的callback中实现 on_epoch_end方法:

x_test,y_test=next(self.dataGen)

这个数据生成方法是这样的

import numpy as npdef shuffleDatas(x,y): shuffleIndex=np.arange(len(x)) np.random.shuffle(shuffleIndex) x=x[shuffleIndex] y=y[shuffleIndex] return x,ydef dataGen(x,y,batchsize=8,shuffle=True): assert len(x) == len(y) while True: if shuffle: x,y=shuffleDatas(x,y) index=0 while index+batchsize<len(x): yield (x[index:index+batchsize],y[index:index+batchsize]) index=index+batchsize

使用yield可以减少内存的使用,而且显得很高级。

补充知识:keras从训练到预测,函数的选择:fit,fit_generator, predict,predict_generator

如下所示:

留下回调函数和如何通过预处理来建立生成输入的函数这两个问题

以上这篇keras输出预测值和真实值方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章