Извлечение части функции сверточной нейронной сети с помощью маски - PullRequest
0 голосов
/ 25 декабря 2018

Итак, у меня есть последняя особенность формы (1, 512, 90, 160) с глубиной 512 (3-е измерение).Я создал двумерную двоичную маску из основного изображения истинной формы (90, 160).Я пытаюсь применить эту маску к функции, чтобы извлечь только часть своей функции вручную.Однако из-за несоответствия форм объекта и маски я получаю ошибку индекса.

С np.expand_dims() я сделал форму маски (1,1,90,160).Теперь, как я могу сложить маску, чтобы получить форму (1, 512, 90, 160)?

1 Ответ

0 голосов
/ 25 декабря 2018

У вас есть 2 варианта:

Создать 3d-маску -

final = np.ones((1,512,90,160))
final2 = np.copy(final)
mask = np.random.randint(1,10,size = (1,90,160)) > np.random.randint(1,10,size = (1,90,160))

masked = np.copy(final)
masked[:,0,:,:] = np.logical_and(masked[:,0,:,:],mask)
masked = np.logical_and.accumulate(masked,axis = 1)
np.putmask(final,masked == False, 0)

Приведенное выше создаст 3d-маску и использует ее для маскировки final.

* 1008.* другой вариант, намного проще, просто умножить:
np.multiply(final,mask)

NP обрабатывает размеры и даст вам замаскированную версию.

Вы можете проверить это с помощью:

(np.multiply(final2,mask) == final).all()
...