首页 > 解决方案 > Python 深度学习:不规则多维数据集的形状

问题描述

我正在使用 TFLearn 和 python 3.7 创建我的第一个神经网络,目标是玩蛇。游戏由一个 10x10 的棋盘组成,空白区域显示为 0,蛇试图吃的目标显示为 -1,蛇的头部显示为 1,蛇的每个连续部分显示为前面蛇的一部分 + 1。例如,游戏状态可以是:

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

-1 0 0 0 0 0 0 0 5 0

0 0 0 0 0 0 2 3 4 0

0 0 0 0 0 0 1 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

状态存储为单个数组,大小为 100。

我已经创建了游戏和训练数据,这是一个包含状态和所采取行动的列表列表(包括 0 - 3,代表 4 个方向)。输入数据的一个元素可以是:

[[0, 0, ... 0], 2]

在上述输入数据元素中,状态为 [0, 0, ... 0],采取的动作为 2(下移)。

我很难确定此数据的形状,因为该操作是 int 而不是大小为 100 的列表。我假设数据的形状为:

[None, numberOfInputElements, 2, 100],

虽然这看起来很奇怪,因为所采取的操作是一个整数,而不是数据形状中定义的大小为 100 的列表。

这是正确的,如果不是,正确的形状是什么(如果可能,请解释原因)。

谢谢你提供的所有帮助!

标签: pythonlisttensorflowdeep-learningtflearn

解决方案


最好有一个张量表示具有形状的输入图像[None, 100](或者更好,[None, 10, 10]因此您可以尝试卷积方法)和另一个张量表示具有形状的动作[None],或者也许[None,4],其中动作以单热方式表示(这对于定义成本函数(例如交叉熵)很有用)。

一个不相关的想法 - 假设游戏竞技场是循环的,始终将矩阵围绕蛇的头部居中(因此蛇的头部始终位于同一位置)。


推荐阅读