时间:2021-05-22
问题描述:
在利用神经网络进行分类和识别的时候,使用了keras这个封装层次比较高的框架,backend使用的是tensorflow-cpu。
在交叉验证的时候,出现 val_categorical_accuracy: 0.0000e+00的问题。
问题分析:
首先,弄清楚,训练集、验证集、测试集的区别,验证集是从训练集中提前拿出一部分的数据集。在keras中,一般都是使用这种方式来指定验证集占训练集和的总大小。
validation_split=0.2
比如,经典的数据集MNIST,共有60000个训练集,就会
Train on 48000 samples, validate on 12000 samples
我自己学习使用的数据集比较小
训练数据集样本数: 498 ,标签个数 498
Train on 398 samples, validate on 100 samples
基本上符合4:1(0.2)的分配
出现 val_categorical_accuracy: 0.0000e+00的问题,我这边的原因主要是,样本本身是有规律的,导致分配的验证集的标签可能在训练集中可能就没有。
(PS:我实际看了下,498个样本共10个标签,后100个验证集占据了基本上后面3个标签(实际上,这三个标签占了103个样本),也就是前面的训练集基本上就没有后面的标签,整体占据前面7个标签)
问题解决:
把最初始的训练集打乱,当然,标签也要跟着移动。
index = [i for i in range(len(x_train))]np.random.shuffle(index)x_train = x_train[index]y_train = y_train[index] model.fit(x_train, y_train, batch_size=32, epochs=10, validation_split=0.2, verbose=1)同样的问题表现,可能有不同的原因,解决方法也不尽相同,这里只是和大家分享我自己的问题解决过程。
补充知识:keras中自定义验证集的性能评估
如下所示:
def AUC(y_true,y_pred):not_y_pred=np.logical_not(y_pred)y_int1=y_true*y_predy_int0=np.logical_not(y_true)*not_y_predTP=np.sum(y_pred*y_int1)FP=np.sum(y_pred)-TPTN=np.sum(not_y_pred*y_int0)FN=np.sum(not_y_pred)-TNTPR=np.float(TP)/(TP+FN)FPR=np.float(FP)/(FP+TN)return((1+TPR-FPR)/2)以上这篇解决keras,val_categorical_accuracy:,0.0000e+00问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Jquery:$("#accuracy").val($("#accuracy").val().replace(/\+/g,""));//去掉空格.replace
前言在使用keras时候报错Keyerror‘acc',这是一个keras版本问题,acc和accuracy本意是一样的,但是不同keras版本使用不同命名,因
keras.utils.to_categorical这个方法,源码中,它是这样写的:Convertsaclassvector(integers)tobinary
如下所示:enc=OneHotEncoder(categorical_features=np.array([0,1,2]),n_values=[5,4,2])e
前言:keras是一个十分便捷的开发框架,为了更好的追踪网络训练过程中的损失函数loss和准确率accuracy,我们有几种处理方式,第一种是直接通过histo