python - 为什么评估()的结果与上一个时代的结果不同?
问题描述
mae = 0.1397
我有一个非常简单的神经网络,它可以在 250 个 epoch 中工作,在最后一个 epoch 中它显示model.evaluate((m * test_x + b), predict_y))
了44009.296875
为什么会有这么大的差异?
这是我的代码:
import tensorflow as tf
from tensorflow.keras import Input
from tensorflow.keras.layers import Dense
from tensorflow.keras.utils import plot_model
import numpy as np
import matplotlib.pyplot as plt
train_x = np.arange(2000)
m = 5
b = 4
train_y = m * train_x + b
# -----------------------------------------------------
# Create a Sequential Nerual Network
model = 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 model
model.compile(loss=tf.keras.losses.mae,
optimizer=tf.keras.optimizers.Adam(learning_rate=0.0001),
metrics=["mae"])
# -----------------------------------------------------
# Train the model
model.fit(train_x, train_y, epochs=250)
# -----------------------------------------------------
# Test the model
test_x = np.arange(2000, 2400)
predict_y = model.predict([test_x])
# ------------------------------------------------------
# Evaluation
print("Evaluate Testing : ", model.evaluate((m * test_x + b), predict_y))
解决方案
我不太确定您是否model.evaluate
正确使用了该方法。与该model.fit
方法类似,在评估您的模型时,您应该提供x
和y
值。运行此代码段时,我得到了非常相似的结果:
import tensorflow as tf
from tensorflow.keras import Input
from tensorflow.keras.layers import Dense
from tensorflow.keras.utils import plot_model
import numpy as np
import matplotlib.pyplot as plt
train_x = np.arange(2000)
m = 5
b = 4
train_y = m * train_x + b
# -----------------------------------------------------
# Create a Sequential Nerual Network
model = 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 model
model.compile(loss=tf.keras.losses.mae,
optimizer=tf.keras.optimizers.Adam(learning_rate=0.0001),
metrics=["mae"])
# -----------------------------------------------------
# Train the model
model.fit(train_x, train_y, epochs=5, batch_size=32)
# -----------------------------------------------------
# Test the model
test_x = np.arange(2000)
predict_y = model.predict([test_x])
# ------------------------------------------------------
# Evaluation
print("Evaluate Testing : ", model.evaluate(test_x, m * test_x + b, batch_size=32))
Epoch 1/5
63/63 [==============================] - 1s 3ms/step - loss: 4978.4922 - mae: 4978.4922
Epoch 2/5
63/63 [==============================] - 0s 3ms/step - loss: 4954.3252 - mae: 4954.3252
Epoch 3/5
63/63 [==============================] - 0s 3ms/step - loss: 4929.9980 - mae: 4929.9980
Epoch 4/5
63/63 [==============================] - 0s 3ms/step - loss: 4905.5146 - mae: 4905.5146
Epoch 5/5
63/63 [==============================] - 0s 3ms/step - loss: 4880.8120 - mae: 4880.8120
63/63 [==============================] - 0s 2ms/step - loss: 4868.2192 - mae: 4868.2192
Evaluate Testing : [4868.21923828125, 4868.21923828125]
由于整个过程的随机性,结果自然会有所不同。
推荐阅读
- amazon-web-services - presto/athena 从当前时间戳获取下一分钟
- python - 单击时中断 Kivy 切换按钮状态更改
- reactjs - React 更新动态嵌套状态
- python-3.x - 在处理元类时处理静态方法
- azure-devops - 在构建管道中未正确读取 Azure 变量
- css - 如何在更新内容时添加淡入淡出
- ios - 将 Google 驱动器集成到我的应用程序中:“GIDAuthentication”类型的值没有成员“fetcherAuthorizer”
- javascript - 当我尝试使用时状态未定义
- java - 具有关联类的 Java-Spring Json 字段
- github - github 上的 Jupyter 笔记本:隐藏文件路径