Skip to content

xuance/common/memory_tools_marl.py 中value_normalizer[key_vn].denormalize(vs[t])的维度问题 #193

Description

@SPRCSY

在xuance/common/memory_tools_marl.py中第200行到207行,以下区域

                   if use_value_norm:
                       vs_t, vs_next = value_normalizer[key_vn].denormalize(vs[t]), value_normalizer[
                           key_vn].denormalize(vs[t + 1])
                   else:
                       vs_t, vs_next = vs[t], vs[t + 1]
                   delta = rewards[t] + (1 - dones[t]) * self.gamma * vs_next - vs_t
                   last_gae_lam = delta + (1 - dones[t]) * self.gamma * self.gae_lambda * last_gae_lam
                   returns[t] = last_gae_lam + vs_t

在1.4.0版本中,0维np.float32对象vs[t]会通过 xuance/torch/utils/value_norm.py 被denormalize升维成 一个二维的对象 vs_t, vs_next ,形如array([[0.]],dtype=np.float32),因此,last_gae_lam 形如 array([[0.]])。在mindspore、tf也有类似实现,相同的输入带来的输出内容、格式是相同的。
returns初始化为 np.zeros_like(rewards),对于 returns[t],它是一个np.float32 0维对象,因此按目前的实现赋值会报错。
我根据我自己的场景测试,本着最小影响面原则,添加 .reshape(-1)[0]vs_t, vs_next降维成np.float32 0维对象可解决问题,也不会有精度损失。请评估修改下,感谢!

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions