我試圖修改和實現異步優勢Actor Actor(A3C)模型的Google模式。網上有很多例子讓我開始了,但我遇到了試圖擴大樣本的問題。強化學習a3c具有多個獨立輸出
我可以找到的所有例子都集中在pong上,例如它有一個基於狀態的輸出向左或向右或者保持不動。我試圖擴展到的是一個系統,也有一個單獨的關閉輸出。在pong的情況下,這會提高你的速度。
我把代碼放在我的代碼上可以找到here。它正在玩厄運,但它仍然有相同的左右,但也是一個火按鈕,而不是保持靜止。我正在研究如何修改此代碼,使得火災是一種獨立於運動的行爲。
我知道我可以很容易地從模型中添加另一個單獨的輸出,這樣的輸出會是這個樣子:
self.output = slim.fully_connected(rnn_out,a_size,
activation_fn=tf.nn.softmax,
weights_initializer=normalized_columns_initializer(0.01),
biases_initializer=None)
self.output2 = slim.fully_connected(rnn_out,1,
activation_fn=tf.nn.sigmoid,
weights_initializer=normalized_columns_initializer(0.01),
biases_initializer=None)
我掙扎的事情是我有多麼然後做修改值輸出並重新定義損失函數。價值仍然與兩個產出的組合有關。或者是否有獨立的輸出值用於每個獨立輸出。我覺得它應該仍然只是一個輸出值,但我不確定我如何使用這個值並修改損失函數來考慮這一點。
我想增加一個獨立的術語損失函數,使得計算會是這個樣子:
self.actions_1 = tf.placeholder(shape=[None],dtype=tf.int32)
self.actions_2 = tf.placeholder(shape=[None],dtype=tf.float32)
self.actions_onehot = tf.one_hot(self.actions_1,a_size,dtype=tf.float32)
self.target_v = tf.placeholder(shape=[None],dtype=tf.float32)
self.advantages = tf.placeholder(shape=[None],dtype=tf.float32)
self.responsible_outputs = tf.reduce_sum(self.output1 * self.actions_onehot, [1])
self.responsible_outputs_2 = tf.reduce_sum(self.output2 * self.actions_2, [1])
#Loss functions
self.value_loss = 0.5 * tf.reduce_sum(tf.square(self.target_v - tf.reshape(self.value,[-1])))
self.entropy = - tf.reduce_sum(self.policy * tf.log(self.policy))
self.policy_loss = -tf.reduce_sum(tf.log(self.responsible_outputs)*self.advantages) -
tf.reduce_sum(tf.log(self.responsible_outputs_2)*self.advantages)
self.loss = 0.5 * self.value_loss + self.policy_loss - self.entropy * 0.01
我期待知道如果我在正確的軌道上,或有是我可以擴展的資源或例子。
在這個例子中,有三個輸出向左右燃燒。我想獨立於運動開火,所以你可以同時做兩個。你能告訴我一個這樣的例子嗎?感謝您的其他提示。 –
在這裏,您可以永遠保持火力(使用一個輸出向右/向左移動),無需使用額外的輸出。 –