【问题标题】:Regarding setting up the target tensor shape for sparse_categorical_crossentropy关于为 sparse_categorical_crossentropy 设置目标张量形状
【发布时间】:2016-12-30 23:11:23
【问题描述】:

我正在尝试使用多层编码器-解码器类型的网络。最后几层网络架构的截图如下。这就是我设置模型编译和训练过程的方式。

optimizer = SGD(lr=0.001, momentum=0.9, decay=0.0005, nesterov=False)
    autoencoder.compile(loss="sparse_categorical_crossentropy", optimizer=optimizer, metrics=['accuracy'])

model.fit(imgs_train, imgs_mask_train, batch_size=batch_size, nb_epoch=nb_epoch, verbose=1,callbacks=[model_checkpoint])

imgs_trainimgs_mask_train 的形状为 (2000, 1, 128, 128)imgs_train 代表原始图像,imgs_mask_train 代表蒙版图像。我正在尝试解决语义分割问题。但是,运行程序会产生以下错误消息,(我只保留主要相关部分)。

tensorflow.python.pywrap_tensorflow.StatusNotOK: Invalid argument: logits first dimension must match labels size.  logits shape=[4096,128] labels shape=[524288]                                                                                                      
         [[Node: SparseSoftmaxCrossEntropyWithLogits = SparseSoftmaxCrossEntropyWithLogits[T=DT_FLOAT, Tlabels=DT_INT64, _device="/job:localhost/replica:0/task:0/cpu:0"](Reshape_364, Cast_158)]]                                                                    

在我看来,sparse_categorical_crossentropy 的损失函数会导致当前 (imgs_train, imgs_mask_train) 形状设置出现问题。 Keras API 不包含有关如何设置目标张量的详细信息。任何建议都非常感谢!

【问题讨论】:

    标签: tensorflow keras


    【解决方案1】:

    我目前正在尝试解决同样的问题,据我所知,它需要目标类别的稀疏表示。这意味着整数作为目标标签,而不是 one-hot 编码的二进制类矩阵。

    关于您的问题,您的掩码中是否有类别,或者您是否只有有关对象轮廓的信息?有了轮廓信息,它就变成了像素级的二元损失,而不是分类损失。如果你有类别,你的解码器的输出应该有维度(None, number_of_classes, 128, 128)。在那你应该能够使用稀疏目标掩码,但我自己没有尝试过...... 希望有帮助

    【讨论】:

      猜你喜欢
      • 2017-08-17
      • 2017-12-19
      • 2019-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 2019-09-01
      • 1970-01-01
      相关资源
      最近更新 更多