# 使用classmindspore\_rl.policy.EpsilonGreedyPolicy发现维度不匹配及解决

**1. 系统环境**

硬件环境\(Ascend/GPU/CPU\): Ascend/GPU/CP

软件环境: MindSpore 版本: 1.7.0

执行模式（静态图/动态图）： 不限

Python 版本: 3.7.6

操作系统平台: linux

**2. 报错信息**

2.1 问题描述

![](figures/zh-cn_image_0000002100164664.png)这里输入的action\_dim是2，输出的output不应该就是action吗？请问为什么是一维的？调试过程中发现RandomPolicy只能输出一维的，修改之后再RandomPolicy中运行测试代码，可以返回多维的动作，但在EpsilonGreedyPolicy中调用后，仍然返回的是一维的动作。

2.2 脚本信息

```
state_dim, hidden_dim, action_dim = 4, 10, 2
input_net = FullyConnectedNet(state_dim, hidden_dim, action_dim)
policy = GreedyPolicy(input_net)
state = Tensor(np.ones([2, 4]).astype(np.float32))
output = policy(state)
print(output.shape)
```

**3. 根因分析**

MindRL中的算法都使用MindSpore的Graph Mode（即图模式），代码会被编译成整图后再执行，和TensorFlow 1.x的执行模式相同。

**4. 解决方案**

可以通过修改train.py中的GRAPH\_MODE到PYNATIVE\_MODE，并且注释xxx\_trainer.py中的@ms.jit / @jit方法，使代码通过PyNative模式执行（和Pytorch一致）。

