ごうせいニューラルネットワーク


  • 合成乗ニューラルネットワークと深層ニューラルネットワークの違い
  • 合成乗ニューラルネットワークは部分的に接続されています
    したがって,高解像度の画像や音声などの高レベルのデータを入力しても,無限のニューロンに増やさずに学習を行うことができる.

    ごうせいニューラルネットワーク


    高レベルニューロンは隣接する低レベルニューロンの出力に基づいて構築されたニューラルネットワークモデルであり,各ニューロンは前層のいくつかのニューロンにのみ接続されている.このような構造は,視野領域全体に含まれるすべてのタイプの複雑なモードを検出することができる.

    1)合成ニューラルネットワークの構成


    最初の合成乗算ニューロンは、入力画像のすべての画素に接続されるのではなく、合成乗算ニューロンの受容場にのみ接続される画素である.次に、2番目の合成乗算層の各ニューロンは、1番目の層の小さな四角領域に位置するニューロンに接続される...
    この構造は、ネットワークを第1の隠蔽層で小さな低レベル特性に集中させ、第2の隠蔽層では、より大きな高レベル特性の階層に突出して組み合わせる.
  • filter
  • ニューロンの重み、フィルタがプロパティマッピング(フィーチャーマッピング)
  • を作成
  • このマップは、画像の中で最もフィルタをアクティブにできる領域を強調します.
  • の訓練では、合成乗層はこの問題に最も有用なフィルタを自動的に探し、上層はそれらを接続してより複雑なモードを学習する.
  • 各特性図におけるすべてのニューロンは、同じパラメータ
  • を共有する.
  • CNN:1つの場所でモードを識別することを学ぶと、任意の位置のモードを識別することができます.
    DN:1つのポイントのパターンを認識することを学習した場合、パターンがそのポイントにある場合にのみ検出されます.

  • 2)合成ニューラルネットワークの実現

  • 各データの次元
  • 入力画像:(高さ、幅、チャネル)
  • マイクロレイアウト:(マイクロレイアウトサイズ、高さ、幅、チャネル)
  • 重み付け:(高さ、幅、チャネル入力、チャネル出力)
  • *ここでは、チャネルはいくつかのフィルタ/いくつかのレイヤです.
    #저수준 딥러닝 API
    #각 채널의 픽셀 강도는 0에서 255 사이의 값을 가진 바이트 하나로 표현되어 0-1 로 스케일링 해줌
    image = load_sample_image("flower.jpg")/255
    output = tf.nn.conv2d(image, filters, strides, padding = "SAME")
    #첫번째 이미지의 두번째 특성맵을 그림
    plt.imshow(output[0, :, :, 1], cmap = 'gray')
    plt.show()

  • padding
  • SAME : zero padding
  • VALID : no padding
  • #신경망이 가장 잘 맞는 필터 학습
    conv = keras.layers.Conv2D(filters = 32, kernel_size = 3, strides = 1, 
    	padding = 'same', activation = 'relu')
  • 油層
  • 目的:パラメータ数を減らすサムネイルを作成し、リスクを低減
  • fulling neurnの入力値は、重み付けではなく
  • の最大/平均の合計です.
  • maxpooling:プールカーネルの最大値はニューロンに伝達され、残りの値は破棄されます.
  • 微細な変化の中で不変を保つ
    回転/スケーリング等に不変性を与える、予測時にこれらの小部分の影響を受けない
  • .
  • 欠点:破壊性が強く、情報の損失を招く可能性がある
    場合によっては、入力値(不変性ではなく)が変化すると、出力値が変化する必要がある場合があります.この状況は逆効果になるかもしれない.
  • は、空間次元
  • ではなく深さを実行することができる.
    #poolsize = kernel size
    max_pool = keras.layers.MaxPool2D(pool_size = 2) 
    
    #깊이 차원으로 풀링
    #커널 크기와 스트라이드의 첫번째 세값은 1, 마지막 값은 깊이 차원으로 지정
    #단, 입력 깊이를 나누었을 때 떨어지는 값이어야 한다
    output = tf.nn.max_pool(images, ksize= (1,1,1,3), strides = (1,1,1,3), padding ='valid')
    #or
    depth_pool = keras.layers.Lambda(lambda X: tf.nn.max_pool(X, ksize = (1,1,1,3), 
    	strides = (1,1,1,3), padding = 'valid')  
  • 合成ニューラルネットワーク全体構造
  • 第1層のフィルタサイズは
  • より大きくてもよい.
  • 出力層が増加するにつれて、フィルタ数も増加する.
    通常、フィルタ数は、充填層の後に2倍の
  • に増加する.
  • 完全接続ネットワークに向かう前に1 D配列が期待されるため,Flattentを用いて一列に展開する必要がある.
  • model = keras.model.Sequential([
    	keras.layers.Conv2D(64,7, activation = 'relu', padding = 'same', input_shape=[28,28,1]),
        	keras.layers.MaxPooling2D(2),
            keras.layers.Conv2D(128,3, activation ='relu', padding = 'same'),
            keras.layers.Conv2D(128,3, activation ='relu', padding = 'same'),
            keras.layers.MaxPooling2D(2),
            keras.layers.Conv2D(256,3, activation ='relu', padding = 'same'),
            keras.layers.Conv2D(256,3, activation ='relu', padding = 'same'),
            keras.layers.MaxPooling2D(2),
            keras.layers.Flatten(),
            keras.layers.Dense(128, activation = 'relu),
            keras.layers.Dropout(0.5)
            keras.layers.Dense(10, activation = 'softmax')])
    画像ソース:ハンソンマシン学習(第2版)