【发布时间】:2016-07-23 05:49:57
【问题描述】:
我一直在尝试按照 MNIST 示例在 TensorFlow 中实现逻辑回归,但使用来自 CSV 的数据。每行是一个样本,有 12 个维度。我的代码如下:
batch_size = 5
learning_rate = .001
x = tf.placeholder(tf.float32,[None,12])
y = tf.placeholder(tf.float32,[None,2])
W = tf.Variable(tf.zeros([12,2]))
b = tf.Variable(tf.zeros([2]))
mult = tf.matmul(x,W)
pred = tf.nn.softmax(mult+b)
cost = tf.reduce_mean(-tf.reduce_sum(y*tf.log(pred), reduction_indices=1))
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
sess = tf.Session()
sess.run(tf.initialize_all_variables())
avg_cost = 0
total_batch = int(len(Xtrain)/batch_size)
for i in range(total_batch):
batch_xs = Xtrain[i*batch_size:batch_size*i+batch_size]
batch_ys = ytrain[i*batch_size:batch_size*i+batch_size]
_, c = sess.run([optimizer, cost], feed_dict={x: batch_xs,y: batch_ys})
print(c)
Xtrain 是一个 252x10 的 numpy 数组,而 ytrain 是一个 252x2 的单热 numpy 数组。
问题:计算第一次迭代的成本 c(值为 0.6931...),但之后的每次迭代,它都返回 'nan'。
我尝试过的事情:我确保模型的每个组成部分都正常工作。该问题完全发生在第一次迭代之后。我玩过学习率,但这无济于事。我已经尝试将权重初始化为 truncated_normal (无论如何我都不应该为逻辑回归做这件事),但这也无济于事。
那么,有什么想法吗?我花了大约 3 个小时试图修复它并且已经没有想法了。当 TensorFlow 去优化成本函数时,似乎有些东西不起作用。
【问题讨论】:
-
谢谢,这立即奏效了。如果您不介意解释, tf.maximum(pred,1e-15) 有什么作用,为什么它可以解决我遇到的问题?
-
很高兴它成功了。见下文!
标签: python numpy tensorflow logistic-regression