gpt4 book ai didi

python - Tensorflow 模型的性能明显低于 Keras 模型

转载 作者:行者123 更新时间:2023-12-02 08:42:54 25 4
gpt4 key购买 nike

我的 Tensorflow 模型出现问题,决定尝试 Keras。至少在我看来,我正在使用相同的参数创建相同的模型,但 Tensorflow 模型仅输出 train_y 的平均值,而 Keras 模型实际上根据输入而变化。我在 tf.Session 中遗漏了什么吗?我平时用的是Tensorflow,从来没有遇到过这样的问题。 tensorflow 代码:

score_inputs = tf.placeholder(np.float32, shape=(None, 100))
targets = tf.placeholder(np.float32, shape=(None), name="targets")

l2 = tf.contrib.layers.l2_regularizer(0.01)

first_layer = tf.layers.dense(score_inputs, 100, activation=tf.nn.relu, kernel_regularizer=l2)
outputs = tf.layers.dense(first_layer, 1, activation = None, kernel_regularizer=l2)

optimizer = tf.train.AdamOptimizer(0.001)
l2_loss = tf.losses.get_regularization_loss()
loss = tf.reduce_mean(tf.square(tf.subtract(targets, outputs)))
loss += l2_loss
rmse = tf.sqrt(tf.reduce_mean(tf.square(outputs - targets)))
mae = tf.reduce_mean(tf.sqrt(tf.square(outputs - targets)))
training_op = optimizer.minimize(loss)

batch_size = 32

with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for epoch in range(10):
avg_train_error = []
for i in range(len(train_x) // batch_size):
batch_x = train_x[i*batch_size: (i+1)*batch_size]
batch_y = train_y[i*batch_size: (i+1)*batch_size]
_, train_loss = sess.run([training_op, loss], {score_inputs: batch_x, targets: batch_y})

feed = {score_inputs: test_x, targets: test_y}
test_loss, test_mae, test_rmse, test_ouputs = sess.run([loss, mae, rmse, outputs], feed)

平均绝对误差为 0.682,均方根误差为 0.891。

Keras 代码:

inputs = Input(shape=(100,))
hidden = Dense(100, activation="relu", kernel_regularizer = regularizers.l2(0.01))(inputs)
outputs = Dense(1, activation=None, kernel_regularizer = regularizers.l2(0.01))(hidden)
model = Model(inputs=inputs, outputs=outputs)
model.compile(optimizer=keras.optimizers.Adam(lr=0.001), loss='mse', metrics=['mae'])
model.fit(train_x, train_y, batch_size=32, epochs=10, shuffle=False)
keras_pred = model.predict(test_x)

平均绝对误差为 0.601,均方根误差为 0.753。

在我看来,我在这两个实例中定义了相同的网络,但正如我所说,Tensorflow 模型仅输出 train_y 的平均值,而 Keras 模型的性能要好得多。有什么建议吗?

最佳答案

我将尝试指出两个代码之间的差异。

Keras 文档 here显示权重由“glorot_uniform”初始化,而您的权重默认初始化,很可能是随机的,因为文档没有明确指定它是什么tensorflow intialization 。所以初始化很可能是不同的,而且它肯定是不同的很重要。

第二个差异很可能是因为输入数据类型的差异,一个是 numpy.float32,另一个是 keras 默认输入类型,文档也没有指定该类型

关于python - Tensorflow 模型的性能明显低于 Keras 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56069411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com