Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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 训练图像的准确度良好,但测试的准确度较差_Python_Tensorflow_Machine Learning_Keras - Fatal编程技术网

Python 训练图像的准确度良好,但测试的准确度较差

Python 训练图像的准确度良好,但测试的准确度较差,python,tensorflow,machine-learning,keras,Python,Tensorflow,Machine Learning,Keras,我按照Adrian Rosebrock(multi-label classification)的教程对手指头进行分类,我使用VGGnet模型和Keras库训练了一个模型,训练后显示的图表明该模型应该可以正常工作 该模型仅对训练图像进行了良好的预测,但当我测试来自web的图像时,它给出了错误的预测 对训练图像的良好预测: 测试图像上的错误预测(来自web) 源代码: EPOCHS=30 初始值=1e-3 BS=16 图像亮度=(1301303) #抓取图像路径并随机洗牌 打印(“

我按照Adrian Rosebrock(multi-label classification)的教程对手指头进行分类,我使用VGGnet模型和Keras库训练了一个模型,训练后显示的图表明该模型应该可以正常工作

该模型仅对训练图像进行了良好的预测,但当我测试来自web的图像时,它给出了错误的预测

  • 对训练图像的良好预测:

  • 测试图像上的错误预测(来自web)

  • 源代码:
EPOCHS=30
初始值=1e-3
BS=16
图像亮度=(1301303)
#抓取图像路径并随机洗牌
打印(“[INFO]正在加载图像…”)
imagePaths=已排序(列表(paths.list_图像(args[“dataset”]))
随机种子(42)
随机.随机(图像路径)
数据=[]
标签=[]
对于imagePath中的imagePath:
#加载图像,对其进行预处理,并将其存储在数据列表中
image=cv2.imread(imagePath)
image=cv2.调整大小(图像,(图像大小[1],图像大小[0]))
image=img_到_数组(image)
data.append(图像)
l=label=imagePath.split(os.path.sep)[-2].split(“\ux”)
标签。附加(l)
data=np.array(data,dtype=“float”)/255.0
labels=np.array(标签)
打印(“[INFO]数据矩阵:{}图像({.2f}MB)”。格式(
len(图像路径),data.nbytes/(1024*1000.0)))
打印(“[INFO]类标签:”)
mlb=多标签二进制程序()
标签=mlb.fit_变换(标签)
对于枚举(mlb.classes)中的(i,标签):
打印(“{}.{}.”格式(i+1,标签))
(trainX,testX,trainY,testY)=列车测试分割(数据,
标签,测试尺寸=0.2,随机状态=42)
aug=图像数据生成器(旋转范围=25,宽度范围=0.1,
高度移动范围=0.1,剪切范围=0.2,缩放范围=0.2,
水平翻转=假,填充模式为“最近”)
打印(“[INFO]编译模型…”)
model=SmallerVGGNet.build(
宽度=图像尺寸[1],高度=图像尺寸[0],
深度=图像尺寸[2],等级=透镜(mlb.classes),
finalAct=“乙状结肠”)
opt=Adam(lr=INIT_lr,decay=INIT_lr/EPOCHS)
#使用二进制交叉熵编译模型,而不是
#分类交叉熵——这似乎与我们的直觉相反
#多标签分类,但请记住,这里的目标是
#就是将每个输出标签视为一个独立的伯努利
#分布
compile(loss=“binary\u crossentropy”,optimizer=opt,
指标=[“准确度”])
#培训网络
打印(“[INFO]培训网络…”)
H=型号。安装\u发电机(
8月流量(第X列、第Y列、批次尺寸=BS),
验证数据=(testX,testY),
每历元步长=len(trainX)//BS,
epochs=epochs,verbose=1)

使模型在测试图像上给出错误预测的原因是什么?

您在培训和验证中使用了多少图像?你为什么要使用
binary\u crossentropy”?你有两个以上的类吗?我认为你应该使用
tf.keras.loss.SparseCategoricalCrossentropy`如本文所述。希望这能有所帮助。我遵循了Adrian Rosebrock(在文章中提到)的教程,我不想改变损失函数和优化器算法等指标。我有六个类(0、1、2、3、4、5),对于我设置的图像,20%用于验证,80%用于训练。这表明您的模型“概括”得不好。您提供的信息不足以确定您的问题出在哪里。可能是训练过度,或者超参数调整不当。我注意到的一点是,训练图像不是similar to test one.如果模型在所有图像上都进行了训练,比如你发布的训练图像,那么我相信与其他图像一起会很困难。请提供数据集的链接…你说我没有提供足够的信息来确定正确的问题是什么意思?我发布了描述问题的代码和图像m我知道了。如果您还需要什么,请随时在评论中指出,对于数据集,您可以通过以下链接找到它。您可以尝试对训练数据进行图像增强,如水平翻转,并检查准确性。您在训练和验证中使用了多少图像?为什么使用
二进制交叉熵“?你有两门以上的课吗?我认为您应该使用
tf.keras.loss.sparsecategoricalcrossentity`如本文所述。希望这能有所帮助。我遵循了Adrian Rosebrock(在文章中提到)的教程,我不想改变损失函数和优化器算法等指标。对于我设置的图像,我有六个类(0、1、2、3、4、5),20%用于验证,80%用于培训。这表明您的模型“概括”得不好。您提供的信息不足以确定您的问题是什么。这可能是训练过度,或者超参数调整不当。我注意到的一点是,训练图像与测试图像不相似。如果模型在所有图像上都进行了训练,比如你发布的训练图像,那么我相信在其他图像上会有困难。请提供数据集的链接……我没有提供足够的信息来确定正确的问题是什么意思?我已经发布了描述我遇到的问题的代码和图片。如果您还需要其他信息,请随时在评论中指出。对于数据集,您可以通过以下链接找到它。您是否可以尝试对训练数据进行图像增强,如水平翻转,并检查准确性。