純粋なPythonの(アンドリュー・ウDeepLearning.aiワーク)とのサイクルニューラルネットワークRNN前方伝播プロセスを実現するために、

GoogleのTensorFlowプログラマの親指の記事!

 

序文

内容:

    - ベクトル表現とその寸法

    - RNNセル

    - RNN前方伝播

 

焦点を当てます:

    - 、その寸法はどのようにデータをどのように定量化することです

    - 実際には二つのステップの合計:単一ユニットRNN計算は、プルを介してする計算RNNの

この記事を見て前に、あなたがこの記事のリコールを読むことができます:

アンドリュー・ウdeepLearning.aiリカレントニューラルネットワークRNNの研究ノート(理論セクション)

 

私たちは、この場合のTx = Tyの中で、構造以下のRNNを実現します。

 

ベクトル表現とその寸法

単位のNX番号を入力

  • 単一の入力サンプル、X(i)は、一次元入力ベクトルです。

  • 例えば言語、Xは(i)は次元(5000)であるように、ワンホットベクター5K単位で符号化して5K言語の語彙を有します。

  • 私たちは、シンボルNXを持つ単一の訓練サンプルの単位の数を示します。

サイズのバッチ  M

  • 我々は少量(ミニバッチ)を取る場合は、20サンプルの各バッチを訓練があります。

  • ベクトル化から利益を得るために、我々は20個のサンプルは、2次元アレイ(マトリックス)中に(I)×あろう。

  • そのような寸法は、(5000,20)ベクトルです。

  • 私たちは、訓練サンプルの数を表すためにメートルを使用します。

  • トレーニングデータの少量の寸法が(NX、m)となります。

サイズの時間ステップ  のTx

  • リカレントニューラルネットワークは、私たちが表現するためにトンを使用して、より多くの時間ステップがあります。

  • 私たちは、複数の時間を経験するトレーニングサンプルx(i)を参照されますTxは、手順、例えば、その後のTx = 10 10時間ステップは、存在する場合。

形状の三次元テンソル  (NX、M、テキサス州)

  • 寸法入力xが使用されている三次元テンソルを表すために(NX、M、テキサス州)です。

各時間ステップのための2Dスライスをとります。  

  • すべての時間ステップは、我々は学習データ(個々のない学習サンプル)の少量を使用します。

  • したがって、各時間ステップtのために、我々は、次元が2次元スライスの(NX、M)である使用します。

  • 私たちは、XTとしてそれを表します。

隠された次元

  • 定義:別の時にはステップ活性値へのステップからの時間、我々は隠され、それを呼び出します。

  • 個々のトレーニングサンプルのステータスを非表示にする入力を持つテンソルXは、それがベクトルNAの長さです。

  • 我々は、訓練サンプルのm個のデータの少量を含む場合には、寸法が少量(NA、M)です。

  • 我々はリストに追加のステップに時間がかかる場合は、隠された次元がある(NA、M、テキサス州)。

  • 各操作は、2次元ベクトルに三次元テンソルからスライスであるため、我々は、トラバース時間ステップtにインデックスを使用します。

  • 我々は、二次元スライスで表され、その寸法は(NA、M)です。

予測値y ^寸法

  • そしてy ^が寸法である、として入力xと隠された三次元テンソルの(NY、M、Tyの)です。

    • NY:予測値の代わりに単位数。

    • M:トレーニング小さいバッチのサンプル数。

    • TY:時間予測の数。

  • 例えば、単一の時間ステップt、寸法Yの二次元スライスは^(NY、M)です。

 

RNNセル

 

我々の最初のタスクは、以下のように計算され、計算の単一の時間ステップを実行することです。

入力^ <T-1>で、XTは、出力で、YT ^です。次のコードは、実際に、総ステップ4の手順を上記の式をコーディングされます。

  1. パラメータを削除します。

  2. で算出しました。

  3. ^ YTを計算します。

  4. 戻り出力で、YT ^、だけでなく、キャッシュされたいくつかの値を格納します。

 
