我有一个非常简单的神经网络,它在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
方法,在评估模型时,您应该提供x
和y
值。我运行以下代码片段时得到了相当相似的结果:
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]
由于整个过程的随机性,结果自然会有所不同。