为什么evaluate()的结果与最后一个epoch的结果不同?

我有一个非常简单的神经网络,它在250个epoch内运行,并且在最后一个epoch显示mae = 0.1397,然而,如果我尝试获取model.evaluate((m * test_x + b), predict_y)),则mae大约是44009.296875

为什么会有这么大的差异?

这是我的代码:

import tensorflow as tffrom tensorflow.keras import Inputfrom tensorflow.keras.layers import Densefrom tensorflow.keras.utils import plot_modelimport numpy as npimport matplotlib.pyplot as plttrain_x = np.arange(2000)m = 5b = 4train_y = m * train_x + b# -----------------------------------------------------# Create a Sequential Nerual Networkmodel = tf.keras.Sequential()model.add(Input(shape=(1,), name="input_layer"))model.add(Dense(10, activation="relu"))model.add(Dense(1, activation=None, name="output_layer"))# -----------------------------------------------------# Compile the modelmodel.compile(loss=tf.keras.losses.mae,              optimizer=tf.keras.optimizers.Adam(learning_rate=0.0001),              metrics=["mae"])# -----------------------------------------------------# Train the modelmodel.fit(train_x, train_y, epochs=250)# -----------------------------------------------------# Test the modeltest_x = np.arange(2000, 2400)predict_y = model.predict([test_x])# ------------------------------------------------------# Evaluationprint("Evaluate Testing : ", model.evaluate((m * test_x + b), predict_y))

回答:

我不太确定您是否正确使用了model.evaluate方法。类似于model.fit方法,在评估模型时,您应该提供xy值。我运行以下代码片段时得到了相当相似的结果:

import tensorflow as tffrom tensorflow.keras import Inputfrom tensorflow.keras.layers import Densefrom tensorflow.keras.utils import plot_modelimport numpy as npimport matplotlib.pyplot as plttrain_x = np.arange(2000)m = 5b = 4train_y = m * train_x + b# -----------------------------------------------------# Create a Sequential Nerual Networkmodel = tf.keras.Sequential()model.add(Input(shape=(1,), name="input_layer"))model.add(Dense(10, activation="relu"))model.add(Dense(1, activation=None, name="output_layer"))# -----------------------------------------------------# Compile the modelmodel.compile(loss=tf.keras.losses.mae,              optimizer=tf.keras.optimizers.Adam(learning_rate=0.0001),              metrics=["mae"])# -----------------------------------------------------# Train the modelmodel.fit(train_x, train_y, epochs=5, batch_size=32)# -----------------------------------------------------# Test the modeltest_x = np.arange(2000)predict_y = model.predict([test_x])# ------------------------------------------------------# Evaluationprint("Evaluate Testing : ", model.evaluate(test_x,  m * test_x + b, batch_size=32))
Epoch 1/563/63 [==============================] - 1s 3ms/step - loss: 4978.4922 - mae: 4978.4922Epoch 2/563/63 [==============================] - 0s 3ms/step - loss: 4954.3252 - mae: 4954.3252Epoch 3/563/63 [==============================] - 0s 3ms/step - loss: 4929.9980 - mae: 4929.9980Epoch 4/563/63 [==============================] - 0s 3ms/step - loss: 4905.5146 - mae: 4905.5146Epoch 5/563/63 [==============================] - 0s 3ms/step - loss: 4880.8120 - mae: 4880.812063/63 [==============================] - 0s 2ms/step - loss: 4868.2192 - mae: 4868.2192Evaluate Testing :  [4868.21923828125, 4868.21923828125]

由于整个过程的随机性,结果自然会有所不同。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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