質問: np.argmax(new_arr,axis=1) print('max_index=',max_index) ``` 例えば上記のようなプログラムで、softmax関数を20回程度適用するだけならば、結果としては、 max_index= [2 2 2 2 0 1 2] となります。 しかし、例として40回ほど適用すると、値が丸め込まれすぎているのか、 max_index= [0 0 0 0 0 0 0] と表示されてしまいます。 なぜ、活性化関数を複数回適用するかについてですが、ニューラルネットワーク(CNNなど)の各層で得られた活性値を次の層への受け渡しとできないか考えているためです。 値の大小関係を継承しながら、活性化関数を適用するにはどのような案があるでしょうか? ご回答よろしくお願いいたします。
回答: > > 実は、簡易なニューラルネットワーク(別プログラム)を実験していまして、各層で活性化関数を適用し、次の層への入力としてそれらの値を利用する方法を考えていました。 > > > softmax を出力層以外で使うことはまずないので、連続して softmax を適用するという状況がおかしいと思います。 > > 例として40回ほど適用すると、値が丸め込まれすぎているのか、 > > > ループの中に `print(new_arr)` を入れて確認するとわかると思いますが、ソフトマックス関数を複数回適用したら、全部の値が 1 / n に収束します。 あるタイミングで全部同じ値になるので、argmax() をとると、全部0になります。(argmax() は最大値が複数ある場合は最初に見つかったインデックスを返すので)