Я создаю нейронную сеть с автоматическим кодированием для выполнения семантической сегментации трехмерных объемных данных.Данные редки (только около 1% вокселей представляют фактическую классифицируемую структуру, в то время как остальные 99% являются пустыми / пустыми / пустыми).Хотя каждое трехмерное объемное изображение имеет размер 64x64x64 вокселей, каждое имеет уникальный структурированный размер и форму, поэтому я не могу равномерно сгладить весь ввод для определенных индексов.
Цель состоит в том, чтобы нейронная сеть классифицировала каждый воксел, который представляет фактическийструктура (это 1%).В настоящее время обратное распространение сокращает потери, сравнивая полный объемный вывод данных с полным помеченным выходом.Это дает искусственно высокую точность 99%, так как предсказать ничто / пустоту легко.Моя цель состоит в том, чтобы функция потерь не использовала полные объемные данные, а использовала только 1% объемных данных, содержащих структурные данные.
Мой вопрос немного о завершении проектирования, но какуменьшить выход нейронной сети и меток, чтобы включить только структурированные воксели, учитывая тот факт, что каждое изображение будет уникальным?
Подробнее:
- Ввод / Вывод / Метки ввсе сети (объемные данные 3D): 64x64x64 вокселей
- Входные данные всегда равны нулю в пустых вокселях (99%) и отличны от нуля в вокселях структуры (1%).
- Данные метки всегда равны нулю в пустых вокселях и метке класса 1/2/3/4 в структуре вокселей.
Вот мой текущий неполный код вместе с psuedocode того, что я пытаюсь выполнить:
prediction = convolutional_neural_network(x) # Dimentions: (? x 64 x 64 x 64)
zero_tensor = tf.constant(0, dtype=tf.float32)
y_structured_data = tf.not_equal(y, zero_tensor)
# Use y_structured_data on prediction-Tensor to find structure voxels
# reduce both Tensors to eliminate empty space. (Possibly using y_structured_data)
# Feed those reduced Tensors to the loss function.
loss = tf.nn.sigmoid_cross_entropy_with_logits(logits=reduced_prediction, labels=reduced_y)
Я пытался использовать tf.boolean_mask () и tf.where (), чтобы получить желаемое сокращение, но пока не заставил это работать.Есть мысли?