我正在使用tensorflow的tensorflow.data.Dataset API。但是,我需要动态创建数据集以滤除其他数据集的元素。虽然训练进行得很顺利,并且我可以遍历训练集和开发集,但是当我使用刚用过滤器创建的新数据集重新初始化迭代器时,我收到以下异常:
tensorflow.python.framework.errors_impl.NotFoundError: Function tf_predicate_5HKZIzWZBv8 is not defined.
我正在使用以下函数从数据集中创建初始化程序:
self.iterator.make_initializer(dataset)
其中self.iterator定义如下:
self.iterator = tf.data.Iterator.from_structure(ds_types, ds_shapes)
你们是否知道为什么会这样?请注意,如果在创建会话,运行数据集然后创建新的初始化程序之后调用make_initializer,则会发生这种情况。如果在创建之后我也重新创建了Session,那么一切正常(除了必须重新初始化所有变量的事实)
答案 0 :(得分:1)
我找到了解决方案,我正在分享,以防有人遇到此问题。事实是,在会话初始化后定义新数据集的过程中,它没有为新数据集添加的新操作(在这种情况下,我每次都使用新的过滤器创建新的数据集),这就是会话无法找到操作的原因。为了解决该问题,我定义了初始化会话之前需要使用的所有数据集,并且使用了一个将占位符作为输入的过滤器,以便在每次迭代器初始化时始终使用正确的值输入相同的过滤器。>