Я создаю игровую нейронную сеть, используя tf-агентов и tennflowflow 2.0 . Эти карты кодируются двумя способами (ранг одной карты, одна масть, конкатенация -> [13] + [4] = [17]), но я хочу, чтобы сеть изучала свои собственныевнутренняя кодировка карты (для этого вопроса: длина [4]). Итак, вот моя проблема:
У меня есть трехмерный массив игроков и обе их руки с shape=(6,2,17)
и двумерный массив общих карт с shape=(5,17)
. Я хочу применить операцию к отдельным картам игроков, в результате чего shape=(6, 2, 4)
и общие карты, дающие shape=(5,4)
, все с одинаковыми изученными весами и уклонами.
Для этого у меня естьнесколько идей и хотите знать, какая из них имеет смысл и почему:
- Использование Convolution1d
Это должно быть проще всего применить к определенному измерению, и его 2dэквивалент используется в автоэнкодерах, которые делают что-то похожее на то, что я хочу достичь здесь. Почему я думаю, что это не очень хорошая идея: для свёрток не важно, где находится информация, а где находится соседство, поэтому интуитивно не имеет смысла использовать их для моих целей. - Использование TimeDistributed
Это то, что я сейчас использую. Есть несколько проблем, связанных с этим, а именно то, что он всегда использует первое измерение после размера партии в качестве измерения времени, поэтому я должен изменить карту игрока до shape=(12,17)
, прежде чем использовать его, но гораздо большая проблема заключается в том, что онов настоящее время не поддерживается для сохранения в качестве сохраненной модели (см. этот выпуск github ), что делает его непригодным для моих целей в настоящее время.
Однако теоретически это должно работать, верно? Я могу применить плотный слой к каждой карточке отдельно, и другие измерения сохранятся, хотя название немного вводит в заблуждение, поскольку я не имею дело с данными, распределенными во времени. - Использование слоя Encoding
Это вариант, который я на самом деле не исследовал и не использовал раньше. Он должен быть предназначен для таких случаев использования, как этот, поэтому мой вопрос будет таким: это идеальное решение, может ли оно сохранить другие измерения (для игроков очень важно, чтобы я мог применить кодировку, а затем объединить их с информацией других игроков) иКак вы думаете, он может работать с моими векторами карт с двойным горячим кодированием?