深度学習ベース0330

9606 ワード

preview


概念論:input-weightに=>値を乗算し、オフセットを加えて、関数をアクティブにして出力する値を決定します.
  • input
  • 重みに
  • を乗じる入力値
  • 値プラス
  • アクティブ化関数
  • パーセプトロンが集まってニューラルネットワークになった.
    多次元を使うので、行列の積がわかります!
    例えば、2 x 3と2 x 2の対応行列が異なるため、計算できない

    How to define the node count?


    入力レイヤのノード数は、処理するデータ数に等しい.
    出力レイヤのノード数は設計できます.
    ニューラルネットワークをどこに使用するかは、最終的な結果に基づいて

    せっけいしゅつりょくそう


  • ぶんかつ
    データがどのクラスに属するかを決定
    写真の人物の性別を確認する

  • 回帰
    入力データから連続する数値を予測する
    写真の中の人物の体重を予測する
    (ex.豚の個体体重予測)

  • 一定の関数(Identify Function)
    入力値が出力に等しい=>入力-出力が等しい

  • 軟脈
    いくつかの値がある場合、比重を計算すると、0.5,0.6...等価値が総価値に占める割合はいくらですか?=>比例換算
  • 平均とは違う
    ひれい
    総数に占める割合はいくらですか.

    ソフトMax関数の実装

    import numpy as np
    
    a = np.array([0.3, 2.9, 4.0])
    exp_a = np.exp(a) # 지수 함수
    print(exp_a) # [ 1.34985881 18.17414537 54.59815003]
    
    sum_exp_a = np.sum(exp_a) # 지수 함수의 합
    print(sum_exp_a) # 74.1221542101633
    
    y = exp_a / sum_exp_a
    print(y) # [0.01821127 0.24519181 0.73659691]
    分類するとき、
    最大出力値4.0
    前の入力では4.0に分割される可能性が高い.
    マトリクスの計算を混同しないでください.

    ソフトMax関数を実装する際の注意点

  • 指数関数を使用して生成されたオーバーフロー
    オーバーフローとは何ですか?
    コンピュータで表現できる数字の範囲を超えている
    指数を使用する場合、数値を表す範囲を超えると、出力の結果が異なります.
  • E^10=>20000
    E^100=>0は40個の非常に大きな値です
    E^1000=>無限大値
  • ソフトmac関数の改良
    shiftは表示範囲に適用します.
  • a = np.array([1010, 1000, 990])
    # print(np.exp(a) / np.sum(np.exp(a))) #소프트맥스 함수의 계산
    # RuntimeWarning: overflow encountered in exp
    
    c = np.max(a) # c = 1010(최댓값)
    print(a - c) # [  0 -10 -20]
    
    print(np.exp(a - c)/ np.sum(np.exp(a - c))) # [9.99954600e-01 4.53978686e-05 2.06106005e-09]

    ソフトMax関数の特徴


    関数の出力は0~1.0の実数です.
    関数出力の合計は1=>ソフトMax関数の重要な性質である
    ソフトMax関数を利用して,確率(統計)方式で問題に応答する
    サイズ順の差異なし=>単調増分関数
    たんちょうぞうぶんかんすう
    「関数が単調なのはどういう意味ですか?」「先生の声は単調だ」というのは眠気の音です.いくつかの特徴が一定のタイミングを保つと,単調であると考えられる.単調関数はこれと同じで、関数の増減が変わらない関数です.以下、関数f:DrightarrowCf:D→Cは単調増分関数(単調増分関数)の数学的定義である[1].
    https://hashmm.com/post/monotonic-functions/
    最大の値しか必要としない場合は、見た値から計算できるので省略できます.

    出力レイヤのニューロンを修正するには


    分類するデータに基づきます.
    犬/猫に分類しようとすると、どの値を入力しても犬/猫の2種類に分類されます.
    山に火事があるかどうかを確認するには?火がつくとOが燃えないとX
    分類するクラスの数を決定

    手書きデジタル認識実習


    出力レイヤ:10(0~9)

  • 勉強する
    収集されたデータセットを使用して識別フィーチャーを検索
    学習の過程は入力したデータで重みとオフセットを求める過程である.
    入力したデータが多ければ多いほど、学習能力が強くなります.
    複雑な原理と過程を必要とする

  • 推論する
    マトリックス演算
    学習のニューラルネットワークに新しいデータ(学習、テスト、評価)を入力して分類し、識別します.
    純粋な伝播の使用

  • 実習
    MNISTデータセットを使用して手書き数字を識別
    学習プロセスをスキップ(学習モデルを使用)
    推論過程のみを実施し、実践する.
  • MNISTデータセット



    28 X 28サイズ(784)、各画素1 BYTE=>784 BYTE
    合計784個を入力すると、実際の意味での数字にラベルが貼られます.

  • 実習要件
    1) ./
    実行するPythonコードを含むディレクトリ
    2) mnist.py
    ./dataset/mnist.pyとして保存
    3) functions.py
    ./common/functions.pyとして保存
    4) sample_weight.pkl
    ニューラルネットワークモデルを含むファイル
    ./(現在のディレクトリ)に保存

  • MNISTデータセットを読み込み、ジオメトリを確認する

  • 画像=>numpy
  • import sys, os
    sys.path.append(os.pardir) # 부모 디렉토리의 경로
    import numpy as np
    
    from dataset.mnist import load_mnist
    from PIL import Image
    def img_show(img):
        pil_img = Image.fromarray(np.uint8(img))
        pil_img.show()
    
    (x_train, t_train), (x_test, t_test) = load_mnist(flatten=True, normalize=False)
    
    img = x_train[0]
    label = t_train[0]
    print(label) # 5
    
    print(img.shape)
    img = img.reshape(28, 28)
    print(img.shape)
    
    img_show(img)
  • numpy=>ニューラルネットワークモデル=>入力=>テスト精度評価