在使用keras搭建神经网络时,有时需要查看一下预测值和真是值的具体数值,然后可以进行一些其他的操作。这几天查阅了很多资料。好像没办法直接access到训练时的数据。所以我们可以通过回调函数,传入新的数据,然后查看预测值和真是值。
参考这篇解决:
https://stackoverflow.com/questions/47079111/create-keras-callback-to-save-model-predictions-and-targets-for-each-batch-durin
我的解决方法是这样的:
from keras.callbacks import Callback import tensorflow as tf import numpy as np class 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 np def shuffleDatas(x,y): shuffleIndex=np.arange(len(x)) np.random.shuffle(shuffleIndex) x=x[shuffleIndex] y=y[shuffleIndex] return x,y def 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输出预测值和真实值方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。