猿问

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

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


一只萌萌小番薯
浏览 236回答 2
2回答

开满天机

您忘记了对图像进行标准化。当前,中的值在x_train范围内[0,255]。这会导致较大的梯度更新并拖延训练过程。在这种情况下,一种简单的标准化方案是:x_train = x_train.astype('float32') / 255x_test = x_test.astype('float32') / 255这将导致值落在范围内[0,1]。然后,您肯定会看到培训的进展。更复杂的归一化方案涉及按特征(即按像素)归一化或居中。在这种方法中,我们对所有图像进行归一化,以使所有图像中的每个像素的平均值为零,标准差为1(即,它们大多落在范围内[-1,1]):# make sure values are floatx_train = x_train.astype('float32')x_test = x_test.astype('float32')x_mean = x_train.mean(axis=0)x_train -= x_meanx_std = x_train.std(axis=0)x_train /= x_std + 1e-8  # add a small constant to prevent division by zero# normalize test data using the mean and std of training datax_test -= x_meanx_test /= x_std + 1e-8注意最后一部分:永远不要以自己的均值和std标准化测试数据。使用训练平均值和std代替。

小唯快跑啊

您正在对x_test进行预测predictions = model.predict_classes(x_test, batch_size=50)而不是将它们与y_train进行比较comparison = [(predictions[i], y_train_[i][0]) for i in range(0, len(predictions))]我认为应该是y_test
随时随地看视频慕课网APP

相关分类

Python
我要回答