我在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.