繁体   English   中英

TF Graph与代码不对应

[英]TF Graph does not correspond to the code

我试图创建一个非常简单的神经网络,读取形状为1x2048信息,并为两个类别(对象或非对象)创建分类。 但是,图形结构与我认为已编码的结构有所不同。 密集层应包含在“ inner_layer”的范围内,并应从“输入”占位符接收其输入。 相反,TF似乎将它们视为独立的层,它们不从“输入”接收任何信息。

另外,当使用尝试使用张量板摘要时,我得到一个错误,告诉我没有提到为密集层的表面占位符插入输入。 当省略tensorboard时,一切都根据代码的预期工作。

我已经花了很多时间试图找到问题,但是我认为我必须忽略一个非常基本的问题。

我在张量板上得到的图在此图像上

对应于以下代码:

tf.reset_default_graph()
keep_prob = 0.5

# Graph Strcuture
## Placeholders for input
with tf.name_scope('input'):
    x_ = tf.placeholder(tf.float32, shape = [None, transfer_values_train.shape[1]], name = "input1")
    y_ = tf.placeholder(tf.float32, shape = [None, num_classes], name = "labels")

## Dense Layer one with 2048 nodes
with tf.name_scope('inner_layers'):
    first_layer = tf.layers.dense(x_, units = 2048, activation=tf.nn.relu, name = "first_dense")
    dropout_layer = tf.nn.dropout(first_layer, keep_prob, name = "dropout_layer")
    #readout layer, without softmax
    y_conv = tf.layers.dense(dropout_layer, units = 2, activation=tf.nn.relu, name = "second_dense")

# Evaluation and training
with tf.name_scope('cross_entropy'):
    cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(labels = y_ , logits = y_conv),
                                   name = "cross_entropy_layer")
with tf.name_scope('trainer'):
    train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)

with tf.name_scope('accuracy'):
    prediction = tf.argmax(y_conv, axis = 1)
    correct_prediction = tf.equal(prediction, tf.argmax(y_, axis = 1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

有谁知道为什么图形与基于代码的期望如此不同?

tensorboard中的图形渲染可能(从一开始)可能有点令人困惑,但这是正确的。 看一下这张图片,我只剩下了图形的inner_layers部分:

张量板

您可能会注意到:

  • first_densesecond_dense实际上是名称范围本身(由tf.layers.dense函数生成;另请参见此问题 )。
  • 它们的输入/输出张量内部inner_layers范围和电线正确的dropout_layer 在此,在每个密集层中,运行相应的线性操作: MatMulBiasAddRelu
  • 这两个范围还包括变量 (每个变量分别是 kernelbias ),这些变量inner_layers分开inner_layers 它们封装相关具体地涉及可变的OPS,如readassigninitialize等的直线OPS first_dense取决于可变OPS first_dense ,和second_dense同样。

    这种分离的原因是,在分布式设置中 ,变量由另一个称为参数服务器的任务管理。 它通常在不同的设备(CPU而不是GPU)上运行,有时甚至在不同的计算机上运行。 换句话说,对于张量流,变量管理在设计上不同于矩阵计算。

    话虽如此,我很乐意看到张量流中的一种模式,该模式不会将范围拆分为变量和操作,并使它们保持耦合。

除此之外,图形与代码完全匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM