問題タブ [rnn]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
neural-network - RNN の Keras get_weight 解釈
Keras でこのコードを実行しているとき:
私はこの出力を得ています
(3,3) 行列は、RNN ユニットを相互に接続する重み行列であり、2 つの配列の 1 つがおそらくバイアスであると思います。しかし、3 つ目は何ですか?
python - 文字列をフォーマットするための RNN モデルに関するアドバイスが必要
状況
私は現在 Tensorflow を学んでおり、最初の試みとして (MINST チュートリアルに従う/試した後)、いくつかの基本的な文字列フォーマットを行うモデル (おそらく RNN) を作成したいと思います:
次のケースでは、深層学習ほど複雑なものは必要ないかもしれませんが、それは自分自身を訓練するためだけのものです。
実際のクリーンアドレスを抽出したい「クリーンアドレス」文字列のセットがあります。
彼女は私が取得したい変換の種類です:
もっと例が必要です : 200 個の要素を含むスプレッドシートへのリンクを次に示します (1000 ~ 5000 個の要素に拡張する予定です)。
ご覧のとおり、多くの認識可能なパターンがあります。
BP単語とそれに続く 2 桁または 4 桁の数字を取らないでください- 服用しない
ZI、ZAまたはZone d'activiter... - 住所は通常次のようになります
00 (Rue|Voie|Avenue|...) nameOfStreet - 等...
私が考える進め方
入力文字列の一部である出力文字列を取得しようとしています。上記のパターンに基づいて単語を削除します。
RNN タイプのグラフを使用すると思います。「「BP」があるなどのことを検出する必要があるため、この単語を使用しません。次の入力が 2 桁または 4 桁の文字列である場合は、そうではありません。どちらかを取って」、何らかの記憶があるはずだと思います。
それはすべて、データを入力する方法によって異なります。私はそれを行う2つまたは3つの方法があると思います:
- 単語を入力 (スペースで区切る)
- 文字列全体を入力(アドレス全体)
- 文字列を入力して、それをより深いレイヤーに分割しますか?
問題は次のとおりです。
単一の単語を入力する場合、文字列の区切りをどのようにマークしますか?
文字列全体を入力すると、システムが単一の単語のみを取得または削除するため、少し失われたように見えます.3 番目のオプション (2 つを混在させる) は理にかなっていますか?
バッチでトレーニングし、「バッチ部分」を使用して複数の単語を入力し、すべてのバッチの表現とアドレスを入力することは可能ですか?
また、私のシステムでは、ノードの重みがすべて 0 と 1 になるのでしょうか (単一の単語しか取得または削除できないため)、それとも単語を保持する確率のような中間値になるのでしょうか。
プロセスの要約
- すべての単語の辞書を作成する
- 文字列を同じ長さにパディングしますか?
- すべての文字列 (または単語?) を 1D 配列に変換します
- グラフを定義する
- 小さなバッチで文字列 (または単語?) を入力する
- テストと表示の精度 (出力文字列は、期待される出力と完全に一致するか、または期待される出力と出力の間の差の % であるか?)
- グラフを保存する
- それを使用して文字列をフォーマットします
すべてを読んでいただきありがとうございます。
特に、私が向かっている一般的な方向性と、データをグラフに入力する方法に関して。
tensorflow - Keras model.load_weights(WEIGHTS) は不正確な結果を提供します
MSCOCO データセットで Keras (Tensorflow バックエンド) を使用して記述生成用の LSTM RNN をトレーニングしています。モデルをトレーニングすると、0.79 の損失で 92% の精度が得られました。さらに、モデルがトレーニングされているときに、各エポックで説明の生成をテストしたところ、モデルはランダムな単語を与えるときに意味のある説明で非常に優れた予測を提供しました。
ただし、トレーニング後、Keras で model.load_weights(WEIGHTS) メソッドを使用してモデルをロードし、以前に行ったようにランダムな単語を指定して説明を作成しようとしました。しかし、モデルは意味のある説明を提供しておらず、まったく意味のないランダムな単語を出力するだけです。
この問題の原因を誰か教えてもらえますか?
私のモデルパラメータは次のとおりです。
10 LSTM 層、学習率: 0.04、アクティベーション: Softmax、損失関数: カテゴリクロス エントロピー、オプティマイザー: rmsprop
アップデート:
これは私のモデルです:
これは、モデルの重みをトレーニングして保存する方法です (精度をテストするために、各エポックで説明を生成します)。
これは、モデルをロードする方法です (WEIGHTS = 保存したモデル):
テスト用にランダムに生成されたベクトルをモデルに提供します。これが私が説明を生成する方法です。