python - 提高分类交叉熵在四维预测和目标上的性能

标签 python tensorflow machine-learning keras

我有一个在 tensorflow 中实现的神经网络,它获取一批图像并预测形状为 (batch_size, 9, 9, 10) 的张量

对于批处理中的每个图像,目标(和预测)如下所示。 我们预测宽度为 9、高度为 9、深度为 10 的图像。每个像素的深度对应一个类,因此我们有 10 个类。

所以例如使用softmax对像素(0,0)的预测如下所示 [0, 0.8 ,0 ,0 ,0 ,0 ,0.2 ,0 ,0,0] 像素(0,0)的目标看起来像这样 [0, 1,0,0,0,0,0,0,0]

我想在这两个张量之间使用经典交叉熵。

目前我的损失是这样实现的:

def calculate_loss(prediction, target):
    '''
    prediction and target have shape (batch_size, 9, 9, 10)
    '''
    loss = 0
    for batch in range(0, BATCH_SIZE):
        for width in range(0,9):
            for heigth in range(0,9):
                loss += tf.losses.categorical_crossentropy(target[batch][width][height] , prediction[batch][width][height])
return loss

但是对于较高的批量大小 (1024),此计算需要 20 秒。 这实在是太慢了。 在tensorflow/keras中是否有任何已经实现的功能可以提高这种损失的性能? 或者你知道我是否可以更改代码以提高性能?

最佳答案

tf.nn.softmax_cross_entropy_with_logits(target, prediction)

就是答案。 然后我可以减少输出值的总和以获得相同的结果。 不要忘记删除模型中的 sofmax 层。

关于python - 提高分类交叉熵在四维预测和目标上的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59456862/

相关文章:

python - 在 python 中格式化输出

python - 检测训练集的频率

android - 通过 Kivy 在 Android 上运行 Tensorflow

python - 将索引选择的 numpy 数组添加到另一个具有重叠索引的 numpy 数组

linux - 无法将tensorflow升级到1.3.0

python - 用我自己的数据进行tensorflow对象检测,你能帮我吗?

python - 结合多个表的MySQL查询

python - 非常大的集合的 SQLAlchemy 集合成员资格

tensorflow - 让 keras LSTM 层接受两个输入?

machine-learning - 为什么深度残差网络中的每个 block 都有两个卷积层而不是一个?