我尝试在像素分割任务中使用ImageGenerator
的样本加权。
sample_weight
是一个数组(634,64,64).flow
为具有相同seed=42
和batch_size=32
sample_weight_mode='temporal'
Unet模型中的最后3层是:
conv2d_19 (Conv2D) (None, 5, 64, 64) 325
dropout_18[0][0]
conv2d_20 (Conv2D) (None, 1, 64, 64) 6
conv2d_19[0][0]
activation_1 (Activation) (None, 1, 64, 64) 0
conv2d_20[0][0]
这会引发错误:
ValueError: Found a sample_weight array with shape (634, 64, 64). In order to use timestep-wise sample weighting, you should pass a 2D sample_weight array.
如果我重塑sample_weight
到(634,4096),我会得到:
ValueError: Found a sample_weight array with shape (634, 4096) for an input with shape (32, 1, 64, 64). sample_weight cannot be broadcast.
这是我对如何使用ImageGenerator
的误解还是无法处理这种特殊情况?
如果我不使用样本权重,则运行模型并且不会抛出任何错误。
Keras 2.0.4,Theano 0.9
答案 0 :(得分:1)
Keras样本权重在默认模式下将1D阵列(每个特征一个权重)作为输入,在时间模式下作为2D阵列。时间模式可能适合您,但您需要进行以下更改。基本上,Keras不支持3D权重,因此您必须在输入处展平64x64图像,并在卷积图层之前将张量重塑为2D。
1)将sample_weight重塑为634,4096
2)添加一个输入层,接受4096像素长的平坦图像:Keras现在接受每像素权重,将像素视为时间序列(1D信号)
3)在第一个2D卷积之前添加一个Reshape图层