我正在研究脑部病变分割问题,我正在尝试使用以下代码实现的Unet:https://github.com/jocicmarko/ultrasound-nerve-segmentation
我要克服的一个问题是课堂平衡(更多的非病变体素而不是病变体素)。我尝试使用class_balance但是没有用,所以现在我正在尝试使用sample_weight,这也给了我各种错误。
我尝试的第一件事就是将sample_weight_mode
设置为temporal
并输入与目标数据形状相同的权重矩阵:
target_data.shape -> (n_samples,512 rows/pixels, 512 cols/pixels, 1 channel)
Weight_map.shape -> (n_samples,512 rows/pixels, 512 cols/pixels, 1 channel)
输出:
_ValueError:找到一个shape_weight数组,其形状为(100,512,512,1)。为了使用时间步长样本加权,您应该传递2D sample_weight数组。*
我尝试的第二件事是压扁样本数组,使其形状如下:
Weight_map.shape -> (n_samples,512x512x1).
输出:
ValueError:找到一个带有形状(100,262144)的sample_weight数组,用于形状为(100,512,512,1)的输入。 sample_weight无法广播。*
接下来,我尝试遵循uschmidt83(here)的建议,并将模型的输出与相应的目标数据展平。
last_layer = keras.layers.Flatten()(second_last_layer)
target_data.shape -> (n_samples,512x512x1).
Weight_map.shape -> (n_samples,512x512x1).
输出:
ValueError:为具有shape(100,262144)的输入找到sample_weight数组。时间步长样本加权(使用sample_weight_mode =“temporal”)仅限于至少为3D的输出,即具有时间维度的输出。*
奇怪的是,即使我设置了sample_weight=None
,我仍然会得到与上面相同的错误。
有关如何修复此sample_weight错误的任何建议?以下是重现错误的基本代码: https://gist.github.com/andreimouraviev/2642384705034da92d6954dd9993fb4d
另外,如果您有关于如何解决课堂失衡问题的建议,请告诉我。
答案 0 :(得分:0)
权重必须是一维数组,其中目标有一个额外的通道,如输入。
您可以尝试使用以下尺寸的sample_weight_mode=temporal
:
input_image -> (n_samples, 512, 512, 1)
target_label -> (n_samples, 262144, 1)
weight_map -> (n_samples, 262144)
以下链接包含有关班级权重的信息: https://github.com/fchollet/keras/issues/2115