python - 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 的列表。
这是正确的,如果不是,正确的形状是什么(如果可能,请解释原因)。
谢谢你提供的所有帮助!
解决方案
最好有一个张量表示具有形状的输入图像[None, 100]
(或者更好,[None, 10, 10]
因此您可以尝试卷积方法)和另一个张量表示具有形状的动作[None]
,或者也许[None,4]
,其中动作以单热方式表示(这对于定义成本函数(例如交叉熵)很有用)。
一个不相关的想法 - 假设游戏竞技场是循环的,始终将矩阵围绕蛇的头部居中(因此蛇的头部始终位于同一位置)。
推荐阅读
- php - 当我使用 docker multi-stage build 构建生产应用程序时,如何删除 composer dev 依赖项?
- reactjs - React:我应该使用路由还是有条件地渲染一系列视图?
- python - 我在第 17 行有一个错误,在 pointsPlus points += 1*mult TypeError: unsupported operand type(s) for +=: 'Event' and 'int'
- sql - Need partition by three field and ranking
- python - 重新分区 dask 数据帧以减少滚动期间的改组
- javascript - jQuery:选择具有特定 HTML 标记的特定 DOM
- c# - C# - 从列表字典创建新列表
- reactjs - 有没有办法在反应组件上描述道具,以便用户可以更好地自动完成?
- laravel - nuxt nginx 设置中的单个 Laravel 端点
- c - C中的函数二等分方法-函数在任何一个区间内都不会改变符号