【问题标题】:Access input variable in graph with input pipeline使用输入管道访问图中的输入变量
【发布时间】:2025-12-05 12:55:02
【问题描述】:

假设有一个模型定义为这样的类:

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 函数的部分)。

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

【问题讨论】:

    标签: python tensorflow tensorflow-datasets


    【解决方案1】:
    • 您可以使用x.name 获取x 的名称,
    • 或者,您可以使用 x = tf.identity(x, name='my_name')x 重命名为您喜欢的名称,

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

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

      )

    • 或者,您可以用占位符替换整个输入管道(解释 here 用于相反的问题 - 用 Dataset 输入替换占位符)

    【讨论】:

      最近更新 更多