gpt4 book ai didi

python - 为什么 Adam 优化器不起作用?

转载 作者:行者123 更新时间:2023-11-30 22:32:53 26 4
gpt4 key购买 nike

我正在学习如何使用优化器在 Tensor Flow 中训练模型。因此,我构建了一个线性模型,创建了一个玩具数据集,并使用 AdamOptimizerGradientDescentOptimizer 训练线性模型。

这是我的片段:

# Training a linear model with Adam optimizer

import tensorflow as tf
import numpy as np

# Training dataset
Xs_ = np.random.random(48).reshape(12, 4)
Yt_ = np.random.random(12).reshape(12, 1)

Xs2_ = np.array([1, 2, 3, 4,
5, 6, 7, 8,
9, 10, 11, 12,
13, 14, 15, 16]).reshape(4, 4)
Yt2_ = np.array([1, 2, 3, 4]).reshape(4, 1)

# inference
Xs = tf.placeholder(shape=(None, 4), dtype=tf.float32)
W = tf.Variable(np.zeros((4,1), dtype=np.float32))
b = tf.Variable(np.ones((1, 1), dtype=np.float32))
Ys = tf.add(tf.matmul(Xs, W), b)

Yt = tf.placeholder(shape=(None, 1), dtype=tf.float32)

# loss
loss = tf.reduce_mean(tf.squared_difference(Yt, Ys))

# training
optimizer = tf.train.AdamOptimizer(learning_rate=1e-4, beta1=0.99, epsilon=0.1)
optimizer2 = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train = optimizer.minimize(loss)
train2 = optimizer2.minimize(loss)


# Executing the graph with Adam Optimizer
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())

feed_dict = {Yt: Yt2_, Xs: Xs2_}
sess.run(train, feed_dict)

print "Adam trained vars (W, b)", sess.run([W, b], feed_dict)

# Executing the graph with Gradient Descent Optimizer
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())

feed_dict = {Yt: Yt2_, Xs: Xs2_}
sess.run(train2, feed_dict)

print "GD trained vars (W, b)", sess.run([W, b], feed_dict)
<小时/>

这是我看到的输出:

Adam trained vars (W, b) [array([[  9.07433059e-05],
[ 9.14905831e-05],
[ 9.21262108e-05],
[ 9.26734720e-05]], dtype=float32), array([[ 1.00004864]], dtype=float32)]
GD trained vars (W, b) [array([[ 0.31 ],
[ 0.34 ],
[ 0.37 ],
[ 0.39999998]], dtype=float32), array([[ 1.02999997]], dtype=float32)]

我尝试了不同的学习率、beta 和 epsilon;但不知何故 AdamOptimizer 没有更新变量(Wb)。

我还看到一些人单独计算梯度,然后将其应用于变量,而不是直接使用 AdamOptimizer().minimize(_loss_function_)

我是 TensorFlow 新手,不确定我是否遗漏了某些内容。请提供一些见解。谢谢!

最佳答案

在这两种情况下,您只执行一步梯度下降。 Adam 默认具有很大的动量(惯性),因此需要一段时间才能加速。另一方面,SGD 会立即加速,因为它没有动量。执行更多次迭代,你会看到W的值相应增加。

关于python - 为什么 Adam 优化器不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45327463/

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