我正在学习如何使用Gym环境来训练使用TFLearn构建的深度学习模型。
目前,我的观察结果数组具有以下形状:(210, 160, 3)
关于重塑此数组的最佳方法是什么的任何建议,以便可以在TensorFlow分类模型中使用?
最佳答案
标准方式(如DeepMing的DQN paper中所述)为:
将其转换为灰度,最终得到(210,160)。在这里,您最好检查是否没有有用的信息丢失,在某些游戏中可能会发生这种情况。 (例如,一个球变成了与背景相同的“颜色”)。在这里您可以使用类似:processed = np.mean(frame,2,keepdims = False)
下采样至(110,84)。在这里,您可以使用OpenCV或任何其他方便的库:resized = cv2.resize(processed, (110,84),interpolation = cv2.CV_INTER_LINEAR)
裁剪屏幕中央部分(84,84)result = resized[13:97]
尽管在DeepMind论文中对此进行了描述,但您可以使用更方便但仍然有效的过程,例如:
转换为灰度:processed = np.mean(frame,2,keepdims = False)
作物中央部分:cropped = processed[35:195]
下采样2倍并获得(80,80)图像:result = cropped[::2,::2]
Andrej Karpathy在他的blog中使用了类似的方法
您还可以使用其他尺寸尺寸,转换为二进制图像而不是灰度图像,或任何对您的应用程序更有效的图像。
处理完图像后,您可以将其馈送到卷积网络或展平到一维数组并馈送到完全连接的网络。
将几帧(通常为4帧)的堆栈与网络跳过帧(在获取一帧后,您跳过接下来的3帧)一起用作网络输入也是有用的,因为它们通常不包含很多有用的信息。