問題タブ [recurrent-neural-network]
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.
theano - 次元の数が間違っています: 期待される 0 は形状 (1,) で 1 です
バニラrnnを使用して単語レベルの言語モデリングを行っています。モデルをトレーニングできますが、奇妙な理由でモデルからサンプル/予測を取得できません。コードの関連部分は次のとおりです。
次のエラーが表示されます: 「TypeError: ('インデックス 0 (0 ベース) で名前が "train.py:94" の theano 関数への入力引数が正しくありません'、'次元の数が正しくありません: 期待される 0、形状 (1) で 1 を取得しました,).')"
これは次の行 (predict_model 内) に対応します。
何時間も費やした後でも、次の場合に寸法の不一致が発生する可能性があることを理解できません。
そして、train_set_x[index] を実行すると、 fmatrix 型の' x ' Tensor が保持できる(4, 109)が得られます (これは train_model で発生します) が、 voc [index] を実行すると(1, 109)、これも行列ですが、' x ' はこれを保持できません。なぜですか? !
どんな助けでも大歓迎です。
ありがとう !
machine-learning - ソフトな注意とハードな注意
このブログ投稿The Unreasonable Effectiveness of Recurrent Neural Networksで、Andrej Karpathy はニューラル ネットワーク ベースの機械学習の将来の方向性について言及しています。
注意の概念は、ニューラル ネットワークにおける最も興味深い最近のアーキテクチャの革新です。[...] メモリ アドレッシングのソフト アテンション スキームは、モデルを完全に微分可能に保つので便利ですが、残念ながら、アテンドできるすべてのものがアテンドされるため (ただしソフトに) 効率が犠牲になります。これは、特定のアドレスを指すのではなく、代わりにメモリ全体のすべてのアドレスの全体的な分布を定義する C のポインターを宣言し、ポインターを逆参照すると、ポイントされたコンテンツの加重合計が返されると考えてください (これはコストが高くなります)。手術!)。これにより、複数の作成者がソフト アテンション モデルをハード アテンション モデルに交換し、注目するメモリの特定のチャンクをサンプリングするようになりました (たとえば、すべてのセルからある程度の読み取り/書き込みではなく、一部のメモリセルに対する読み取り/書き込みアクション)。このモデルは、はるかに哲学的に魅力的で、スケーラブルで効率的ですが、残念なことに、区別することもできません。
ポインターの比喩は理解できたと思いますが、注意とは正確には何で、難しいものはなぜ微分できないのでしょうか?
ここで注意についての説明を見つけましたが、まだソフト/ハードの部分について混乱しています.
machine-learning - テンソルフローで文字ベースの seq2seq モデルを構築する方法
seq2seq タスクで既存の単語単位ではなく文字単位を使用できるようにするには、tensorflow の既存の seq2seq モデルにどのような変更が必要ですか? そして、これは予測的な ext アプリケーションに適した構成でしょうか?
このタスクでは、次の関数シグネチャを変更する必要がある場合があります。
入出力語彙の削減とは別に、そのような文字レベルの seq2seq モデルを実装するには、他にどのようなパラメーターの変更が必要になるでしょうか?
machine-learning - (双方向) 単純なテキスト分類用の RNN
TL;DR: 双方向 RNN は単純なテキスト分類に役立ちますか? パディングは悪ですか?
最近の仕事では、同じタスク、つまりテキスト分類のために LSTM モデルと BLSTM モデルを作成しました。LSTM モデルはかなり良い仕事をしましたが、BLSTM を試してみて、精度をさらに押し上げることができるかどうかを確認することにしました。最終的に、BLSTM は収束が非常に遅く、驚くべきことに、50% の確率でドロップアウトを適用したにもかかわらず、過適合であることがわかりました。
実装では、より高速なトレーニングを期待して、LSTM と BLSTM の両方に unrolled RNN を使用しました。要件を満たすために、入力テキストを手動で固定長にパディングしました。
「私は朝遅く寝て、Nebuchadnezzar とのインタビューを逃した」という文があるとします。この文は、事前にトレーニングされた単語埋め込みのインデックスの配列に変換されるときに、末尾に 0 が埋め込まれます。[21, 43, 25, 64, 43, 25, 6, 234, 23, 0, 0, 29, 0, 0, 0, ..., 0] のようになります。「th」(「the」である必要があります) はタイプミスであり、「Nebuchadnezzar」という名前はあまりにもまれであるため、両方とも語彙に存在しないため、特別な完全に対応する 0 に置き換えます。ゼロ ワード ベクトル。
ここに私の反省があります:
一部の人々は、コーパスをGloVeまたはWord2Vecモデルに供給する前に、未知の単語を「< unk >」のような特別な単語に変更することを好みます。トレーニングの前に、最初に語彙を構築し、(最小カウント設定に従って) 低頻度の単語を「< unk >」に変更する必要があるということですか? RNN をトレーニングするときに、不明な単語を 0 に変更したり、単に削除したりするよりも優れていますか?
私の知る限り、LSTM または BLSTM ネットワークに供給される末尾の 0 は、出力を混乱させます。外部からの新しい情報はありませんが、セルの状態は後続のタイム ステップごとに更新されるため、最終的なセルの出力は、後続の長い 0 によって大きな影響を受けます。そして、私の考えでは、BLSTM は逆の順序でテキストを処理するため、さらに影響を受けるでしょう。つまり、[0, 0, 0, ..., 0, 321, 231] のようなものです。ゲートを 1.0 に忘れて、最初にメモリを育成します。多くの人がパディングを使用しているのを見ますが、BLSTM の場合、テキストが非常に長くパディングされると災害が発生しませんか?
これらの問題について何か考えはありますか?:-o
python - Python - MIDI ファイルからのデータ抽出
膨大な量の MIDI ファイルを読み込み、そのデータをグループ - ティック (時間)、ピッチ (ノート)、ベロシティ (ボリューム) に抽出しようとしています。抽出されたデータは、さらに音楽を生成するために Recurrent Neural Network に適用されます。
私はライブラリを探していて、python-midi を見つけました。これが私のコードです:
さまざまなイベント タイプの解釈については、こちらまたはGranroth-Wilding の Web サイトを参照してください。私のターゲット値 (ティック、ピッチ、ベロシティ) は、midi.NOTeOn/OffEvent(ティック = 0、チャネル = 0、データ = [ピッチ、ベロシティ]) として表示されます。
質問 1:
利用可能なチュートリアルやドキュメントがないため、いくつかのテストの後print pattern[0]
、tick == 0 で発生したすべてのイベントが返されることがわかりました。もちろん、すべてのイベントに対して for ループを実行することですべてのデータを取得できます。チャンネル、ピッチなどの他のパラメータを提供してデータを取得する関数。
質問 2: どうやら多くの MIDI / 音楽ライブラリが利用できるようです。python-midi がまともでないと言っているわけではありませんが、もっと良いものがあれば共有してください! できれば、python-midi には存在しない適切なドキュメントまたはサポートが付属しています。私はこの分野に不慣れで、いくつかの推奨事項が大好きです。
machine-learning - RNN (Recurrent Neural Network) は通常のニューラル ネットワークとしてトレーニングできますか?
RNN と単純なニューラル ネットワークのトレーニングの違いは何ですか? RNN はフィード フォワードおよびバックワード メソッドを使用してトレーニングできますか?
よろしくお願いします!
nlp - 再帰型ニューラル ネットワークに単語の埋め込みを微調整する必要があるのはなぜですか?
Theano のRNNに関するチュートリアルでは、最後の部分で次のように述べています。
各更新後に正規化することにより、単語の埋め込みを単位球に保持します。
私がオンラインで検索したところ、Recurrent-Neural-Network Architectures and Learning Methods for Spoken Language Understanding の調査という論文が、3.5.1 章で単語埋め込みの微調整であると述べられているだけでした。
単語の埋め込みを微調整できる理由がわかりません。 self.emb
は、この RNN モデルの入力ですよね? 入力値を変更するにはどうすればよいでしょうか?
python - Recurrent Neural Network (LSTM) の任意の長さの入出力
これは、Neurolab Python LibraryのElman Recurrent Neural Networkの使用例です。
この例では、 2 単位長の入力と2 単位長の出力をマージ しています。その後、これらのマージされた配列を使用してネットワークをトレーニングします。
まず第一に、私がここから得たスキーマのようには見えません:
私の主な質問は次のとおりです。
次のような任意の長さの 入力と出力でネットワークをトレーニングする必要があります。
- 固定長出力への任意長入力
- 固定長入力から任意長出力へ
- 任意の長さの入力から任意の長さの出力へ
この時点で、「あなたの答えはLong short-term memory networksです」ということが頭に浮かびます。
それはわかっていますが、Neurolabは優れた機能を備えているため使いやすいです。特に、それは非常にPythonicです。だから私は自分の問題にNeurolab Libraryを使うことを主張しています。しかし、より優れたLSTM機能を備えた Neurolab のような別のライブラリを提案していただければ、それを受け入れます。
最終的に、この例を任意の長さの入力と出力に再配置するにはどうすればよいですか?
私は RNN と LSTM についてよく理解していないので、説明してください。