我正在学习如何使用 Gym 环境来训练使用 TFLearn 构建的深度学习模型。
目前我的观察数组具有以下形状:(210, 160, 3)
关于 reshape 此数组以便将其用于 TensorFlow 分类模型的最佳方法有什么建议吗?
最佳答案
标准方法(如 DeepMing 的 DQN paper 中所述)是:
将其转换为灰度,最终得到 (210,160)。在这里您最好检查是否丢失了有用的信息,在某些游戏中可能会发生这种情况。 (例如,球的“颜色”与背景相同)。在这里你可以使用类似的东西:
processed = np.mean(frame,2,keepdims = False)
将采样降低到 (110,84)。在这里您可以使用 OpenCV 或任何其他方便的库:
调整大小 = cv2.resize(已处理, (110,84),插值 = cv2.CV_INTER_LINEAR)
裁剪屏幕的中央部分 (84,84)
结果 = 调整大小[13:97]
虽然,这在 DeepMind 论文中有所描述,您可以使用更方便但仍然有效的程序,例如:
转换为灰度:
processed = np.mean(frame,2,keepdims = False)
裁剪中心部分:
裁剪 = 已处理[35:195]
将采样缩小 2 倍并得到 (80,80) 图像:
结果 = 裁剪[::2,::2]
Andrej Karpathy 在他的 blog 中使用了类似的方法。
您还可以使用其他尺寸、转换为二进制图像而不是灰度图像或任何更适合您的应用程序的图像。
处理完图像后,您可以将其输入卷积网络或展平为一维数组并输入全连接网络。
使用多个帧(通常是 4 个)的堆栈作为网络输入以及跳帧(在拍摄一帧后跳过接下来的 3 帧)也很有用,因为它们通常不包含太多有用的信息。
关于python - 为 TensorFlow reshape Gym 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49621599/