Лучший слой для применения той же операции к определенному размеру тензора - PullRequest
0 голосов
/ 18 октября 2019

Я создаю игровую нейронную сеть, используя 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
    Это вариант, который я на самом деле не исследовал и не использовал раньше. Он должен быть предназначен для таких случаев использования, как этот, поэтому мой вопрос будет таким: это идеальное решение, может ли оно сохранить другие измерения (для игроков очень важно, чтобы я мог применить кодировку, а затем объединить их с информацией других игроков) иКак вы думаете, он может работать с моими векторами карт с двойным горячим кодированием?
...