为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只萌萌小番薯 2021-04-09 16:15:43
我最近一直在学习Keras,并尝试了使用CNN的CIFAR10数据集。但是,无论如何,我训练的模型(您可以在此处运行代码)对于每个输入都返回相同的答案。我是否忘记了模型定义中的某些内容?
查看完整描述

2 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

您忘记了对图像进行标准化。当前,中的值在x_train范围内[0,255]。这会导致较大的梯度更新并拖延训练过程。在这种情况下,一种简单的标准化方案是:


x_train = x_train.astype('float32') / 255

x_test = x_test.astype('float32') / 255

这将导致值落在范围内[0,1]。然后,您肯定会看到培训的进展。


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


# make sure values are float

x_train = x_train.astype('float32')

x_test = x_test.astype('float32')


x_mean = x_train.mean(axis=0)

x_train -= x_mean

x_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 data

x_test -= x_mean

x_test /= x_std + 1e-8

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


查看完整回答
反对 回复 2021-04-20
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

您正在对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


查看完整回答
反对 回复 2021-04-20
  • 2 回答
  • 0 关注
  • 235 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信