用户警告:警告:通过强制转换为 float32 会降低框边界精度

Mur*_*asu 10 python python-3.x

我不断收到此错误

UserWarning: WARN: Box bound precision lowered by casting to float32
  warnings.warn(colorize('%s: %s'%('WARN', msg % args), 'yellow'))
Run Code Online (Sandbox Code Playgroud)

当我开始我的训练课程时。我想它来自这条线

self.action_space = spaces.Box(low, high)
Run Code Online (Sandbox Code Playgroud)

代码正在运行,但我想阻止这个错误出现

我正在使用 cuda pc 来运行代码。

Flo*_*anH 10

只需将传递给的值的 dtype 转换Boxfloat32

self.action_space = spaces.Box(np.float32(low), np.float32(high))

例如,所有这些例子也是有效的:

self.action_space = spaces.Box(np.float32(3), np.float32(4.0))

self.action_space = spaces.Box(np.float32(np.array([3.0,3.5])), np.float32(np.array([4.0,4.5])))

self.action_space = spaces.Box(np.array([3.0,3.5],dtype=np.float32), np.array([4.0,4.5],dtype=np.float32))

顺便说一句:虽然您也可以像@Robert Wilkerson 建议的那样显式地将Box-dtype本身np.float32强制转换为,但没有必要:它不能解决问题,并且没有效果,因为dtypeofBox已经默认为np.float32

  • 这应该是公认的答案。如果“a”或“b”不是 float32 类型(例如,如果它们是默认的 python float64),则“space.Box(a,b,dtype=np.float32)”将发出警告。Box 的默认数据类型是 float32,在 OP 中 low 和 high 可能是 float64 类型。 (5认同)

小智 7

像这样在调用中显式指定dtypeas float32......

self.action_space = spaces.Box(low, high, dtype=np.float32)
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,请像这样在健身房中将记录器级别设置得较低......

import gym
gym.logger.set_level(40)
Run Code Online (Sandbox Code Playgroud)

  • 将 dtype 指定为 float32 并不能解决问题,因为原始警告抱怨正在使用 float32。将其设置为 ``dtype=np.float64``` 将使警告消失。 (5认同)