在Tensorflow图中重用数据(使用Queues和tf.cond())

时间:2018-03-14 06:15:21

标签: if-statement tensorflow control-flow

我在Tensorflow中构建data.frame(a = c("p1","p1","p2","p3","p4","p6"), b = c("A","B","A","C","B","C")) ,旨在重新使用resample layer的数据 - 从resample_n获取新数据之前(来自某些hdf5数据源的Que读取) )。我有一个Network类,并存储从数据层返回的张量(net_data_layer()),用于" global"访问(例如,用于构建网络图,但也可以通过我的self):

train_op()

我添加了一些逻辑,以便在第一次迭代self.batch_img, self.batch_label, self.batch_weights = net_data_layer() 中,意图调用数据层队列,然后resample == False用于下一次resample == True次迭代。图中的部分归结为:

resample_n

self.batch_img, self.batch_label, self.batch_weights = \ tf.cond(resample, lambda: resample_data(), lambda: net_data_layer()) 只返回先前存储的数据,除了将已存储的数据转发到图表外基本上什么都不做:

resample_data()

但是我收到了错误:

def resample_data(): return self.batch_img, self.batch_label, self.batch_weights

这导致我进行了this讨论,其中这是通过"将QueueRunner逻辑置于tf.cond()上下文"之外来解决的。然而,拥有队列IN是我的条件的全部要点,因为当我运行它们(特别是dequeue-op)时,它们会跳到下一个样本。

是否有办法让图表重复使用已加载的数据(或者是那种"循环"并且不支持?)。我有点深入......有什么想法吗?

供参考整个" ResampleLayer"代码块:

ValueError: Operation 'ResampleLayer/cond/DataLayer_hdf5_dset/test_data/fifo_queue_enqueue' has been marked as not fetchable.

0 个答案:

没有答案