1. ホーム
  2. ディープラーニング

ディープラーニングにおけるconcatenateの使用について

2022-02-24 04:34:10
<パス

1. numpyで連結を使用する。

1.1 numpy.concatenate 関数の定義。

numpy.concatenate((a1, a2, ...) , axis=0, out=None)


パラメータです。

a1, a2, ... ...。
  • sequence of array_like 軸に相当する次元(デフォルトでは1番目)を除き、配列は同じ形状でなければならない。
軸になります。
  • int, オプション , 配列が結合される軸。
を表示します。
  • ndarray, オプション 与えられた場合、結果を配置する目的地。その形状は、out引数が指定されなかった場合にconcatenateが返すであろうものと一致する、正しいものでなければならない。

1.2 例

1.2.1 行単位でマージする

a = np.array([[1, 2], [3, 4]]) 
b = np.array([[5, 6]])
np.concatenate((a, b), axis=0) # where axis=0 means merge by row


出力

array([[1, 2],
       [3, 4],
       [5, 6]])

a = np.array([[1, 2], [3, 4]]) 
b = np.array([[5, 6]])
np.concatenate((a, b.T), axis=1) # where axis=1 means merge by column


1.2.2 カラムによるマージ

array([[1, 2, 5],
       [3, 4, 6]])


出力します。

array([[1, 2, 5],
       [3, 4, 6]])


2. ディープラーニングにおけるconcatenate関数の利用

<ブロッククオート

深層学習では、ネットワークレベルでの接続が必要な箇所も出てきますので、私たちの研究の文脈で、そのような接続を使用した例を2つ紹介します。
###2.1 U-netネットワークでconcatenateを使用する場合

u-netの動作の詳細については、ドキュメントを参照してください。 [2] U-netのネットワークは、入力が画像、出力が画像という符号化-復号化ネットワーク構造に基づいており、エンドツーエンドネットワークと等価である。 [3] のネットワーク構造です。従来のネットワークは、確かにネットワークパラメータを減らすという機能は実現できますが、再構成効果があまり良くない場合があります。そこで、符号化の際に同じ大きさの特徴マップを、復号化の際に我々の復号ネットワークの特徴マップに接続し、符号ネットワークの構造情報を十分に活用して、より良いデミックス効果、つまり再構成効果を実現するようにしているのです。これにより、符号化ネットワークの構造情報を十分に活用し、より良いデミキシング、すなわち再構成効果を実現します。

2.2 DenseNetネットワークでの利用

<ブロッククオート

近年のディープラーニングモデルの中で、CNN [4] レスネット [7,8] , GoogLeNet [6] , VGG [5] しかし、ディープCNNには、何層もの伝搬を繰り返すとデータが消えてしまうという問題が常につきまとう。しかし、深いCNNは常に、何層もの伝播の後にデータが消えやすいという問題を抱えている。resnetは"スキップ接続"の構造によって層間のデータの流れをある程度容易にするが、それでも出力に近いネットワーク層はネットワークの前の特徴を完全に捉えることはできない。グラフの様子 もう一点、レスネットの研究において、WRNの登場後 [9] のネットワークは、レスネットのネットワークの冗長性の可能性を示し、広く浅いネットワークが提案され、その効果はWRNもうまく機能することを証明しています。

CVPR 2017ベストペーパーにて 密に接続された畳み込みネットワーク を提案し、その中で、著者らは新しいDenseNets [10] ネットワークでは、Resnetsで発生する冗長性の問題を解決することが出発点となっています。DensenetとResNestの数学的表現上の違いは、Resnetsにおけるスキップ層の追加を連結接続操作に変えたことである。以下はDenseNetsのネットワーク構成図である。

ご覧のように、スキップレイヤーをコンカチネートレイヤーにすることで、バックレイヤーとネットワーク全体の前の全レイヤーとの間に接続が確立され、ネットワークレイヤーの数が減り、ネットワークの学習が容易になります。しかし、DenseNetsを実装するために様々なフレームワークを使用する場合、多くのメモリを消費する可能性があり、著者らはこの問題の解決策を提案している [11] これはDenseNest自体の問題ではなく、tensorflowやpytorchなどの現在のフレームワークがconcatenate操作をうまくサポートしていないためだと説明しています。

参考記事

  1. python公式サイト
  2. U-Net。バイオメディカル画像セグメンテーションのための畳み込みネットワーク
  3. エンドツーエンドニューラルネットワークとは?
  4. ディープ畳み込みニューラルネットワークによるImageNetの分類
  5. 大規模な画像認識のための非常に深い畳み込みネットワーク
  6. コンボリューションの深化
  7. 画像認識のためのディープ・レジデュアル・ラーニング
  8. ディープ・レジデュアル・ネットワークにおけるアイデンティティ・マッピング
  9. ワイドな残差ネットワーク
  10. 高密度接続畳み込みネットワーク
  11. DenseNetsのメモリ効率的な実装