使用输入管道访问图中的输入变量

Access input variable in graph with input pipeline

假设有一个定义为 class 的模型,如下所示:

class SimpleAutoencoder(object):

    def __init__(self, x):

        self.x = x
        self.input_dim = 92
        self.latent_dim = 10

        self.build_model()


    def build_model(self):

        latent = tf.contrib.layers.fully_connected(self.x,
                                                   self.latent_dim,
                                                   scope='latent',
                                                   activation_fn=tf.nn.relu)

        self.x_hat = tf.contrib.layers.fully_connected(latent,
                                                  self.input_dim,
                                                  scope='output',
                                                  activation_fn=tf.nn.sigmoid)

        self.loss = tf.losses.mean_squared_error(self.x, self.x_hat)

        self.train_op = tf.AdamOptimizer().minimize(self.loss)

您使用输入管道训练它来提供数据:

...
x = iterator.get_next()
model = SimpleAutoencoder(x)
...

## train and save it to disk

现在,在构建模型时使用 self.x 的占位符时,我可以为其命名并在恢复模型进行推理时轻松访问输入变量。但是对于输入管道,x 不是变量、常量或占位符,因此我不能给它一个合适的名称。 如何将新数据注入 x 并通过图表提供?

尽管训练有效,但我认为我可能会以某种方式做错,因为代码对我来说真的很难看(将管道输出提供给 init 函数的部分)。

请帮我解决这个问题!谢谢!

  • 您可以使用 x.name
  • 获取 x 的名字
  • 或者,您可以使用 x = tf.identity(x, name='my_name')

    x 重命名为您喜欢的名称

    (使用这两种解决方案,您可以使用张量的名称来提供您的值——即使 x 不是占位符:

    sess.run(my_ops, feed_dict{tensor_name: tensor_value})
    

    )

  • 或者,您可以用一个占位符替换整个输入管道(针对相反的问题解释了 — 用 Dataset 输入替换一个占位符)