Python Numpy einsum klij-> kijl и kijl-> klij что они означают? - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь понять следующий код из https://github.com/rezazad68/BCDU-Net/blob/master/Retina%20Blood%20Vessel%20Segmentation/evaluate.py:

patches_imgs_test = np.einsum('klij->kijl', patches_imgs_test)

, а также следующее:

predictions = np.einsum('kijl->klij', predictions)

Я пытался найти einsum операнды klij->kijl и kijl->klij, но удача леди еще должна быть на моей стороне. Наиболее близкие, которые я получил (вероятно), следующие, которые не объясняют случаи с «4 символами»:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.einsum.html Понимание Einsum NumPy

Моя интуиция заключается в том, что это просто повороты изображений в зависимости от того, как смещаются персонажи. Я прав или близок к этому? Некоторые идеи будут оценены!

PS Документация numpy einsum убивает меня ..

1 Ответ

1 голос
/ 20 января 2020

Предоставленный оператор einsum эквивалентен (используя np.moveaxis):

 patches_imgs_test  = np.moveaxis(patches_imgs_test, 1, -1)

, за которым следует:

predictions = np.moveaxis(predictions, -1, 1)

По сути, перемещение Вторая ось до конца, а затем положить его обратно в результаты.

В данном случае это патчи изображений, сбрасываемых в нейронную сеть. Вторая и четвертая оси являются фактическими патчами, поэтому код помещает их в конец перед передачей в NN, в то время как первая и третья оси являются данными местоположения.

...