NPとしてインポートnumpyの
DEF rnn_cell_forward(XT、a_prev、パラメータ):
    「」」
    実装し、図に記載されているようにRNN細胞の単一前進工程(2)
    引数:
    XT -タイムステップにおける入力データ『T』 、形状(n_x、M)のnumpyのアレイ。
    a_prev -タイムステップにおける隠れ状態"T-1"形状のnumpyのアレイ(N_A、m)の
    パラメータ- Pythonの辞書を含む:
                        ワックス-重み行列が入力を乗算し、numpyの形状のアレイ(N_A、n_x)WAA -隠された状態を乗算する重み行列、形状のnumpyのアレイ(N_A、N_A)
                        WYA -形状の出力に隠された状態に関連する重み行列、numpyのアレイ(n_y、N_A)
                        BA -バイアス、形状のnumpyのアレイ(N_A、1)
                        -バイアス出力に隠された状態に関連して、形状のnumpyのアレイ(n_y、1)
    戻り値:
    a_next -次隠れ状態、形状の(N_A、M)
    yt_pred - 「T」タイムステップにおける予測、numpyのアレイ形状(n_y、M)の
    キャッシュ-復路のために必要な値の組、(a_next、a_prev、XT、パラメータ)を含む
    "" " 取计算的参数
    ワックス=パラメーター[ "ワックス"] 
    WAA =パラメーター[" WAA "] 
    WYA =パラメーター[" WYA "] 
    "] BA =パラメーター[ "BA 
    =パラメータで[" "]によって
    #用公式计算下一个单元的激活值
    a_next = np.tanh(np.dot(WAA、 a_prev)+ np.dot(ワックス、XT)+ BA) 
    セルの出力電流を算出#
    =のSoftMaxは(np.dot(WYA、a_next)+によって)yt_pred 
    
    逆方向伝搬のため#キャッシュされた値
    キャッシュ=(a_next、a_prev、XT、パラメータ)
    リターンa_next、yt_pred、キャッシュ

 

RNN前方伝播

  • 上記で作成したRNNリカレントニューラルネットワークは、常に単位を繰り返しています。

    • あなたの入力したデータ系列は10時間ステップである場合は、あなたのRNNセルを10回繰り返す必要があります。

  • 各時間ステップにおいて、二つの入力を有する単位の各々:

    • <T-1>:隠されたユニット前の状態。

    • XT:現在の入力データの時間ステップ。

  • これは、2つの出力各時間ステップがあります。 

    • 隠された状態A T

    • 測定値^ Y ⟨t⟩

  • 重みおよびバイアス  (WAA、BA、ワックス、BX ) 各時間ステップにおける意志サイクルが、それらは、「パラメータ」変数に格納されています。

 

DEF rnn_forward(X、A0、パラメータ):
    「」」
    図に記載リカレントニューラルネットワーク(3)の前方伝播を実装する。
    引数:
    X -すべての時間ステップのための入力データ、形状(n_x、Mの、 T_x)。
    A0 -初期隠れ状態、形状の(N_A、m)の
    パラメータ-を含むPythonの辞書:
                        WAAを-隠された状態を乗算する重み行列、形状のnumpyのアレイ(N_A、N_A)
                        ワックス-重み行列を乗算します形状の入力、numpyのアレイ(N_A、n_x)
                        WYA -出力に隠された状態に関連する重み行列、形状のnumpyのアレイ(n_y、N_A) 
                        形状のバイアスnumpyのアレイ(N_A、1) - BA 
                        によって-出力に隠された状態に関連するバイアス、形状(n_y、1)のnumpyのアレイ
    戻り値:
    A -隠し-STEP国のために毎回、numpyのアレイ状の(N_A、M、T_xは)
    y_pred -毎回-STEPのための予測、アレイ状のnumpyの(n_y、M、T_x)
    キャッシュ-タプルを復路の値に必要なの(キャッシュ、Xのリスト)が含ま
    "「」
    #全てのキャッシュメモリのリストを、それが初期化
    キャッシュ= [] 
    いくつかの緯度、後でのための初期化変数撤回
    n_x、Mを、T_x = x.shape 
    n_y、N_A =パラメータ[ "WYA"]。シェイプ
    #初期化およびy_pred 
    np.zeros =((N_A、M、T_x))
    np.zeros =((n_y、M y_predをt_x)) 初期a_next 
    a_next = A0
    INPUT「X」の全ての時間ステップにわたって#ループ
    範囲でT用(T_x): 更新次に隠れ状態、計算予測は、GETキャッシュ
        XT = X [:、:、T]からのスライス方法により#除去された入力変数は、現在の時間ステップTのXT入力xは
        a_next、yt_pred、キャッシュrnn_cell_forward =(XT、a_next、パラメータ)
        a_next電流値算出手段に保存#
        [:、:、T] = a_next 
        #現在のユニット保存予測値Yは
        y_pred [:、:、Tは= yt_pred 
        #単位の値ごとにキャッシュを追加
        caches.append(キャッシュ)
    キャッシュに伝播するために必要#下位ストア値
    キャッシュ=(キャッシュ、X)は
    、返さy_pred、キャッシュ

  

あなたが持っておめでとうございます(* ^▽^ *)、0から1まで前方に伝播ニューラルネットワークプロセスサイクルを構築することができるようにします。

現代の深い学習の枠組みでは、あなただけの実装前に合格する必要があり、フレームワークを提供するために後処理ので、ほとんどのエンジニアは、ケアの後に渡すために、詳細の深さを学ぶ必要はありません。私は戻って広がりを書いていません。 

 

おすすめ

転載: www.cnblogs.com/siguamatrix/p/12523600.html