2016-10-26 6 views
0

Tensorflowでは、要素の場所がランダムに選択される単一の要素を除き、すべて1のマスクを作成したいと考えています。具体的には、私はのランダムマスクを作成したいのいずれか[0,1,1,1]または[1,1,0,1]Tensorflow:ランダム要素をゼロにする方法は?

私が試した:

import tensorflow as tf 
import numpy as np 

# randomly draw the column to select (either column 0 or 2) 
COLselect = tf.to_int64(tf.greater(tf.random_uniform((1,)), 0.5)) 
column_num = COLselect*2 

ones_mask = tf.Variable(numpy.ones((4,))) 

そして私が立ち往生していますones_maskのcolumn_num列をNULLにする新しいマスクを作成する方法。

Manipulating matrix elements in tensorflowに従ってみましたが、列がテンソルであるために失敗しました。

おかげTensorflow r0.10で

答えて

1

もう1つのオプションは、on_valueoff_valueというカスタムでtf.one_hotを使用し、インデックスとしてランダムな整数を使用することです。 tf.reshapeを使用して、正しい形の出力を得ることができます。

0

import tensorflow as tf 
import numpy as np 

# randomly draw the column to select (either column 0 or 2) 
COLselect = tf.to_int64(tf.greater(tf.random_uniform((1,)), 0.5)) 
column_num = COLselect*2 

ones_mask = tf.Variable(np.ones((4,))) 
mask_op = tf.scatter_update(ones_mask,column_num,[0]) 

sess = tf.Session() 
sess.run(tf.initialize_all_variables()) 
sess.run(mask_op) 

私を与える:

配列([0、1、1、1])

または

アレイ([1、1、0、1])

唯一の問題はtf.scatter_update変数を修正することです。それは普通のことだが、あなたはmask_op二度目の呼び出したいとき、あなたが取得する必要があります。

配列([0、1、0、1])

だから、それぞれの前にones_maskを初期化しますmask_op呼び出し。

関連する問題