现在我使用tensorflow编写程序来验证模型.我使用FIFOQueue对输入数据进行排队.例如,我有50,000张图像,一次排列100张图像.除最后一次迭代外,该程序运行良好.在最后一次迭代中,它显示错误"E tensorflow/core/client/tensor_c_api.cc:485] FIFOQueue'_0_path_queue'关闭且元素不足(请求1,当前大小为0)[[Node:path_queue_Dequeue = QueueDequeue_class = [ "loc:@path_queue"],component_types = [DT_INT32,DT_BOOL,DT_STRING],timeout_ms = -1,_device ="/ job:localhost/replica:0/task:0/cpu:0"]]"
我认为这是因为它试图将50,001~50,100图像排入队列但却无法实现.但是,我不需要将这些图像排入队列,也不会使用它们.我怎样才能避免这个错误?
另一个问题是,如果我想使用dequeue_many(100),则图像的总数不能被100整除,比如说45678.在这种情况下,tensorflow会抛出错误.我怎么解决这个问题?
谢谢.
我想做的是同时运行多个预先训练好的Tensorflow网.因为每个网络中的一些变量的名称可以是相同的,所以常见的解决方案是在创建网络时使用名称范围.但问题是我训练了这些模型并将训练过的变量保存在几个检查点文件中.在创建网络时使用名称范围后,我无法从检查点文件加载变量.
例如,我训练了一个AlexNet,我想比较两组变量,一组来自纪元10(保存在文件epoch_10.ckpt中),另一组来自纪元50(保存在文件epoch_50中). CKPT).因为这两者是完全相同的网,所以内部变量的名称是相同的.我可以使用创建两个网
with tf.name_scope("net1"):
net1 = CreateAlexNet()
with tf.name_scope("net2"):
net2 = CreateAlexNet()
Run Code Online (Sandbox Code Playgroud)
但是,我无法从.ckpt文件加载训练过的变量,因为当我训练这个网时,我没有使用名称范围.即使我在训练网络时可以将名称范围设置为"net1",这也可以防止我加载net2的变量.
我试过了:
with tf.name_scope("net1"):
mySaver.restore(sess, 'epoch_10.ckpt')
with tf.name_scope("net2"):
mySaver.restore(sess, 'epoch_50.ckpt')
Run Code Online (Sandbox Code Playgroud)
这不起作用.
解决这个问题的最佳方法是什么?
根据博客文章" https://petewarden.com/2016/05/03/how-to-quantize-neural-networks-with-tensorflow/",Tensorflow会在值进入图层之前对其进行量化.在由层处理之后,对值进行解量化.Tensorflow通过重新调整0到255之间的值来量化值,因此需要保持"min"和"max"来对值进行反量化.
我想问一下:1."量化"运算的输出中的"min"和"max"是如何确定的?我的意思是,如果我们只是找到最小值和最大值并将它们设置为0和255,我们将在进行卷积时获得数据上溢或下溢.2.如何确定"卷积"运算的输出中的"min"和"max"?权重和激活都是量化的,因此有两组"min"和"max".卷积运算如何将它们组合成一组"min"和"max"?