渐变总是为零

时间:2016-06-28 21:11:06

标签: tensorflow tensorboard

我已经使用张量流框架编写了一个算法并面对问题,tf.train.Optimizer.compute_gradients(loss)为所有权重返回零。另一个问题是,如果我将批量大小大于约5,则tf.histogram_summary用于权重会抛出一些值为NaN的错误。

我不能在这里提供一个可重复的例子,因为我的代码非常笨重,而且我在TF方面做得不够好。我会尝试在这里粘贴一些片段。

主循环:

images_ph = tf.placeholder(tf.float32, shape=some_shape)
labels_ph = tf.placeholder(tf.float32, shape=some_shape)
output = inference(BATCH_SIZE, images_ph)
loss = loss(labels_ph, output)
train_op = train(loss, global_step)
session = tf.Session()
session.run(tf.initialize_all_variables())

for i in xrange(MAX_STEPS):
    images, labels = train_dataset.get_batch(BATCH_SIZE, yolo.INPUT_SIZE, yolo.OUTPUT_SIZE)
    session.run([loss, train_op], feed_dict={images_ph : images, labels_ph : labels})

Train_op(这是问题发生):

def train(total_loss)
    opt = tf.train.AdamOptimizer()
    grads = opt.compute_gradients(total_loss)

    # Here gradients are zeros
    for grad, var in grads:
        if grad is not None:
            tf.histogram_summary("gradients/" + var.op.name, grad)

    return opt.apply_gradients(grads, global_step=global_step)

损失(损失计算正确,因为它随样品而变化):

def loss(labels, output)
    return tf.reduce_mean(tf.squared_difference(labels, output))

推理:一组带有ReLU的卷积层,后面是3个完全连接的层,最后一层有sigmoid激活。所有权重都由截断的正常rv初始化。所有标签都是固定长度的矢量,实数范围为[0,1]

提前感谢您的帮助!如果你对我的问题有一些假设,请分享我会试试。如果你愿意,我也可以分享整个代码。

0 个答案:

没有答案