Tensorflow,将feed_dict替换为来自\u生成器的Dataset

Tensorflow,将feed_dict替换为来自\u生成器的Dataset,tensorflow,Tensorflow,我有一个在循环中读取文本文件的现有模型,结果输入和输出如下所示: self.X = tf.placeholder('float32', shape=[None, None, max_word_length, ALPHABET_SIZE], name='X') self.Y = tf.placeholder('float32', shape=[None, 2], name='Y') ... _, c, a = sess.run([optimizer, cost, a

我有一个在循环中读取文本文件的现有模型,结果输入和输出如下所示:

    self.X = tf.placeholder('float32', shape=[None, None, max_word_length, ALPHABET_SIZE], name='X')
    self.Y = tf.placeholder('float32', shape=[None, 2], name='Y')
    ...
    _, c, a = sess.run([optimizer, cost, acc], feed_dict={self.X: batch_x, self.Y: batch_y})
但现在我想转换为使用Dataset.from_generator方法,首先,我在文本阅读器周围创建了一个包装器类,该类实现了generator函数,这一切都很好,并按预期返回输入数据:

    dsr = DatasetReader(TRAIN_SET, BATCH_SIZE, max_word_length)
    ds = tf.data.Dataset.from_generator(dsr.generator, (tf.float32, tf.float32))
    ds = ds.prefetch(2)
    dsi = ds.make_one_shot_iterator()
    self.X, self.Y = dsi.get_next()
    _, c, a = sess.run([optimizer, cost, acc])
然而,我得到了一个错误

InvalidArgumentError: You must feed a value for placeholder tensor 'X' with dtype float and shape [?,?,16,70]
我假设这是因为我将X/Y输入声明为占位符,文档说明这些值必须通过feed_dict输入

所以我有几个问题:

  • 如何将提要和占位符转换为正确使用from生成器?我想保留张量X和Y的命名,这样我就可以在推理过程中用这个名称输入它们

  • 更一般地说,我看不出数据集及其迭代器是如何链接到会话的,它是纯粹通过迭代器输出作为图形中其他操作的输入而链接的吗


  • 您可以完全删除占位符。如果您定义了占位符,则说明您做错了。它应该是这样的,正如你所拥有的:

    self.X, self.Y = dsi.get_next()
    # continue your network
    
    代码中的某些内容似乎正在尝试使用占位符,而它本应尝试从
    dsi.get\u next()使用
    self.X

    如何从提要和占位符转换为使用 从发电机正确吗?我想保留张量X的命名 所以在推理过程中,我可以用这个名字来输入它们

    您可以使用
    yield{“X”:data,“y”:labels}

    更一般地说,我看不出数据集及其迭代器是如何链接的 它是否纯粹通过迭代器输出链接到会话 是否用作图形中其他操作的输入

    迭代器是图形中的一个元素,它的工作方式与tensorflow中的所有其他操作一样,当它是计算结果所需的依赖项的一部分时,它执行其定义的操作