複数枚の画像を入力して、何か推論させたいとしましょう。方法はあるのですが、LSTMを使ってエンコードしたり、画像をつなげたりして入力する場合は、画像を入れる順番が推論に影響を与えることにならないように、色々と並び替えをする必要があります。色々な方法についてはこちらできればネットワークの構造の中に、画像を入れる順番に対して動作が不変となるようなアーキテクチャを取り入れたいはずです。今回取り上げるDLはそんなアーキテクチャを取り入れたネットワークになります。Setsつ「論文」とても難しいですが、この論文をサーベイしてまとめてくれている資料がありました。1]上の任意の連続関数$f(x)$は、$x$の多項式で表せるとかいうWeierstrassの多項式近似定理が本論文の理論を支えています。...難しいことはわからないのでとりあえず盲目的に信じてみます。テイラー展開みたいですね。...$と複数個あるということになります。この$x$を入れる順番に対して不変性を持たせる場合には、多項式に対称性を導入すればよいということになります。...$に関して、$e_i$を以下のように定義します。下の例では3つまで書いてますが、集合の数によって書けることのできる式に制限があったり、またはどこかで打ち切ったりすることもあります。\\\end{array}この$e_i$はそれぞれ、$x_i$の並びに対して値が変わることがありません。したがって、順番に対する不変性が保証されます。最後に$e_i$を以下のようにしてまとめます。e_m$c_m$はそれぞれの$e_m$に対する重みです。ハイパーパラメータとして設定しても良いですし、学習で調節するパラメータとして扱っても良いと思います。ここら辺については論文をちゃんと読んでいないので、何とも言えないです。実装MNISTで実装し、評価します。タスク複数の画像を受け取り、そこに書かれた数字の和を推定する。実装を簡単化するため、入力として受け取る集合の最大要素数は3とする。処理の流れ複数の画像を畳み込み層に入力し、特徴ベクトルを得る。各画像に対して、畳み込み層の重みは共有される。得られた複数の特徴ベクトルに対して前の節で述べたように対称性をもつ多項式の計算を行い、1つの特徴ベクトルに統合する全結合層に入力し、推定値を得るネットワークの外観いたってシンプルな構造です。Sets)は以下のようになります。今回は集合の要素数は3つなので、Inputが3つあります。要素数が2のときは、余った1つにはゼロを入力すればよいです。inlineplt.gray()MNISTのデータを読み込んで、0から1までの値に正規化します。255.画像から特徴ベクトルを抽出するレイヤーです。タスクが難しい場合はVGGとかResNetとかで置き換えることもできます。_output)対称性をもつ多項式を記述します。集合の要素数を3つと決めているので、以下のような実装にしています。今回は$c_m$はすべて1としました。_e_2モデルのインスタンスを生成し、損失関数を定義します。推定値と正解値の絶対誤差をとるmean_absolute_errorがおすすめです。loss='mean_absolute_error')model.summary()データセットを作成する処理です。new_y実際に作成します。n_new_dataでデータの数を指定できます。n_new_data=1000)すべての準備が整ったので、実際に学習させます。私の環境では50epoch目くらいで訓練誤差が1.0を下回っていました。verbose=1)学習が終われば、以下の関数で推論させます。model.predict(new_X_test)以下のコードで結果を可視化します。new_y_test[index])さいごに数学わからん。仲間外れ検出とかもできるそうです。その場合、順番に対して不変な部分と、順番をちゃんと保持する部分が必要になりますね。私はここで筆を置きます。upLoginユーザーは見つかりませんでした。