我正在尝试从另一个模块中运行tf程序。 tf程序将deep deblurring应用于图像,并且如果我使用存储库中提供的参数从控制台将其应用于单个文件夹,则可以正常工作(我使用的是python3,但这似乎不是问题):
python3 run_model.py --input_path=./testing_set --output_path=./testing_res --height=720 --width=1280 --gpu=0
问题是,当我尝试多次运行deblur模块时,它抱怨说:
ValueError:变量g_net / enc1_1 / weights已经存在,不允许使用。 您是要在VarScope中设置“ reuse = True”还是“ reuse = tf.AUTO_REUSE”?
引起麻烦的行是这个one:
outputs = self.generator(inputs, reuse=False)
尽管该模块在第一个文件夹中运行正常,但抱怨下一个文件夹。
由于我基本上将推理应用于我分别拥有的每个文件夹(至少是这样做的目的),我猜想可以尝试reuse=True
。但这似乎会引起另一个问题:
ValueError:变量g_net / enc1_1 / weights不存在或不存在 使用tf.get_variable()创建。你是说定 在VarScope中重用= tf.AUTO_REUSE?
如果我将其设置为可重用,似乎再也找不到此变量。这似乎很奇怪。
从this answer来看,似乎将tf设置为reuse
时会假定该变量已存在,因此找不到该变量时会抱怨。
我找不到应该检查其存在性的实际变量(也许全部在模型中?),所以我对整个with tf.variable_scope(scope, reuse=False):
子句应用了try...except
子句。这似乎适用于多个文件夹,但它在第5个文件夹中抱怨:
ValueError:尺寸必须相等,但对于46和45 输入形状为[1,46,80,64]的“ g_net_6 / add”(操作:“添加”), [1,45,80,64]。
该文件夹包含不同输入大小的图像,所以这就是我抱怨的原因。
作为最后的尝试,我什至尝试通过每次调用模型构造函数来为每个文件夹(例如,在for循环内)创建一个新的去模糊模型:
deblur = model.DEBLUR(args)
...
deblur.test(h, w, input_path, output_path)
由于某种原因,这似乎也不起作用。我当然在这里想念一些东西。
在deblur.test()
内声明了一个新会话,因此据我所知它应该可以正常工作。
因此,出现了一些问题:
try..except
子句似乎有效,但我无法弄清楚哪个变量受到影响,或者(如果我怀疑多个变量受到影响)在哪里发生。我看到模型权重在slim.arg_scope()
中初始化。这是否意味着reuse
参数在此处传递并以不同的方式对待变量?deblur = None
或在with tf.Session...
中使用deblur.test()
,但似乎没有任何改变。