31970


Tensorflow初心者です。  
コードの書き方が全くわからなくて困っています。  
もし良ければ教えて頂きたいです。

質問なんですけれど、  
入力データは縦20横20の配列で、  
1行に入る要素は'1'が1個、残りは'0'です。  
それが20列あります。

答えは縦1横20の配列で、  
これも要素は'1'が1個、'0'が19個です。

【例】5*5の場合

[code]

    1　0　0　0　0
    0　1　0　0　0
    0　1　0　0　0　　→　　0　1　0　0　0
    0　0　1　0　0
    0　0　0　0　1
    　入力データ　　　　　　答えデータ
    
[/code]

  
入力データから、任意の'1'を選んで、  
答えと一致させるプログラムを作りたいです。  
例の場合だと、左から2番目を選んでほしいです。  
（2行目か3行目かは問わない）

TensorflowのチュートリアルのMNISTをそのまま  
入力データを上記のに替えて試しましたが  
学習の正答率があがりませんでした。  
私がやりたいのにはフィルターなどはいらないと  
分かったものの、どうコードを書いて良いのか  
全く分からない状態です。

教えてください、お願いします。


CC BY-SA 3.0
2017-01-19T06:08:31.293
31964
2017-01-20T14:01:36.817
2017-01-20T14:01:36.817
3054
20294
question
python tensorflow
Tensor中からマッチする要素のindexの返し方について


tf.argmax()を使うことでそのtensorlの最大値が入っているindexを得ることができます。(例の答えの場合1が得られます)

tf.equal()を使うことで要素が一致するindexにTrueが入ったtensorを得ることが出来ます。

tf.where()にてTrueとなるindexの位置を得ることが出来ます。

例の場合入力データをx  
答えデータをy  
とすると  
tf.equal(tf.argmax(x,1),tf.argmax(y,0))  
とすることで  
array([False, True, True, False, False]  
というtensorが得ることが出来。

tf.where(tf.equal(tf.argmax(x,1),tf.argmax(y,0)))  
とすることで  
array([1],[2])  
が得ることが出来ます。

* * *

追記：  
質問者様の「配列」を勝手にtensorであると思って回答しましたが、  
np.array等で生成された普通の配列のことを指していましたでしょうか。  
であればそれぞれ  
np.where  
np.equal  
np.argmax  
に置き換えることで同様の処理が可能です。


CC BY-SA 3.0
2017-01-19T06:51:37.637
31970
2017-01-19T07:36:46.243
2017-01-19T07:36:46.243
19716
19716
31964
answer