我正在创建一个自动编码器神经网络来执行3D体积数据的语义分割。数据稀疏(只有约1%的体素代表实际结构被分类,而剩余的99%是无效/无/空)。虽然每个3D体积图像都是64x64x64体素,但每个体素图像都具有独特的结构化大小和形状,因此我无法将所有输入均匀地展平为特定指数。
目标是让神经网络对代表实际结构的每个体素进行分类(即1%)。目前,通过将全体积数据输出与完全标记输出进行比较,反向传播减少了损失。由于预测没有任何东西/虚空很容易学习,因此产生99%的人为高精度。我的目标是让损失函数不使用完整的体积数据,而只使用包含结构数据的1%体积数据。
我的问题是关于设计的一点,但是如果每个图像都是唯一的,那么如何减少神经网络的输出和标签只包括结构体素?
更多详情:
这是我目前的不完整代码以及我想要完成的伪代码:
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()来获得所需的缩减但还没有使用它。有什么想法吗?