为TensorFlow重塑一个Gym数组

时间:2018-04-03 03:07:03

标签: python tensorflow reinforcement-learning tflearn openai-gym

我正在学习如何使用Gym环境来训练使用TFLearn构建的深度学习模型。

目前,我的观察数组具有以下形状:(210, 160, 3)

有关重塑此数组的最佳方法的任何建议,以便可以在TensorFlow分类模型中使用吗?

2 个答案:

答案 0 :(得分:1)

标准方式(如DeepMing在DQN paper中所述)将是:

  1. 将其转换为灰度,因此最终得到(210,160)。在这里,您最好检查没有丢失有用信息,在某些游戏中可能会发生这种情况。 (例如,球变成与背景相同的'颜色')。在这里你可以使用类似的东西:

    processed = np.mean(frame,2,keepdims = False)

  2. 下采样到(110,84)。在这里,您可以使用OpenCV或任何其他方便的库:

    resized = cv2.resize(processed, (110,84),interpolation = cv2.CV_INTER_LINEAR)

  3. 裁剪画面的中央部分(84,84)

    result = resized[13:97]

  4. 尽管在DeepMind论文中对此进行了描述,但您可以使用更方便但仍然有效的程序,例如:

    1. 转换为灰度:

      processed = np.mean(frame,2,keepdims = False)

    2. 裁剪中心部分:

      cropped = processed[35:195]

    3. 下采样因数为2,得到(80,80)图像:

      result = cropped[::2,::2]

    4. Andrej Karpathy在blog

      中使用了类似的方法

      您还可以使用其他尺寸大小,转换为二进制图像而不是灰度图像或任何更适合您的应用程序的图像。

      处理完图像后,您可以将其输入卷积网络,或者将其压缩为1-D阵列并馈送到完全连接的网络。

      使用几个帧(通常为4个)的堆栈作为网络输入以及跳帧(在跳过下一个帧后跳帧)之后也很有用,因为它们通常不包含太多有用的信息。

答案 1 :(得分:0)

请注意,Gym本身具有AtariPreprocessing包装器,可用于预处理Atari环境。我相信包装程序所做的事情与提到的DQN论文asakryukin相似。

您可以像这样使用它:

import gym
from gym.wrappers import AtariPreprocessing

env = gym.make('Pong-v0')
env = AtariPreprocessing(env, frame_skip=1)

有关包装器的更多信息,请参见here