2017-03-07 2 views
2

Keras/TensorFlowを使用して画像(またはndimベクトル)を処理したいとします。 そして、正真正銘の正則化のために、各入力をランダムな数の位置で左に移動させたい(右に現れた部分が再び現れる)。Tensorflowのベクトルシフト(ロール)

それが閲覧して解決できる方法

1)

TensorFlowためのnumpyのロール機能に何らかの変化がありますか?

2)

x - 2D tensor 
ri - random integer 
concatenate(x[:,ri:],x[:,0:ri], axis=1) #executed for each single input to the layer, ri being random again and again (I can live with random only for each batch) 

答えて

5

私はこの自分自身をしなければならなかった、と私はnp.roll残念ながら行うtensorflow opがないと思います。上記のコードは、基本的には正しく見えますが、riでなく、(x.shape [1] - ri)で表示されます。

また、範囲が(0、x.shape [1])ではな​​く範囲(1、x.shape [1] +1)からランダムな整数を選択する際に注意する必要があります。 0の場合、x [:、0:ri]は空になります。

だから私はより多くの(次元1に沿って転がるための)ようなものになるだろうことをお勧めするもの:

x_len = x.get_shape().as_list()[1] 
i = np.random.randint(0,x_len) # The amount you want to roll by 
y = tf.concat([x[:,x_len-i:], x[:,:x_len-i]], axis=1) 

EDIT:ハンネス正しいコメントの後に行方不明にコロンを追加しました。

+0

私の間違いを訂正してくれてありがとう! – Khaj

+2

最後の行に ':'がありません。 'y = tf.concat([x [:、x_len-i:]、x [:、:x_len-i]]、axis = 1)' – hannes

1

テンソルフロー(または今後のバージョン1.6.0)の現在の夜間ビルドについて。 numfロールのように動作するtf.manip.rollを使うことができます。 https://github.com/tensorflow/tensorflow/pull/14953。 上記の回答を改善するには、次のようにしてください:

# size of x dimension 
x_len = tensor.get_shape().as_list()[1] 
# random roll amount 
i = tf.random_uniform(shape=[1], maxval=x_len, dtype=tf.int32) 
output = tf.manip.roll(tensor, shift=i, axis=[1]) 
+0

Whileこのリンクは質問に答えるかもしれませんが、答えの本質的な部分をここに含めて参照用のリンクを提供する方が良いでしょう。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューから](/レビュー/低品質の投稿/ 18734544) –