Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么Keras的evaluate_generator和evaluate报告相同数据的不同精度?_Python_Tensorflow_Machine Learning_Image Processing_Keras - Fatal编程技术网

Python 为什么Keras的evaluate_generator和evaluate报告相同数据的不同精度?

Python 为什么Keras的evaluate_generator和evaluate报告相同数据的不同精度?,python,tensorflow,machine-learning,image-processing,keras,Python,Tensorflow,Machine Learning,Image Processing,Keras,我正在使用Keras的ImageDataGenerator和来自目录的flow_来训练神经网络。我遇到的问题是,evaluate_生成器和evaluate报告相同数据的不同精度。下面是一个,它报告了evaluate_generator的精度为0.24,但evaluate的精度为0.44: 导入操作系统 将numpy作为np导入 进口cv2 进口干酪 导入tensorflow作为tf np.random.seed1 tf.set_random_seed1 test\u data\u path=os

我正在使用Keras的ImageDataGenerator和来自目录的flow_来训练神经网络。我遇到的问题是,evaluate_生成器和evaluate报告相同数据的不同精度。下面是一个,它报告了evaluate_generator的精度为0.24,但evaluate的精度为0.44:

导入操作系统 将numpy作为np导入 进口cv2 进口干酪 导入tensorflow作为tf np.random.seed1 tf.set_random_seed1 test\u data\u path=os.path.joindata,test def从图像文件库加载数据路径: X=[] y=[] 对于os.listdirbase\u data\u路径中的data\u文件夹: data\u folder\u path=os.path.joinbase\u data\u path,data\u folder 如果os.path.isdirdata\u文件夹\u路径: 对于os.listdirdata_文件夹_路径中的文件名: 如果filename.endswith.jpg: X.appendcv2.imreados.path.joindata\u文件夹\u路径,文件名 如果data_folder==null: y、 追加[0] 其他: y、 附加[1] 返回np.arrayX.astypefloat32/255.0,np.arrayy 使用openmodel.json,r作为json\u文件: model=keras.models.model_from_jsonjson_file.read 模型载荷\重量模型h5 model.compileloss=binary\u crossentropy,optimizer=adam,metrics=[准确度] X_测试,y_测试=从图像文件加载数据路径 test_datagen=keras.preprocessing.image.ImageDataGeneratorrescale=1./255 test_generator=test_datagen.flow_from_目录 测试数据路径, 目标尺寸=96,96, 批次大小=1, shuffle=False, 类\模式=二进制 _,发电机测试精度=模型。评估发电机发电机=测试发电机,步骤=测试发电机。样本 _,测试精度=model.evaluateX测试,y测试 打印评估生成器:%.3f,评估:%.3f%生成器测试精确度,测试精确度 这来自keras生成器最小示例回购。此脚本加载的预训练模型定义如下:

模型=keras.models.Sequential model.addkeras.layers.flattinput\u shape=96,96,3 model.addkeras.layers.Dense4,激活=relu model.addkeras.layers.BatchNormalization model.addkeras.layers.Dense1,激活=sigmoid model.compileloss=binary\u crossentropy,optimizer=adam,metrics=[准确度] 设置和培训模型的完整脚本如下所示

我的问题是,在上面的例子中,model.evaluate_生成器和model.evaluate应该报告相同的准确性,还是我搞错了什么?如果我只是缺少一个参数或其他什么,我会非常感激在正确的方向上轻推

旁注:看起来可能相关,尽管在该问题的评论中提出的各种修复方案并没有解决我的问题。设置shuffle=False、workers=1和/或max\u queue\u size=1不会改变任何内容,设置use\u multiprocessing=True会导致我的终端中出现一系列以下错误,脚本挂起:

/home/jack/.local/lib/python3.6/site-packages/keras/utils/data_utils.py:616: UserWarning: The input 0 could not be retrieved. It could be because a worker has died.
  UserWarning)

由于我无法解决这个次要问题,我不知道在evaluate_generator中设置use_multiprocessing=True是否可以解决精度不匹配的问题。

结果表明,这种差异是由OpenCV使用BGR格式的imread引起的,而Keras的flow_来自_目录。将通道反转到RGB解决了该问题