Python 无论输入如何,Keras上的CNN收敛到相同的值

Python 无论输入如何,Keras上的CNN收敛到相同的值,python,machine-learning,keras,conv-neural-network,Python,Machine Learning,Keras,Conv Neural Network,我最近一直在学习Keras,并尝试使用CNN访问CIFAR10数据集。但是,我训练的模型(您可以运行代码)对每个输入都返回相同的答案,不管是什么。我是否忘记了模型定义中的某些内容?您正在进行x_测试预测 predictions = model.predict_classes(x_test, batch_size=50) 而不是拿它们和你的火车做比较 comparison = [(predictions[i], y_train_[i][0]) for i in range(0, len(pred

我最近一直在学习Keras,并尝试使用CNN访问CIFAR10数据集。但是,我训练的模型(您可以运行代码)对每个输入都返回相同的答案,不管是什么。我是否忘记了模型定义中的某些内容?

您正在进行x_测试预测

predictions = model.predict_classes(x_test, batch_size=50)
而不是拿它们和你的火车做比较

comparison = [(predictions[i], y_train_[i][0]) for i in range(0, len(predictions))]

我认为应该是y_检验

你在做x_检验的预测

predictions = model.predict_classes(x_test, batch_size=50)
而不是拿它们和你的火车做比较

comparison = [(predictions[i], y_train_[i][0]) for i in range(0, len(predictions))]

我想应该是y_测试

你忘了对图像进行标准化。目前,
x\u列
中的值在
[0255]
范围内。这会导致较大的梯度更新和训练过程暂停。在这种情况下,一个简单的标准化方案是:

x\u train=x\u train.astype('float32')/255
x_test=x_test.astype('float32')/255
这会导致值落在范围
[0,1]
内。那么你肯定会看到训练的进展


更复杂的标准化方案涉及特征方面(即像素方面)的标准化或居中。在这种方法中,我们对所有图像进行规格化,使所有图像中的每个像素的平均值为零,标准偏差为一(即,它们大多在
[-1,1]
范围内):

#确保值是浮动的
x_-train=x_-train.astype('float32')
x_test=x_test.astype('float32')
x_平均值=x_序列平均值(轴=0)
x_列-=x_平均值
x_标准=x_列标准(轴=0)
x_列/=x_标准+1e-8#添加一个小常数以防止被零除
#使用训练数据的平均值和标准值规范化测试数据
x_检验-=x_平均值
x_试验/=x_标准+1e-8

请注意最后一部分:永远不要用自己的平均值和标准值来规范化测试数据。请使用训练平均值和标准值。

您忘记了规范化图像。目前,
x\u列
中的值在
[0255]
范围内。这会导致较大的梯度更新和训练过程暂停。在这种情况下,一个简单的标准化方案是:

x\u train=x\u train.astype('float32')/255
x_test=x_test.astype('float32')/255
这会导致值落在范围
[0,1]
内。那么你肯定会看到训练的进展


更复杂的标准化方案涉及特征方面(即像素方面)的标准化或居中。在这种方法中,我们对所有图像进行规格化,使所有图像中的每个像素的平均值为零,标准偏差为一(即,它们大多在
[-1,1]
范围内):

#确保值是浮动的
x_-train=x_-train.astype('float32')
x_test=x_test.astype('float32')
x_平均值=x_序列平均值(轴=0)
x_列-=x_平均值
x_标准=x_列标准(轴=0)
x_列/=x_标准+1e-8#添加一个小常数以防止被零除
#使用训练数据的平均值和标准值规范化测试数据
x_检验-=x_平均值
x_试验/=x_标准+1e-8

请注意最后一部分:永远不要用自己的平均值和标准值来规范化测试数据。使用训练平均值和标准值来代替。

这肯定是正确的,我刚刚纠正了它,但两者仍然不匹配。你必须训练更长的时间,或者直到损失下降。损失14仍然很高增加历元数没有效果:就像网络收敛到局部最小值,不会从那里移动。这当然是真的,我刚刚纠正了它,但两者仍然不匹配。你必须训练更长的历元,或者直到损失下降。损失14仍然很高增加历元数没有效果:就像网络收敛到一个局部最小值,并且不会从那里移动。哦,标准化值成功了。没想到会有这么大的关系。非常感谢。哦,使值正常化成功了。没想到会有这么大的关系。非常感谢。