geektutu / blog

极客兔兔的博客,Coding Coding 创建有趣的开源项目。
https://geektutu.com
Apache License 2.0
167 stars 21 forks source link

TensorFlow 2.0 (九) - 强化学习 70行代码实战 Policy Gradient | 极客兔兔 #19

Open geektutu opened 5 years ago

geektutu commented 5 years ago

https://geektutu.com/post/tensorflow2-gym-pg.html

TensorFlow 2.0 入门系列文章,第九篇,使用强化学习算法策略梯度(Policy Gradient),实战 OpenAI gym CartPole,代码仅70行。

youwv commented 3 years ago

博主有时间能写写DDPG算法吗,期待哈哈,感觉您的代码逻辑很强!

geektutu commented 3 years ago

@youstick 很高兴得到你的认可 😸,有时间会继续写的~

YiKangOY commented 3 years ago

你好,想问下为什么这里损失函数不用交叉熵sparse_categorical_crossentropy呢

wendyzhang1114 commented 3 years ago

根据论文中的公式policy gradient损失函数不能用简单的mse,而是用交叉熵求对数。 博主写的不错,适合小白入手。然后对比了几个大佬的文章内容后,才搞明白。

weslythisway commented 9 months ago

想要請問為何程式碼中,訓練模型僅使用當回合的數據,policy gradient 不是要把過去玩的回合的數據一起納入訓練??

youwv commented 9 months ago

while True: a = choose_action(s) nexts, r, done, = env.step(a) replay_records.append((s, a, r))

    score += r
    s = next_s
    if done:
        train(replay_records)

def train(records): s_batch = np.array([record[0] for record in records])

action 独热编码处理,方便求动作概率,即 prob_batch

a_batch = np.array([[1 if record[1] == i else 0 for i in range(ACTION_DIM)]
                    for record in records])
# 假设predict的概率是 [0.3, 0.7],选择的动作是 [0, 1]
# 则动作[0, 1]的概率等于 [0, 0.7] = [0.3, 0.7] * [0, 1]
prob_batch = model.predict(s_batch) * a_batch
r_batch = discount_rewards([record[2] for record in records])

model.fit(s_batch, prob_batch, sample_weight=r_batch, verbose=0)

是否是因为没有使用记忆回放,推荐你到B站看王树森的深度DRL课程,讲的很清楚。

WY @.***

 

------------------ 原始邮件 ------------------ 发件人: "geektutu/blog" @.>; 发送时间: 2023年12月29日(星期五) 上午9:34 @.>; @.**@.>; 主题: Re: [geektutu/blog] TensorFlow 2.0 (九) - 强化学习 70行代码实战 Policy Gradient | 极客兔兔 (#19)

想要請問為何程式碼中,訓練模型僅使用當回合的數據,policy gradient 不是要把過去玩的回合的數據一起納入訓練??

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>