Keras的样本权重数组错误

3
我正在解决一个脑部病变分割问题,并尝试使用受以下代码启发的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: 发现形状为 (100, 512, 512, 1) 的样本权重数组。如果要使用逐时间步的样本加权,您应该传递一个二维样本权重数组。*

我尝试的第二件事是将样本数组展平,使其形状为:

Weight_map.shape -> (n_samples,512x512x1).

输出:

数值错误: 找到了一个形状为 (100, 262144) 的样本权重数组,而输入的形状为 (100,512,512,1)。无法广播样本权重。

接下来,我尝试按照 uschmidt83 的建议(在此处)将我的模型输出与相应的目标数据平铺(flattening)。

last_layer = keras.layers.Flatten()(second_last_layer)

target_data.shape -> (n_samples,512x512x1).
Weight_map.shape -> (n_samples,512x512x1).

输出:

数值错误:在形状为(100,262144)的输入中找到了一个sample_weight数组。时间步加权(使用sample_weight_mode="temporal")仅限于至少具有3D的输出,即具有时间维度的输出。

奇怪的是,即使我将sample_weight=None,我仍然得到与上面相同的错误。

如何解决这个sample_weight错误?以下是复现错误的基本代码:https://gist.github.com/andreimouraviev/2642384705034da92d6954dd9993fb4d

此外,如果您对如何处理类不平衡问题有建议,请告诉我。

1个回答

1

重量需要是一个1D数组,而目标有一个额外的通道,就像输入一样。

您可以尝试使用以下维度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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接