列車セット(is_training=True
)と検証セット(is_training=False
)の両方で特定のモデルを実行する場合は、具体的にどのようにdropout
が適用されているかを確認します。現在、prebuilt modelsは、ネットワークを構築するときにdropout
レイヤに渡されるパラメータis_training
を公開します。問題は、私がis_training
という異なる値でメソッドを2回呼び出すと、私は共有ウェイトを持たない2つの異なるネットワークを取得することです(私は思っていますか?)。 2つのネットワークが同じ重みを共有するようにして、検証セットで訓練したネットワークを実行できるようにするにはどうすればよいですか?is_trainingがtrueおよびfalseのTensorflow(tf-slim)モデル
答えて
私は列車とテストモードでOverfeatを使用するためにあなたのコメントを使って解決策を書いた。 (それが動作するかどうかをチェックすることができますので、私はそれをテストすることができませんでした?)
は、まず、いくつかの輸入やパラメータ:鉄道モードで
import tensorflow as tf
slim = tf.contrib.slim
overfeat = tf.contrib.slim.nets.overfeat
batch_size = 32
inputs = tf.placeholder(tf.float32, [batch_size, 231, 231, 3])
dropout_keep_prob = 0.5
num_classes = 1000
、我々は正常な範囲を渡します機能overfeat
:
scope = 'overfeat'
is_training = True
output = overfeat.overfeat(inputs, num_classes, is_training,
dropout_keep_prob, scope=scope)
テストモードでは、同じスコープを作成しますが、reuse=True
で作成します。
scope = tf.VariableScope(reuse=True, name='overfeat')
is_training = False
output = overfeat.overfeat(inputs, num_classes, is_training,
dropout_keep_prob, scope=scope)
あなただけis_trainingのためのプレースホルダを使用することができます:それは場合によって異なり
isTraining = tf.placeholder(tf.bool)
# create nn
net = ...
net = slim.dropout(net,
keep_prob=0.5,
is_training=isTraining)
net = ...
# training
sess.run([net], feed_dict={isTraining: True})
# testing
sess.run([net], feed_dict={isTraining: False})
私はこれを試して、変数が再利用されていないので問題に遭遇しました。私も説明できなかった記憶制限に遭遇しました。 –
が、解決策が異なっています。
私の最初の選択肢は、評価を行うために別のプロセスを使用することです。
checkpoint = tf.train.latest_checkpoint(self.checkpoints_path)
# wait until a new check point is available
while self.lastest_checkpoint == checkpoint:
time.sleep(30) # sleep 30 seconds waiting for a new checkpoint
checkpoint = tf.train.latest_checkpoint(self.checkpoints_path)
logging.info('Restoring model from {}'.format(checkpoint))
self.saver.restore(session, checkpoint)
self.lastest_checkpoint = checkpoint
二番目のオプションあなたはグラフをアンロードし、新しい評価グラフを作成し、すべてのエポックの後にある:あなただけの新しいチェックポイントがあることを確認し、(is_training=False
付き)評価ネットワークに重みがあることをロードする必要があります。このソリューションは、グラフのロードとアンロードに多くの時間を費やします。
3番目のオプションは、ウェイトを共有することです。しかし、これらのネットワークにキューやデータセットを渡すと問題が発生する可能性があるため、非常に注意する必要があります。私はシャムのネットワークにのみこれを使用します。
with tf.variable_scope('the_scope') as scope:
your_model(is_training=True)
scope.reuse_variables()
your_model(is_training=False)
- 1. batchnorm(TensorFlow)をFalseにis_trainingする
- 2. struts.serve.static = trueおよびstruts、serve.static.browserCache = false not working
- 3. Swaggerブール値のパラメータ値true/falseおよびdjango_filtersの代わりにTrue/False
- 4. Tensorflow、Flask、およびTFLearnメモリリーク
- 5. エラーデバッグ{:TRUE/FALSEが
- 6. なぜnull> 3 falseおよびnull <3ノードでtrueですか?
- 7. MLEのニュートンラフソンコード - TRUE/FALSEが必要なTRUE/FALSEが必要です。
- 8. IsCheckable = trueおよびIsChecked = trueの場合のMenuItemスタイルの変更
- 9. SipManager.isApiSupported()およびSipManager.isVoipSupported()falseを返す
- 10. XSDで空のXML要素:nil = "true"およびnillable = "true"?
- 11. tfsrecとtfslimのデコード
- 12. Fresco - setDownsampleEnabled true/false?
- 13. トグルクッキーtrue false magento
- 14. != false vs. == true
- 15. チェックボックスの値true/false
- 16. モデル内のMVC 3およびXmlプロパティーデータ
- 17. cudnnGRU is_trainingプレースホルダ
- 18. なぜTrue!= True!= TrueがFalseに評価される
- 19. モデルは次のバリデーションを渡します:presence => trueおよびデータベースにまだnilがありません
- 20. Spring WebFlow、検証およびモデル
- 21. MVCモデル、CodeIgniter、および認証
- 22. make html.checkboxfor enable true false
- 23. ツールバーsethidden = TRUE、sethidden = FALSE
- 24. Excel「true-false」チェックボックスに
- 25. 高度なカスタムフィールドはTrue/Falseのフィールドが
- 26. knitrチャンクオプションeval = TRUE、echo = TRUE、include = FALSE
- 27. jQueryの値trueとfalse
- 28. "!= true"と "== false"の違いは?
- 29. true-falseテーブルのmaterial-uiラジオボタン
- 30. MySQL WorkbenchのTrue/Falseデータ型
私は、デフォルトの動作では、2例の間の重みを共有することだと思うので、あなたは何の関係もありません。 'tf-slim'は、呼び出し間の変数を再利用する' tf.get_variable() 'を使います。 –
さて、これは主に動作すると思います。 'scope'がセットされていることを確認する必要があります。安全のために' reuse = True'を設定するのが最も良いようです。 –