2017-02-20 8 views
1

テンソルの可変サイズを特定のパッド値を持つ所定の形状にパッドする方法はありますか?たとえばテンソルを与えられた:TensorFlow - 不明なサイズのテンソルを特定のサイズにパッドしますか?

[[1, 2], 
[3, 4]] 

[[1, 2, 3], 
[4, 5, 6]] 

は(値-1[2, 4]を形に言う、)値とそれらをどちらか取るとパッドしまう一般的な操作を持ってする方法はあります

[[1, 2, -1, -1], 
[3, 4, -1, -1]] 

:に結果に

?私の推論(良い解決策がある場合)は、TFRecordsファイルの例があり、その一部は可変長です。処理のために、静的な長さが扱いやすくなります。

答えて

-1

TensorFlowでこれを行う方法はありません。データを前処理し、-1のセットを追加して希望の長さにする必要があります。例えば、長さとループの長さは、list[0].append(-1)list[1].append(-1)で、リストの長さになります。お役に立てれば!

0

私は似たようなものに遭遇しました。完全には一般的ではありませんが、次のようなことができます:

test_a = tf.constant([[1, 2], [3, 4]]) 
test_b = tf.constant([[1, 2, 3], [4, 5, 6]]) 

def pad_second_dim(input, desired_size): 
    padding = tf.tile([[0]], tf.stack([tf.shape(input)[0], desired_size - tf.shape(input)[1]], 0)) 
    return tf.concat([input, padding], 1) 

with tf.Session() as sess: 
    print sess.run(pad_second_dim(test_a, 4)) 
    # [[1 2 0 0] [3 4 0 0]] 
    print sess.run(pad_second_dim(test_b, 4)) 
    # [[1 2 3 0] [4 5 6 0]] 
1

はい。がある。テンソルの階数を変更する必要がなければ、それは非常に簡単です。

tf.pad()はテンソル付きの規則的なpythonリストを受け入れます。埋め込みの形式は、その次元の各辺にどのくらいの余白をかけるかのペアのリストです。

あなたは便利な機能に、これを一般化したい場合は

t = tf.constant([[1, 2], [3, 4]]) 
paddings = [[0, 0], [0, 4-tf.shape(t)[0]]] 
out = tf.pad(t, paddings, 'CONSTANT', constant_values=-1) 
sess.run(out) 
# gives: 
# array([[ 1, 2, -1, -1], 
#  [ 3, 4, -1, -1]], dtype=int32) 

、あなたのような何かができる:max_in_dimsは、本質的に、出力の所望の形状である

def pad_up_to(t, max_in_dims, constant_values): 
    s = tf.shape(t) 
    paddings = [[0, m-s[i]] for (i,m) in enumerate(max_in_dims)] 
    return tf.pad(t, paddings, 'CONSTANT', constant_values=constant_values) 

注:任意の次元でtより厳密に小さい形状を指定すると、この関数は失敗します。

あなたはそれが好きで使用することができます:

t = tf.constant([[1, 2], [3, 4]]) # shape = [2, 2] 
t_padded = pad_up_to(t, [2, 4], -1) # shape = [2, 4], padded with -1s 
関連する問題