ML-Agents TensorFlow模型推理模式运行报错求助:轴外维度不匹配
这个错误我之前在使用旧版ML-Agents和Unity组合时也遇到过,核心原因是Barracuda在执行张量拼接(Concat)时,除了指定的拼接轴之外,所有其他维度必须完全匹配。结合你使用的ML-Agents v0.7、Unity 2017和Python 3.6环境,下面是几个针对性的排查和解决步骤:
检查训练与推理的观测空间一致性
训练时你定义的观测空间(比如视觉传感器的分辨率、向量观测的维度数量)必须和Unity推理场景中Agent的观测设置完全一致。例如:- 如果训练时用的是84×84的RGB视觉观测,推理时不能改成64×64;
- 如果训练时向量观测包含3个数值(比如飞机的俯仰、偏航、滚转),推理时也必须传入相同维度的向量。
任何观测维度的不匹配都会导致拼接时非轴维度不一致,触发这个错误。
重新导出训练模型
ML-Agents v0.7的模型导出工具偶尔会因为环境依赖问题生成有维度缺陷的模型。你可以重新执行训练导出命令,确保导出过程没有报错:mlagents-learn config/trainer_config.yaml --run-id=your_run_id --save导出后检查生成的
.onnx模型文件,确认输入输出的张量形状和训练时的配置一致。排查Unity端张量拼接逻辑
在Unity的Agent代码中,找到拼接观测张量的位置(通常是在CollectObservations或推理前的数据处理部分),添加日志打印每个待拼接张量的形状:// 假设tensorsToConcat是你要拼接的张量数组 foreach(var tensor in tensorsToConcat) { Debug.Log($"待拼接张量形状: {tensor.shape}"); }运行游戏后查看日志,对比这些张量的形状,找到非拼接轴维度不匹配的那个张量,针对性调整其维度。
确认Barracuda版本兼容性
Unity 2017自带的Barracuda版本和ML-Agents v0.7的适配性有限,你可以尝试更新到ML-Agents v0.7官方推荐的Barracuda版本(当时对应Barracuda 0.1.x系列),避免因版本差异导致的张量处理逻辑bug。检查向量观测的归一化处理
如果你的观测包含向量数据,确保训练和推理时的归一化方式完全一致。比如训练时将速度值归一到[0,1],推理时也必须执行相同的归一化操作,否则可能导致张量维度意外变化(比如误将一维向量变成二维)。
内容的提问来源于stack exchange,提问作者junaid raza

