我正在解决一个脑部病变分割问题,并尝试使用受以下代码启发的Unet实现:https://github.com/jocicmarko/ultrasound-nerve-segmentation。
其中一个问题是我试图克服的是类别平衡(非病变体素比病变体素多得多)。我尝试使用class_balance,但这没有起作用,所以现在我正在尝试使用sample_weight,但这也给我带来了各种错误。
我尝试的第一件事是将
其中一个问题是我试图克服的是类别平衡(非病变体素比病变体素多得多)。我尝试使用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
此外,如果您对如何处理类不平衡问题有建议,请告诉我。