使用类别权重和分类交叉熵时遇到问题

时间:2019-02-01 17:56:14

标签: python class tensorflow keras

我正在使用Keras在许多256x256 2D图像中执行逐像素的多类分类。由于我拥有的数据和类的数量(32),我在训练期间使用图像生成器将数据馈送到网络中。生成器的主要目的是对我的地面真实情况进行一次热编码,最终尺寸为256x256x32(如果我事先尝试进行一次热编码,则会收到OOM错误)。

但是,当我在拟合模型时尝试使用class_weight设置时,出现一条错误消息,提示它不支持3维以上的尺寸目标。我已经将图像弄平了,所以输出是大小(批处理大小65536、32)。我不知道如何将它们制成2D。我无法使用sample_weight设置,因为model.fit_generator没有该设置。

这是我的数据生成器的代码。

def generator(features, labels, batch_size):
# Create empty arrays to contain batch of features and labels#
batch_features = np.zeros((batch_size, 256, 256, 1))
batch_labels = np.zeros((batch_size,256*256,32))
while True:
    for i in range(batch_size):
        # choose random index in features
        #index= random.choice(len(features),1)
        index=i
        batch_features[i] = features[index]
        batch_labels[i] = keras.utils.to_categorical(labels[index],num_classes=32)
    yield batch_features, batch_labels

1 个答案:

答案 0 :(得分:0)

您可以根据documentation

在生成器(自定义)中使用样本权重

generator:生成器或Sequence(keras.utils.Sequence)对象的实例,以便在使用多重处理时避免重复数据。发生器的输出必须是

a tuple (inputs, targets)
a tuple (inputs, targets, sample_weights).