Tensorflow,共享变量定义的放置

时间:2017-06-02 16:27:03

标签: python tensorflow

我对TensorFlow模型的定义存有疑问。 我正在实现一个相当特殊的神经网络模型,我需要访问不同输入的输出电平值来计算损失函数...

所以,我在这样的函数中定义了神经网络的层:

def g(input_x,....):
###...Convolutional and Fully Connected Layers...###
# Last FC Layer
with tf.name_scope("output"):
    W = tf.Variable(tf.truncated_normal([num_hidden_units, num_classes], stddev=0.05), name="W")
    b = tf.Variable(tf.constant(0.1, shape=[num_classes]), name="b")
    scores = tf.nn.xw_plus_b(fc_2_output, W, b, name="output")
return scores

然后在我的模型中,我有类似的东西:

with tf.Graph().as_default():
    session_conf = tf.ConfigProto(
        allow_soft_placement=FLAGS.allow_soft_placement,
        log_device_placement=FLAGS.log_device_placement)
    sess = tf.Session(config=session_conf)
    with sess.as_default():
         ###definition of other variables, constants and placeholders###

         ###weird loss function with scores from different inputs###
         loss_function = tf.reduce_mean(alpha1 * weights_ll * tf.nn.softmax_cross_entropy_with_logits(logits=g(input1), labels=labels1) \
                        + cu1 * tf.nn.softmax_cross_entropy_with_logits(logits=g(input2), labels=g(input1) \
                        + cv1 * tf.nn.softmax_cross_entropy_with_logits(logits=g(input1), labels=labels2))) \
                        + ... + ...
        optimizer = tf.train.AdamOptimizer(1e-3).minimize(loss_function, global_step=global_step)
           ##...training steps and such...##

训练正在进行,但是如果没有长时间运行我会得到奇怪的结果,我想知道g函数中定义的权重是否正在训练中,或者它们是否超出了优化器的范围。

不幸的是,我仍然在学习很多关于张量流的知识,而且我没有TensorBoard结果给你看。

我只需要从具有更多经验的人那里了解如果定义这样的模型是合法的,使用python函数进行输出。

非常感谢你阅读这篇文章

2 个答案:

答案 0 :(得分:0)

您似乎无法使用

初始化变量
sess.run(tf.global_variables_initializer())

除此之外,如果不了解模型和代码,我们无法确定模型是否可行。

答案 1 :(得分:0)

正如我所说,在损失函数中,我使用不同输入的分数(网络的输出值),并使用cross_entropy函数对它们进行比较。

tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None)

此函数计算logits的softmax,但自然它不会为标签计算它们,因此,为了正确比较不同输入的分数,我需要包装"标签&#34 ;使用tf.nn.softmax()函数,如下所示:(注意最后一项)

loss_function = tf.reduce_sum(alpha1 * weights_ll tf.nn.softmax_cross_entropy_with_logits(logits=g(input1), labels=tf.nn.softmax(g(input))

如果你好奇为什么我需要做这样的事情,而你对深度学习感兴趣,我邀请你阅读这篇关于神经图形机器的有趣论文:https://arxiv.org/abs/1703.04818

此外,这个模型存在另一个大问题,即我不会共享变量,因此在实践中使用此损失功能就像为loss_function的每个术语训练多个网络一样。

幸运的是,TensorFlow网站上有一个解决共享变量的教程:https://www.tensorflow.org/programmers_guide/variable_scope