2017-02-07 9 views
2

私はprotobufから来たJSONを修正することでTensorFlowをプログラムできることを学びました。 hereTensorFlowの形状とタイプの推論

このJSONを変更すると、さまざまな入力と出力の適切な形を伝播するために手動でJSONを編集する必要がある場合があります。 TFが自動的にこれを行うようにする方法がありますので、プレースホルダを介して入力を指定してから、形状とタイプが自動的に伝播されます。

答えて

3

変更の種類がわかっている場合は、そのシェイプ情報をプレースホルダから削除するだけで済みます。不確かさは自動的に伝播します。例えば:

import tensorflow as tf 
placeholder = tf.placeholder(dtype=tf.float32, shape=[None]) 
derived = (placeholder/3)[1:, None] 
print(placeholder.get_shape(), derived.get_shape()) 

プリント:

(TensorShape([Dimension(None)]), TensorShape([Dimension(None), Dimension(1)])) 

だからplaceholderの長さのために保存しない静的形状情報が存在しないであろう。あなたは不明ランクのTensorsを持つことさえできます。

スタティックシェイプの再計算は魅力的ですが、グラフの構築は静的シェイプ情報に依存する可能性があるため、これは現在サポートされていません。たとえば:

placeholder = tf.placeholder(dtype=tf.float32, shape=[2]) 
if placeholder.get_shape()[0].value % 2 == 0: 
    derived = placeholder 
else: 
    derived = tf.concat(0, [placeholder, [0]]) 

は、これは推奨グラフ構築手法(より良いcondtf.shapeを使用するように)ではありませんが、それが起こるん。この種の静的形状条件付きグラフ構造は、残念ながらメタグラフには捕捉されない。

+0

入力に基づいて 'sess.run(out、feed_dict = {...}) 'を呼び出すと、形状が伝播していますか?もしそうなら、これは私にとって完璧です。同じように伝播できますか?問題は、多くのコードを書くことなく自分のフィールドが手前になる形状やタイプを確かめることができないことです。 –

+0

はい、グラフ実行時間( 'sess.run')でTensorの"真の "形が分かり、' tf.shape'(整数のTensorを返します)のグラフの一部として計算することができます。残念ながら、私はdtypeには何も似ていないことを知っています。 –

関連する問題