2017-06-02 82 views
2

我对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函数正在接受培训,或者它们有点超出了优化器的范围。

不幸的是,我仍然在学习了很多关于tensorflow,我没有TensorBoard结果,现在向您展示。

我只是需要从别人多一点经验,知道它是否是合法的,像这样定义的模型,使用Python函数的输出。

非常感谢您阅读这篇远

+1

嗨,其良好定义模型蟒蛇功能。有没有访问问题。如果有任何问题,那可能是因为损失功能。请说明你得到了什么类型的奇怪结果。减少损失? – hars

+0

损失被降低到大负值在-1e + 15 顺序,但精度不增加,这是一个二元分类问题,它的平均值0.5(随机猜测) –

+1

你尝试用简单的损失函数(一组输入)?在这种情况下精度是否发生变化 – hars

回答

0

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

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

此功能computs的logits的SOFTMAX,但自然也不会计算他们的标签,因此,为了正确地比较不同输入的分数我需要包装的“标签”与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

0

你似乎不

sess.run(tf.global_variables_initializer()) 

除此之外,我们真的不能确定该模型是否可行与否没有初始化的变量了解模型和代码。

+0

当然,变量正在初始化,否则我根本无法训练它。整个代码是在线https://github.com/gssci/neural-graph-network-sentiment-analysis/blob/training/neural_graph_machine.py 但重要的部分是真的在那里我想:) –