Tensorflow回归神经网络对所有输入输出相同数字

我创建了一个非常简单的回归模型,用于训练黑白图像及其对应的标签,标签值在0.5到10之间。在训练预测标签时,模型总是收敛到一个对所有输入输出相同数字的模型,这个数字很可能是所有标签的平均值。请问我的模型中有什么问题导致了这种情况?我的代码如下:

from __future__ import absolute_import, division, print_functionimport tensorflow as tffrom tensorflow import kerasimport numpy as npimport matplotlib.pyplot as plt(train_images, train_labels), (test_images, test_labels) = np.load("dataset.npy", allow_pickle=True)train_labels = list(map(float, train_labels))test_labels = list(map(float, test_labels))train_labels = [int(i) for i in train_labels]test_labels = [int(i) for i in test_labels]print(train_labels)model = keras.Sequential([    keras.layers.Flatten(input_shape=(128, 128)),    keras.layers.Dense(64, activation=tf.nn.relu),    keras.layers.Dense(1)  ])model.compile(loss='mean_squared_error',    optimizer='adam',    metrics=['mean_absolute_error', 'mean_squared_error'])model.fit(train_images, train_labels, epochs=1000)predictions = model.predict(test_images)for i in range(103):    print("%s: %s" % (test_labels[i], predictions[i]))

回答:

处理图像时,一个关键步骤是归一化图像值。这有助于优化过程和梯度更新的平滑进行,也有助于模型更快更好地收敛。有多种方法可以进行归一化,其中一种简单的归一化方案是将图像像素值除以255(别忘了图像像素值通常在[0,255]范围内,因此将它们除以255会使它们落入[0,1]范围):

train_images = train_images.astype('float32') / 255.0test_images = test_images.astype('float32') / 255.0

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注