Слой MPSCNNFullyConnected
дает изображение 1x1 в качестве вывода с 8192 каналами в вашем случае (что также является максимальным количеством каналов, поддерживаемых текстурой Metal).
Опция изменения формы будет принимать это изображение 1x1x8192 и выводить изображение 4x4 с 512 каналами. В Keras и т. Д. Это просто вопрос изменения шагов в базовом тензоре TF, но в Metal вам придется копировать данные.
Начиная с iOS 11.3, существует объект MPSNNReshape
, который может выполнять такую перестановку. Я не использовал его сам, но похоже, что вы просто даете ему исходное и конечное изображение (при кодировании этого ядра), и он сам поймет, как копировать данные между ними.
Однако ... MPSNNReshape
не представляется узлом , который может быть помещен в MPSNNGraph
, поскольку он расширяет MPSCNNKernel
, а не MPSNNFilterNode
. Это похоже на недосмотр ...
Таким образом, вам нужно будет создать два графика, один до этого узла изменения формы, а другой - с остальным кодом. Затем запустите первый график, закодируйте узел изменения формы, используя выходные данные этого первого графика, затем запустите второй график, используя выходные данные узла изменения формы. Это должно быть достаточно быстро, но это немного раздражает, так как вы не можете сделать все это в одном графике.