2017-04-05 8 views
1


を適用:私ははtf.contrib.layers.convolution2d_transposeでモデルを復元することはできません、私は次のコードを使用してモデル復元しようとしている

new_saver = tf.train.import_meta_graph(model_path+'.meta') 
new_saver.restore(sess, model_path) 
g=tf.get_default_graph() 

、元のグラフの各重みやバイアスのために、 g.get_tensrr_by_name()。 しかし、私は以下のようなものである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. 

を私はこれが参照しているshape分かりません私はweights_initializerbiases_initializerが定数であるとは思わない、彼らはテンソル、右ですか?ちなみに、prsr/conditioning/deconv/Conv2d_transpose/weightsprsr/conditioning/deconv/Conv2d_transpose/biasessという2つのテンソルは、print_tensors_in_checkpoint_fileを使用してチェックしているので、元のグラフには存在していますが、実際にその値を見ることができます。
このtf.contrib.layers.convolution2d_transpose()レイヤーを適用するモデルを復元するにはどうすればよいですか?私はstackoverflowとgithubの両方で多くを検索しましたが、何も機能しませんでした。どんな助けもありがとう。

答えて

0

weights_initializerおよびbias_initializerはあなたの意見ではありません。デコンボリューションに使われる重みの初期値として、おそらく2つのテンソルを考えるでしょうか?あなたの解決策として、だから、

tf.contrib.layers.convolution2d_transpose(inputs=inputs, ..., weights_initializer=my_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 

:しかし、初期化引数が機能ない、このようになるはずですテンソルであります問題は、私は次のように動作するはずだと思います:

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 

これは私の考えでは少しハッキリです。なぜグラフをロードして、新しい操作で事前にトレーニングされたウェイトを使用したいのですか?最初のモデルを設定する前に、これらのウェイトがこの操作に関連付けられていないのはなぜですか?

PS:変数を扱う場合、tf.get_variableが便利です。 tf.get_variableを使用して変数を作成した場合は、後でtf.get_variableを使用してこれらの変数を再度取得することができます。厄介なものをget_tensor_by_nameと呼ぶ必要はありません。詳細については、thisをご確認ください。

+0

ありがとうございます。私はあなたが言ったことを試みましたが、まだ働いていません。そして私がこれをした理由は、テンソルフローの計算グラフでノードの値を復元することに問題があったためです。このスクリーンショットをご覧ください。 [screenshot](https://www.dropbox.com/s/12n6wug39t39zoy/Screen%20Shot%202017-04-05%20at%206.09.10%20PM.png?dl=0)私はそれを復元しようとしていました。 "c_logits "node = g.get_tensor_by_name(" prsr/conditioning/conv/c_logits:0 ")'、 'sess.run(node)'のようになりますが、値は異なっています。 –

+0

聖なる、すみません、何が起こっているのか分かりました。私は誤ったノードに入力を供給していました!今は完全に機能しています!ありがとうございました! –

関連する問題