具有固定数量输入和可变数量输出的 ML 算法

数据挖掘 机器学习 算法
2022-02-12 23:15:12

我正在尝试解决以下问题:

假设我有一个国际象棋位置:

在此处输入图像描述

我将每个正方形编码为长度为 13 的单热编码向量

  • 空方格的索引 0
  • 白兵的索引 1
  • 黑兵的索引 2
  • 白人主教的索引 3
  • 黑人主教的索引 4
  • ETC..

因此,最后我有一个形状为 64x13 的矩阵,我打算将其用作模型的输入。我想创建一个能够将矩阵映射到位置的FEN 表示的模型。MM

给定上面的例子,位置的FEN表示是:1b1N4/7k/4b3/8/8/8/3P4/3K4

FEN 字符串的长度不是固定的。我找不到一个接受固定数量的输入并产生可变数量的输出的 ML 算法。在这种情况下我可以使用什么机器学习算法?RNN 适合该任务吗?

PS我确实明白,只编写一个函数将映射到 FEN 是微不足道的,但我不想要它,我希望模型从数据中学习它。M

1个回答

RNN(和 LSTM / GRU)可以生成可变长度的输出。例如,文本的生成。

在此类问题中,RNN 旨在生成下一个字符(它跟踪过去生成的字符)。RNN 应生成“输出结束”字符以指示序列结束。

例如:https ://chunml.github.io/ChunML.github.io/project/Creating-Text-Generator-Using-Recurrent-Neural-Network/

必须更改以下方法:

def generate_text(model, length):
    ix = [np.random.randint(VOCAB_SIZE)]
    y_char = [ix_to_char[ix[-1]]]
    X = np.zeros((1, length, VOCAB_SIZE))
    for i in range(length):
        X[0, i, :][ix[-1]] = 1
        print(ix_to_char[ix[-1]], end="")
        ix = np.argmax(model.predict(X[:, :i+1, :])[0], 1)
        y_char.append(ix_to_char[ix[-1]])
    return ('').join(y_char)

到 :

     stop_characters = set(['.','?'])
..
..
     ix = np.argmax(model.predict(X[:, :i+1, :])[0], 1)
     predicted_char=ix_to_char[ix[-1]]
     if(predicted_char in stop_characters ):
         break
     y_char.append(predicted_char)