質問: Tensorflow初心者です。 コードの書き方が全くわからなくて困っています。 もし良ければ教えて頂きたいです。 質問なんですけれど、 入力データは縦20横20の配列で、 1行に入る要素は'1'が1個、残りは'0'です。 それが20列あります。 答えは縦1横20の配列で、 これも要素は'1'が1個、'0'が19個です。 【例】5*5の場合 ``` 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 入力データ 答えデータ ``` 入力データから、任意の'1'を選んで、 答えと一致させるプログラムを作りたいです。 例の場合だと、左から2番目を選んでほしいです。 (2行目か3行目かは問わない) TensorflowのチュートリアルのMNISTをそのまま 入力データを上記のに替えて試しましたが 学習の正答率があがりませんでした。 私がやりたいのにはフィルターなどはいらないと 分かったものの、どうコードを書いて良いのか 全く分からない状態です。 教えてください、お願いします。
回答: 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 に置き換えることで同様の処理が可能です。