Keras sample_weight数组错误

时间:2017-06-25 14:22:56

标签: neural-network deep-learning keras image-segmentation data-science

我正在研究脑部病变分割问题,我正在尝试使用以下代码实现的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

另外,如果您有关于如何解决课堂失衡问题的建议,请告诉我。

1 个答案:

答案 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