为 TensorFlow 重塑 Gym 数组
Reshaping an Gym array for TensorFlow
我正在学习如何使用 Gym 环境来训练使用 TFLearn 构建的深度学习模型。
目前我的观察数组具有以下形状:(210, 160, 3)
关于重塑此数组以使其可用于 TensorFlow 分类模型的最佳方法有何建议?
标准方法(如 DeepMing 在 DQN paper 中所述)是:
将其转换为Gray-Scale,这样你就end-up有了(210,160)。在这里你最好检查没有有用的信息丢失,在某些游戏中可能会发生这种情况。 (例如,球变得与背景相同 'color')。在这里你可以使用类似的东西:
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
中使用了类似的方法
您还可以使用其他维度大小,转换为二进制图像而不是 gray-scale 或任何更适合您的应用程序的图像。
处理完图像后,您可以将其提供给卷积网络或展平为一维数组并提供给 fully-connected 网络。
将多个帧(通常为 4 个)的堆栈与 skip-frames(拍摄一帧后跳过接下来的 3 帧)一起用作网络输入也很有用,因为它们通常不包含太多有用的内容信息。
请注意,Gym 本身有一个 AtariPreprocessing
包装器,您可以使用它来预处理 Atari 环境。我相信包装器所做的事情与 DQN 论文 asakryukin 中提到的类似。
你可以这样使用它:
import gym
from gym.wrappers import AtariPreprocessing
env = gym.make('Pong-v0')
env = AtariPreprocessing(env, frame_skip=1)
可以找到有关包装器的更多信息here。
我正在学习如何使用 Gym 环境来训练使用 TFLearn 构建的深度学习模型。
目前我的观察数组具有以下形状:(210, 160, 3)
关于重塑此数组以使其可用于 TensorFlow 分类模型的最佳方法有何建议?
标准方法(如 DeepMing 在 DQN paper 中所述)是:
将其转换为Gray-Scale,这样你就end-up有了(210,160)。在这里你最好检查没有有用的信息丢失,在某些游戏中可能会发生这种情况。 (例如,球变得与背景相同 'color')。在这里你可以使用类似的东西:
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
中使用了类似的方法您还可以使用其他维度大小,转换为二进制图像而不是 gray-scale 或任何更适合您的应用程序的图像。
处理完图像后,您可以将其提供给卷积网络或展平为一维数组并提供给 fully-connected 网络。
将多个帧(通常为 4 个)的堆栈与 skip-frames(拍摄一帧后跳过接下来的 3 帧)一起用作网络输入也很有用,因为它们通常不包含太多有用的内容信息。
请注意,Gym 本身有一个 AtariPreprocessing
包装器,您可以使用它来预处理 Atari 环境。我相信包装器所做的事情与 DQN 论文 asakryukin 中提到的类似。
你可以这样使用它:
import gym
from gym.wrappers import AtariPreprocessing
env = gym.make('Pong-v0')
env = AtariPreprocessing(env, frame_skip=1)
可以找到有关包装器的更多信息here。