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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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