我有以下问题。我想测试tf.gradients
函数,所以我用一个带有softmax和
W = tf.Variable(tf.zeros([10, 784]), dtype=tf.float32)
b = tf.Variable(tf.zeros([10,1]), dtype=tf.float32)
y_ = tf.nn.softmax(tf.matmul(W,X_)+b)
cost = - tf.reduce_mean(Y * tf.log(y_)+(1-Y) * tf.log(1-y_))
grad_W, grad_b = tf.gradients(xs=[W, b], ys=cost)
然后我用
更新权重new_W = W.assign(W - learning_rate_ * (grad_W))
new_b = b.assign(b - learning_rate_ * (grad_b))
现在我想将它与标准优化器进行比较
optimizer = tf.train.GradientDescentOptimizer(learning_rate_).minimize(cost)
有趣的是,成本函数(在两种情况下相同)出现几乎相同,但并不完全。我想知道为什么。舍入错误?或tf.train.GradientDescentOptimizer
做一些略有不同的事情?在这里给你一个想法是成对的值(带渐变和优化器)
0.993107 - 0.993085
0.953979 - 0.953984
任何人都可以解释一下吗?
编辑:开头有趣(epoch = 0)两个值相同。这似乎是一个错误,每个时代都会增加成本函数......
谢谢,翁贝托