1

私は可変入力サイズ以上の畳み込みをしようとしています。それを達成するために、私はしかし、1のバッチサイズを使用しています、いずれかのノードがリストksizeとして入力の形状を必要とするノードをプール最高です。今TensorFlow整数を入力してください

pooled = tf.nn.max_pool(
       h, 
       ksize=[1, self.input_size - filter_size + 1, 1, 1], 
       strides=[1, 1, 1, 1], 
       padding='VALID', 
       name="pool") 

、はっきりinput_sizeが可能

self.input_x = tf.placeholder(tf.int32, [None, None], name="input_x") 

しかし形状が動的であるので、私はself.input_x.get_shape()[0]を使用することはできません。(プレースホルダ)入力から推測。だから私は各ステップでfeed_dictとして入力サイズを渡すつもりです。しかし、私はfeed_dictに整数を渡す方法を理解できません。すべてのプレースホルダはテンソルであるので、私がしなければ:

self.input_size = tf.placeholder(tf.int32, shape=(), name="input_size") 

私は私がinput_sizeを養うために必要なエラーが発生しますint型の値を、取得するためにself.input_size.eval()を行う必要があります。私はそれが起こると思います。なぜなら、訓練のステップが起こる前にevalが計算をトリガーしているからです。その時点でinput_sizeの値はありません。

入力の形状やトレーニングステップに整数を渡す方法を計算する演算子を動的に取得する方法はありますか?

答えて

0

は、私はそれが最善の方法だとわからないんだけど、あなたが動的リストでself.input_xの形状を得ることができます。

input_shape = tf.unpack(tf.shape(self.input_x)) 

tf.shape(self.input_x)あなたself.input_xの形状を表すテンソルを与え、f.unpackそれをTensorのリストに変換します。

今、あなたが持つノードをプールあなたの最高を作成することができます(あなたがinput_xの第二の寸法を必要に応じて)

pooled = tf.nn.max_pool(
       h, 
       ksize=tf.pack([1, input_size[1] - filter_size + 1, 1, 1]), 
       strides=[1, 1, 1, 1], 
       padding='VALID', 
       name="pool") 

+0

それはまだテンソルのリストを返します。私は第2次元の実際の値(整数)と実行時に必要です。だからこそ私はこれをパラメータとして「供給」することを考えていますが、私はTensorsにしか供給できないようです。 –

+0

"input_size = tf.placeholder(tf.int32)"で整数を入力できますか?それは私のために働くが、私はTF r0.8にいるし、私は最新バージョンで試していない。テンソルのリストの問題については、私は答えを修正しました。私は理由を理解できませんが、ksize配列をtf.packで処理する必要があります。 – Corentin

+0

これはTFの問題です。あなたが何をしていても、建設時にksizeが評価されるので、これは達成できません。 –

関連する問題