亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Keras 模型:RL 代理的輸入形狀尺寸錯誤

Keras 模型:RL 代理的輸入形狀尺寸錯誤

桃花長相依 2022-09-06 16:40:18
我的目標是開發一個DQN代理,它將根據特定的策略/策略選擇其操作。我以前使用OpenAi健身房環境,但現在我想創建自己的RL環境。在此階段,代理應選擇隨機操作或根據深度神經網絡(在DQN類中定義)給出的預測選擇其操作。到目前為止,我已經設置了神經網絡模型和我的環境。NN 應接收狀態作為其輸入。這些狀態表示 11 個可能的標量值,范圍從 9.5 到 10.5(9.5、9.6、...、10.4、10.5)。由于我們正在處理RL,因此代理在訓練過程中生成其數據。輸出應為 0 和 1,對應于建議的操作?,F在,我想給我的代理一個標量值:例如,一個樣本狀態x = 10,讓他決定要執行的操作(調用Agent.select_action()),我遇到了與輸入形狀/輸入維度相關的問題。代碼如下:1. DQN 類:class DQN():    def __init__(self, state_size, action_size, lr):        self.state_size = state_size        self.action_size = action_size        self.lr = lr        self.model = Sequential()        self.model.add(Dense(128, input_dim=self.state_size, activation='relu'))        self.model.add(Dense(128, activation='relu'))        self.model.add(Dense(self.action_size, activation='linear'))        self.model.compile(optimizer=Adam(lr=self.lr), loss='mse')        self.model.summary()    def model_info(self):        model_description = '\n\n---Model_INFO Summary: The model was passed {} state sizes,\            \n {} action sizes and a learning rate of {} -----'\                            .format(self.state_size, self.action_size, self.lr)        return model_description    def predict(self, state):        return self.model.predict(state)    def train(self, state, q_values):        self.state = state        self.q_values = q_values        return self.model.fit(state, q_values, verbose=0)    def load_weights(self, path):        self.model.load_weights(path)    def save_weights(self, path):        self.model.save_weights(path)2. 代理類:NUM_EPISODES = 100MAX_STEPS_PER_EPISODE = 100EPSILON = 0.5 EPSILON_DECAY_RATE = 0.001EPSILON_MIN = 0.01EPSILON_MAX = 1DISCOUNT_FACTOR = 0.99REPLAY_MEMORY_SIZE = 50000BATCH_SIZE = 50TRAIN_START = 100ACTION_SPACE = [0, 1]STATE_SIZE = 11 LEARNING_RATE = 0.01
查看完整描述

1 回答

?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

這里有幾個問題。首先,您所說的實際上是一個狀態空間,即您的代理可以處于的所有可能狀態的集合。狀態大小實際上是 1,因為只有一個參數要作為狀態傳遞。state_size

在此處定義輸入圖層時:

self.model.add(Dense(128, input_dim=self.state_size, activation='relu'))

您說輸入維度將等于 11,但當您調用預測時,您將它傳遞給 1 個數字 (10)。

因此,您要么需要修改以僅接收一個數字,要么可以定義狀態向量,例如,每個數字對應于一個可能的狀態(從9.5到10.5)。因此,當狀態為 9.5 時,您的狀態向量為 9.5,依此類推。input_dimstate = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])[1, 0, 0, ...0]

第二個問題是,當你定義你的狀態時,你應該把方括號

state = np.array([10])

否則數組的形狀是(),我相信你已經發現了。

希望它有幫助!如果您需要任何澄清,請告訴我。


查看完整回答
反對 回復 2022-09-06
  • 1 回答
  • 0 關注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號