私の質問は、事前に訓練されたVgg16モデルからロードされた定数テンソルをtf.Variable
テンソルに変換する方法はありますか?動機は、Conv4_3レイヤのカーネルに関して特定の損失の勾配を計算する必要があるということですが、カーネルはtf.Constant
タイプに設定されており、tf.Optimizer.compute_gradients
メソッドでは受け入れられませんでした。私が試してみました何Tensorflow:あらかじめ訓練されたVggモデルから変数に定数テンソルを変換する
F = vgg.graph.get_tensor_by_name('pretrained_vgg16/conv4_3/filter:0')
G = optimizer.compute_gradients(losses, var_list=[F])
# TypeError: Argument is not a tf.Variable: Tensor("pretrained_vgg16/conv4_3/filter:0", shape=(3, 3, 512, 512), dtype=float32)
は、元のカーネルに設定した初期値を持つ変数の型テンソルにカーネルを更新するためにtf.assign
メソッドを使用することですが、それはだから、どのようTypeError: Input 'ref' of 'Assign' Op requires l-value input
F = tf.assign(F, tf.Variable(F, trainable=False))
います私はそれを達成することはできますか?事前に多くの感謝!
アップデート:私はPretrained Vgg16 Tensorflow modelに応じpretrainedモデルをダウンロードして、私がして、モデルをロード:上記のすべてのコードがvgg
という名前のクラスで定義されている
with open('vgg16.tfmodel', mode='rb') as f:
fileContent = f.read()
graph_def = tf.GraphDef()
graph_def.ParseFromString(fileContent)
# Map input tensor
inputs = tf.placeholder("float", [1, 224, 224, 3], name='inputs')
tf.import_graph_def(graph_def, input_map={ "images": inputs }, name='pretrained_vgg16')
graph = tf.get_default_graph()
。
事前トレーニングされたモデルをロードする方法を教えてください。多分conv4_3のコードを投稿すると役に立つでしょう。 –
はい、もちろん、私は投稿を更新しました。しかし、私は実際にはconv4_3レイヤーを実装していませんでしたが、 'vgg16.tfmodel'ファイルが付属しています。 – Xer