2017-12-11 9 views
3

私はTensorflow初心者です。私はTensorflowの使い方を学びたいと思っています。私はのはpatch_sizeは、上記の場合にはトレーニングのために50であるとしましょうTensorflow:異なる電車入力サイズとテスト入力サイズを使用できますか?

inputs = tf.placeholder(tf.float32, [None, patch_size, patch_size, num_channels], name="inputs") 
labels = tf.placeholder(tf.float32, [None, patch_size, patch_size, num_channels], name="labels") 
network = build_network(inputs, ...) 
optimizer = get_optimizer(labels, ...) 
session.run(optimizer, {inputs: input_batch, labels: label_batch}) 
save.save(session, path) 

すなわち

、我々はネットワークモデルを構築し、訓練するネットワークの入力とラベルのペアを作成することができることを理解しています。

テストを実行しようとすると、上記のコードの一部を再利用してネットワークモデルを構築し、テストを実行することができます。たとえば、パッチサイズを180に設定したとします。ネットワークモデルを構築するために、チェックポイントを復元して別のpatch_sizeを指定すると、Tensorflowはそれをどのように扱いましたか?

patch_size=180 
inputs = tf.placeholder(tf.float32, [None, patch_size, patch_size, num_channels], name="inputs") 
labels = tf.placeholder(tf.float32, [None, patch_size, patch_size, num_channels], name="labels") 
network = build_network(inputs, ...) 
saver.restore(session, path) 
prediction = session.run(network, {inputs:, input_batch}) 

私の知る限りは、異なる列入力サイズ(バッチサイズ50)とテスト入力サイズ(バッチサイズ180)を受け入れることができるTensorflowを言うことができるように。

  1. 列車とテストの入力サイズが異なる場合、Tensorflowはこれを内部的にどのようにして出力を予測しますか?

  2. 異なる入力サイズを使用することはできますか?

  3. 異なる入力サイズを使用することには利点や欠点がありますか?

答えて

3
  1. TensorFlowは、静的にすべてのサイズを知る必要はありません。静的にサイズがわかっている場合は、さまざまな内部最適化とチェックに役立ちますが、一般的にはそれが必須ではありません。 Tensorflowはサイズを「予測」しません。特定の入力があると(session.run())、操作が実行されます。オペレーションのカーネルは、静的に認識されるためにいくつかのサイズを必要とすることがありますが、実行時にしか利用可能ないくつかのサイズでも動作できます。

  2. 通常、はいです。あなたが何かエラーを見ないなら、あなたは良いものでなければなりません。このルールにはいくつかの例外がありますが、TensorFlowは明示的なエラーを表示しませんが、期待したものとは異なる可能性があります。たとえば、static_rnnを使用していて、長さの異なる入力をフィードした場合、すべてのRNNステップが実行されます。これは文書化されており、sequence_lengthを渡すことができるdynamic_rnnのバリアントがあります。

  3. 一般に、静的に知っていることが多いほど、パフォーマンスは向上しますが、これは大きく異なります。私は最初に最も便利なものをデフォルトにすることをお勧めします。はるかに速くなければならないと感じる場合は、グラフを均質化しようとして投資し、可能な限り多くのサイズを指定することができます。一般に、TensorFlowは形状推論ではかなり良い仕事をします。プレースホルダのサイズを指定する限り、残りは一般的に推測できます。中間テンソルの形状を照会することで、これをチェックすることができます。

関連する問題