首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化器不会优化任何变量

优化器不会优化任何变量
EN

Stack Overflow用户
提问于 2017-12-07 16:48:36
回答 1查看 42关注 0票数 0

我想解决我的优化问题,但优化器不工作。我希望得到与给定值相差最小的解的数组,但我计算的softmax函数始终是1,因为权重和偏差在迭代中不会更新。它们都是零的张量。我如何解决这个问题?

代码语言:javascript
复制
#KI-Model
x = tf.placeholder(tf.float32, [None, 5], name='input') #x_1-x_5


#Init
W = tf.Variable(tf.zeros([5,1]), dtype=tf.float32)
b = tf.Variable(tf.zeros([1]), dtype=tf.float32)

#Sigmoid
y = tf.nn.softmax(tf.matmul(x, W) + b) 

#Training
y_tensor = tf.placeholder(tf.float32, [None, 1], name='output')

loss = y-y_tensor
cost = tf.square(loss)
optimizer = tf.train.GradientDescentOptimizer(0.003).minimize(cost)


#Start
session = tf.Session() 
init = tf.global_variables_initializer()
session.run(init)


#init first 1000 training_batches
for i in range(1000):
    batch_xs.append([dataA[i], dataB[i], dataC[i], dataD[i],
              dataE[i]])
    batch_ys.append([solution[i]])

for i in range(10000):

    session.run(optimizer, feed_dict={x:batch_xs, y_tensor:batch_ys})

print(session.run(y, feed_dict={x:batch_xs, y_tensor:batch_ys}) )
EN

回答 1

Stack Overflow用户

发布于 2017-12-07 17:27:03

你没有计算和应用渐变。缺少以下几行:

代码语言:javascript
复制
gradients = optimizer.compute_gradients(loss=cost)
train_step = optimizer.apply_gradients(grads_and_vars=gradients)

您还需要在每次迭代中运行训练步骤,如下所示:

代码语言:javascript
复制
session.run(train_step, feed_dict={x:batch_xs, y_tensor:batch_ys})

完整的正确代码:

代码语言:javascript
复制
#KI-Model
x = tf.placeholder(tf.float32, [None, 5], name='input') #x_1-x_5


#Init
W = tf.Variable(tf.zeros([5,1]), dtype=tf.float32)
b = tf.Variable(tf.zeros([1]), dtype=tf.float32)

#Sigmoid
y = tf.nn.softmax(tf.matmul(x, W) + b)

#Training
y_tensor = tf.placeholder(tf.float32, [None, 1], name='output')

loss = y-y_tensor
cost = tf.square(loss)
optimizer = tf.train.GradientDescentOptimizer(0.003)
gradients = optimizer.compute_gradients(loss=cost)
train_step = optimizer.apply_gradients(grads_and_vars=gradients)

#Start
session = tf.Session()
init = tf.global_variables_initializer()
session.run(init)


#init first 1000 training_batches
for i in range(1000):
    batch_xs.append([dataA[i], dataB[i], dataC[i], dataD[i],
              dataE[i]])
    batch_ys.append([solution[i]])

for i in range(10000):

    session.run(train_step, feed_dict={x:batch_xs, y_tensor:batch_ys})

print(session.run(y, feed_dict={x:batch_xs, y_tensor:batch_ys}) )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47690976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档