Tensorflow Can';应用tf.contrib.layers.褶合2D_转置的t恢复模型
Tensorflow Can';应用tf.contrib.layers.褶合2D_转置的t恢复模型,tensorflow,deep-learning,Tensorflow,Deep Learning,我正在尝试使用以下代码还原模型: new_saver = tf.train.import_meta_graph(model_path+'.meta') new_saver.restore(sess, model_path) g=tf.get_default_graph() 对于原始图表中的每个权重或偏差,我都做了g。通过\u name()获取\u tensrr\u。 但当我尝试在deconv2d层上执行此操作时,如下所示: def deconv2d(self,inputs, num_outpu
我正在尝试使用以下代码还原模型:
new_saver = tf.train.import_meta_graph(model_path+'.meta')
new_saver.restore(sess, model_path)
g=tf.get_default_graph()
对于原始图表中的每个权重或偏差,我都做了g。通过\u name()获取\u tensrr\u
。
但当我尝试在deconv2d
层上执行此操作时,如下所示:
def deconv2d(self,inputs, num_outputs, kernel_shape, g,scope,strides=[1, 1]):
with tf.variable_scope(scope) as scope:
weights_initializer = g.get_tensor_by_name("prsr/conditioning/deconv/Conv2d_transpose/weights:0")
biases_initializer = g.get_tensor_by_name("prsr/conditioning/deconv/Conv2d_transpose/biases:0")
return tf.contrib.layers.convolution2d_transpose(inputs=inputs, num_outputs=num_outputs,kernel_size=kernel_shape,stride=strides, \
padding='SAME', weights_initializer=weights_initializer,biases_initializer=biases_initializer)
它失败并显示以下错误:
File "restore.py", line 41, in deconv2d
padding='SAME', weights_initializer=weights_initializer,biases_initializer=biases_initializer)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/framework/python/ops/arg_scope.py", line 177, in func_with_args
return func(*args, **current_args)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers/python/layers/layers.py", line 1126, in convolution2d_transpose
outputs = layer.apply(inputs)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/layers/base.py", line 323, in apply
return self.__call__(inputs, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/layers/base.py", line 289, in __call__
self.build(input_shapes[0])
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/layers/convolutional.py", line 1043, in build
dtype=self.dtype)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.py", line 1033, in get_variable
use_resource=use_resource, custom_getter=custom_getter)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.py", line 932, in get_variable
use_resource=use_resource, custom_getter=custom_getter)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.py", line 349, in get_variable
validate_shape=validate_shape, use_resource=use_resource)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/layers/base.py", line 278, in variable_getter
variable_getter=functools.partial(getter, **kwargs))
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/layers/base.py", line 228, in _add_variable
trainable=trainable and self.trainable)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers/python/layers/layers.py", line 1327, in layer_variable_getter
return _model_variable_getter(getter, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers/python/layers/layers.py", line 1316, in _model_variable_getter
custom_getter=getter, use_resource=use_resource)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/framework/python/ops/arg_scope.py", line 177, in func_with_args
return func(*args, **current_args)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/framework/python/ops/variables.py", line 259, in model_variable
use_resource=use_resource)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/framework/python/ops/arg_scope.py", line 177, in func_with_args
return func(*args, **current_args)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/framework/python/ops/variables.py", line 214, in variable
use_resource=use_resource)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.py", line 341, in _true_getter
use_resource=use_resource)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.py", line 638, in _get_single_variable
raise ValueError("If initializer is a constant, do not specify shape.")
ValueError: If initializer is a constant, do not specify shape.
我不知道这指的是哪个形状,我也不认为权重和偏差是常数,它们是张量,对吗?顺便说一句,我非常确定这两个张量,prsr/conditionation/deconv/Conv2d_transpose/weights
和prsr/conditionation/deconv/Conv2d_transpose/biases
存在于原始图形中,因为我使用检查点文件中的print_tensors_检查了这一点,我实际上可以看到这些值。
那个么,我怎样才能恢复应用这个tf.contrib.layers.convolution2d\u transpose()
layer的模型呢?我在stackoverflow和github上搜索了很多,但都没有找到。任何帮助都将不胜感激 weights\u initializer
和bias\u initializer
不是您所认为的那样。你可能认为这两个张量是反褶积中权重的初始值,对吧?但是,初始值设定项参数是一个函数,而不是张量,应该如下所示:
def my_initializer(shape, dtype=tf.float32, partition_info=None):
# do some computation to build up a tensor of the given shape
return that_tensor
然后您可以像这样使用此初始值设定项:
tf.contrib.layers.convolution2d_transpose(inputs=inputs, ..., weights_initializer=my_initializer)
因此,为了解决您的问题,我认为以下方法应该有效:
def weights_initializer(shape, dtype=tf.float32, partition_info=None):
weights = tf.get_default_graph().get_tensor_by_name("prsr/conditioning/deconv/Conv2d_transpose/weights:0")
return weights
不过,在我看来,这有点令人讨厌。为什么要加载图形,然后在新操作中使用预先训练的权重?为什么在设置初始模型之前,这些权重没有与此操作关联
注:当处理变量时,你可能会发现tf.get\u variable
很方便。如果使用tf.get\u variable
创建变量,则可以在以后使用tf.get\u variable
再次检索这些变量,而无需调用繁琐的get\u tensor\u by\u name
。查看更多信息。weights\u initializer
和bias\u initializer
不是您所认为的那样。你可能认为这两个张量是反褶积中权重的初始值,对吧?但是,初始值设定项参数是一个函数,而不是张量,应该如下所示:
def my_initializer(shape, dtype=tf.float32, partition_info=None):
# do some computation to build up a tensor of the given shape
return that_tensor
然后您可以像这样使用此初始值设定项:
tf.contrib.layers.convolution2d_transpose(inputs=inputs, ..., weights_initializer=my_initializer)
因此,为了解决您的问题,我认为以下方法应该有效:
def weights_initializer(shape, dtype=tf.float32, partition_info=None):
weights = tf.get_default_graph().get_tensor_by_name("prsr/conditioning/deconv/Conv2d_transpose/weights:0")
return weights
不过,在我看来,这有点令人讨厌。为什么要加载图形,然后在新操作中使用预先训练的权重?为什么在设置初始模型之前,这些权重没有与此操作关联
注:当处理变量时,你可能会发现tf.get\u variable
很方便。如果使用tf.get\u variable
创建变量,则可以在以后使用tf.get\u variable
再次检索这些变量,而无需调用繁琐的get\u tensor\u by\u name
。查看更多信息。谢谢您的回复。我试过你说的,但还是不起作用。我这样做的原因是因为我在恢复tensorflow计算图中节点的值时遇到了麻烦。你能看一下这个截图吗?我试图恢复“c_logits”节点,实际上我可以通过名称(“prsr/condition/conv/c_logits:0”)
,然后sess.run(node)
,但值与它应该的值不同。天哪,我很抱歉,我知道发生了什么。我将输入馈送到错误的节点!现在它的完美工作!非常感谢。谢谢你的回复。我试过你说的,但还是不起作用。我这样做的原因是因为我在恢复tensorflow计算图中节点的值时遇到了麻烦。你能看一下这个截图吗?我试图恢复“c_logits”节点,实际上我可以通过名称(“prsr/condition/conv/c_logits:0”),然后sess.run(node)
,但值与它应该的值不同。天哪,我很抱歉,我知道发生了什么。我将输入馈送到错误的节点!现在它的完美工作!非常感谢。