вычисление выходной формы для 3D CNN - PullRequest
0 голосов
/ 10 марта 2019

Как рассчитать форму слоев CNN и максимального пула?(написано в керасе)

model.add(Conv3D(128, (3, 3, 3), activation = "relu"))
model.add(MaxPooling3D((2, 2, 2)))
model.add(Conv3D(128, (3, 3, 3), activation = "relu"))
model.add(MaxPooling3D((2, 2, 2)))

Спасибо!Изменить: входная форма 39x100x100.

1 Ответ

1 голос
/ 10 марта 2019

Не зная точных входных размеров, невозможно сказать точный результат. Но можно рассчитать выходное измерение в терминах входного измерения. Формула такая же, как для 2D conv :

Out = (W−F+2P)/S+1

, где W - размер входного тома, F - размер ядра, S - шаг, а P - заполнение. Так как вы не определяете шаг или отступ, они по умолчанию равны S=1 и P="valid" (что завершает границу только необходимыми значениями для завершения возможного несоответствия между размерами ядра и входными размерами), упрощая уравнение чтобы:

Out = W - F + 1  

Итак, учитывая X, Y и Z в качестве входных измерений:

new_X = X - 3 + 1
new_Y = Y - 3 + 1
new_Z = Z - 3 + 1

Новый вывод будет (new_X, new_Y, new_Z, 128). Последний 128 из-за вашего количества фильтров. Следуя слою опроса, он следует той же формуле свертки. Поскольку вы не определили шаг, он будет уменьшать только одну единицу в каждом измерении:

polled_X = new_X - 2 + 1
polled_Y = new_Y - 2 + 1
polled_Z = new_Z - 2 + 1

Чтобы получить окончательный ввод, просто повторите вышеуказанные операции, чтобы получить следующий окончательный вывод:

final_X = ((((X - 3 + 1) - 2 + 1) - 3 + 1) - 2 + 1) = X - 6
final_Y = ((((Y - 3 + 1) - 2 + 1) - 3 + 1) - 2 + 1) = Y - 6
final_Z = ((((Z - 3 + 1) - 2 + 1) - 3 + 1) - 2 + 1) = Z - 6

Помните, что слой опроса не влияет на размерность сложенных фильтров, поэтому ваш конечный результат будет (X - 6, Y - 6, Z - 6, 128)

...