我正在使用 tf-agents 和 tensorflow 2.0 创建一个纸牌神经网络。
这些卡以两种热方式编码(一种热编码卡等级,一种热编码服,级联-> [13] + [4] = [17]),但我想让网络学习自己的方式内部卡编码(此问题:长度[4])。这是我的问题:
我有一个三维数组的玩家,他们的手牌都用shape=(6,2,17)
,而二维数组的社区卡则是shape=(5,17)
。
我想对单个玩家卡进行操作,得到shape=(6, 2, 4)
和社区卡,得到shape=(5,4)
,所有这些都具有相同的学习权重和偏见。
为了完成此任务,我有一些想法,想知道其中哪些有意义,为什么:
- 使用 Convolution1d
这应该是最简单的应用于特定维度的方法,它的二维等效项用于自动编码器,其功能类似于我在此处要实现的功能。为什么我认为这不是一个好主意:卷积实际上并不是在乎信息的放置位置,而是在附近,所以从直觉上讲,将这些用于我的目的没有任何意义。
- 使用 TimeDistributed
这就是我目前正在使用的。这样做有两个问题,即它始终使用批处理大小之后的第一个维度作为时间维度,因此在使用它之前,我必须将玩家卡片重塑为shape=(12,17)
,但是更大的问题是当前无法保存为已保存的模型(请参见this github issue),因此目前无法用于我的目的。
但是,从理论上讲,这应该起作用,对吗?我可以对每张卡分别应用一个密集层,并保留其他尺寸,尽管名称有点误导,因为我不处理时间分布的数据。
- 使用编码层
这是我之前从未真正研究或使用过的选项。它应该用于这样的用例,所以我的问题是:这是理想的解决方案吗,它能否保留其他尺寸(对于播放器,至关重要的是,我可以应用编码并随后将其与其他播放器信息连接起来),您认为它可以与我的双一热编码卡矢量一起使用吗?