我目前正在使用在Keras中实施的U-Net(https://arxiv.org/pdf/1505.04597.pdf)来分割显微镜图像,并希望利用出版物中介绍的权重图 .

不幸的是我无法将重量图(形状[719,656,656,1]的数组]加载到Unet中 . 训练,标签和重量图数据都存储在单独的npy文件中,包含每个719个656x656大小的图像当将训练和标签数据加载到Unet中时,每次运行需要[3,656,656,1],但我不知道如何将权重图加载到具有相同形状的模型中 .

这些是我正在使用的代码:

def get_unet(self, weights):

      ... 

      model.compile(optimizer=Adam(lr=1e-4),   loss=self.weighted_pixelwise_crossentropy(weights), metrics=['accuracy'])


def weighted_pixelwise_crossentropy(self, class_weights):

        class_weights = K.variable(class_weights)

        def loss(y_true, y_pred):
            _epsilon = tf.convert_to_tensor(epsilon, y_pred.dtype.base_dtype)
            y_pred = tf.clip_by_value(y_pred, _epsilon, 1. - _epsilon)

            return - tf.reduce_sum(tf.multiply(y_true * tf.log(y_pred), class_weights))

        return loss

但我一直收到此错误消息:

InvalidArgumentError (see above for traceback): Incompatible shapes: [3,656,656,1] vs. [719,656,656,1]

如何将重量图数组(在将其转换为张量后)批量加载到Unet中,以便使用权重贴图?

几天来我一直在互联网上寻找线索,但到目前为止还没有找到解决这个问题的方法 . 我非常感谢任何帮助 .