問題タブ [dqn]

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.

0 投票する
0 に答える
838 参照

python - Openai ジム空間の次元を取得する方法。Keras でニューラル ネットワークを構築するときに DQN で使用されるタプル

Openai Gym のスペースを使用してカスタム環境を構築しました。csv ファイルからの 4 つの連続した数字。および形状の配列 (4*24) も csv ファイルからのものです。

これは、csv ファイルからデータを読み取るための私の reset() 関数です。

エージェントをトレーニングするために、 keras-rl ライブラリの DQNAgent である DQN アルゴリズムを使用したいと思い ます。ニューラル ネットワーク モデルを構築するコードは次のとおりです。

私の理解によると、spaces.Tuple インスタンスには shape() メソッドがなく、lenメソッドはタプル内のスペースの数を返します。たとえば、私の環境では len = 5

しかし、ニューラル ネットワークを構築するには、4 + 4*24 + 3 = 103 個の入力ニューロンが必要なようです。入力ディメンションを次のようにハードコーディングしようとしました:

しかし、次のエラーが発生しました。

ValueError: 入力のチェック中にエラーが発生しました: flatten_1_input の形状は (1, 103) であると予想されていましたが、形状 (1, 5) の配列を取得しました。

だから私はそれから試しました:

しかし、私もエラーが発生しました:

TypeError: サイズ 1 の配列のみを Python スカラーに変換できます 上記の例外は、次の例外の直接の原因でした: Traceback (most recent call last): File "C:/Users/yuche/Dropbox/risk hedging/rl-project /DqnDAMarketAgent.py"、37 行目、dqn.fit(env、nb_steps=1440、visualize=True、verbose=2) ファイル "C:\Users\yuche\anaconda3\envs\py37\lib\site-packages\rl \core.py"、169 行目、fit action = self.forward(observation) File "C:\Users\yuche\anaconda3\envs\py37\lib\site-packages\rl\agents\dqn.py"、行228、前方 q_values = self.compute_q_values(state) ファイル「C:\Users\yuche\anaconda3\envs\py37\lib\site-packages\rl\agents\dqn.py」、69 行目、compute_q_values q_values = self .compute_batch_q_values([state]).flatten() ファイル "C:\Users\yuche\anaconda3\envs\py37\lib\site-packages\rl\agents\dqn.py」、64 行目、compute_batch_q_values q_values = self.model.predict_on_batch(batch) ファイル「C:\Users\yuche\anaconda3\envs\py37\lib\site-packages\keras\engine\training.py」、1580 行、predict_on_batch 出力 = self.predict_function(ins) ファイル「C:\Users\yuche\anaconda3\envs\py37\lib\site-packages\tensorflow\python\keras\backend.py」、3277 行目call dtype=tensor_type.as_numpy_dtype)) ファイル "C:\Users\yuche\anaconda3\envs\py37\lib\site-packages\numpy\core_asarray.py"、83 行目、asarray で配列を返します(a, dtype, copy= False、order=order) ValueError: 配列要素をシーケンスで設定しています。

私はこのエラーをグーグルで検索し、考えられる理由を見つけました:

これは、定義済みまたは構築済みの関数が単一のパラメーターを期待しているにもかかわらず、配列を取得している間に発生します。

入力として 5 個のニューロンではなく 103 個のニューロンが必要なようですが、Tuple はネットワークに 2 つの配列を直接フィードします。DQN での Tuple の一般的な使用法は何ですか?

ところで、Spaces.Tuple の代わりに Spaces.Box を使用するメソッドを思いつきました。

しかし、これは最も理想的な方法ではないようです。

前もって感謝します!