2017-07-02 3 views
0

転送学習タスクのためにネットワーク経由で画像を渡したいと思っています。次のコードでは、グラフを作成してから、完全に接続されたレイヤの出力を取得しています。 20k画像以上の配列を持っているので、出力をバッチで取得したいと思っていました。TensorFlow-Slim VGG Pre-Trained Netを通して画像を渡すにはどうすればいいですか?

vgg.vgg_16(images)は、画像の配列である必要があります。images私は入力プレースホルダ(docsを見て)にフィードを試みましたが、チェックポイントをロードするときにエラーThere are no variables to saveがありました。

私は一度にいくつかの画像を供給することができますが、各バッチに対してチェックポイントをロードする必要があります。私はそれを行うためのより良い方法があると確信しています。私が見ることができる例や参考文献はありますか?

from tensorflow.contrib import slim 
from tensorflow.contrib.slim.nets import vgg 

images = np.array(read_images(val_filenames[:4], 224, 224), dtype=np.float32) # load images and resize to 224 x 224 


vgg_graph = tf.Graph() 

with vgg_graph.as_default(): 
    with slim.arg_scope(vgg.vgg_arg_scope()): 
     outputs, end_points = vgg.vgg_16(images, is_training=False) 

    fc6 = end_points['vgg_16/fc6'] 


with tf.Session(graph=vgg_graph) as sess: 
    saver = tf.train.Saver() 
    saver.restore(sess, 'checkpoints/vgg_16.ckpt') 

    # pass images through the network 
    fc6_output = sess.run(fc6) 

私もthisthis参照を試みたが、私は答えを見つけることができませんでした。

答えて

1

vggネットワークに渡すことができるplaceholderを作成することができます。ネットワークへの入力を渡し、

images = tf.placeholder(tf.float32, shape=[batch_size, height, width, channels]) 

with slim.arg_scope(vgg.vgg_arg_scope()): 
    outputs, end_points = vgg.vgg_16(images, is_training=False) 

とトレーニング中:あなたのコードが変更に

fc6_output = sess.run(fc6, feed_dict={images:batch_images}) 
+0

私は 'とValueErrorを取得していない:セーバーオブジェクトを作成するときにsave'にノーと変数を。画像自体の代わりにプレースホルダを入力するときにグラフを構築できないように見えます。私はtensorflow v1.2.0を実行しています。 –

+1

ここでファイルを確認してください:https://drive.google.com/open?id=0BwoPpNIm4bJqcUR5MTIxV1pKa28 –

+0

この例をありがとうございます。私は、グラフスコープの外に 'image'プレースホルダを作成していることに気付きました。だから、Saverは何の変数も見つけられませんでした。それを動かすと問題は解決した。 –

関連する問題