首页 > 解决方案 > 在 Lambda 层中处理批次的最佳方法是什么?

问题描述

我用 Keras 创建了一个神经网络,并添加了一个 Lambda 层来执行一些计算,但它在推理上的表现很差。

我能够使用一批一个输入成功地进行推理,并添加了一个循环来处理多个输入。一切正常,但性能有点差。我认为使用更大的批次会使事情变得更快。我的问题是我是否正确处理批次(真的有必要使用另一个循环吗?)因为我没有找到任何更深入地处理这个主题的 keras 或 tensorflow 文档。下面是一个结构类似于我在 Lambda 层中使用的代码的代码。

def GenericFunc(x, batch=10, channels=64):
    y, group = [], []
    for i in range(batch):
        for j in range(channels):
            y.append(backend.sum(x[0, :, :, j]))
        group.append(tf.convert_to_tensor(y, dtype=np.float32))
        y = []
    yy = backend.stack(group, axis=0)
    tensor_stack = backend.reshape(yy, [batch,channels])
    return tensor_stack

任何建议都将受到欢迎!

标签: pythontensorflowkeras

解决方案


永远不要使用循环。张量是为张量操作而制作的。

def GenericFunc(x):
    y = backend.sum(x, axis=1)
    y = backend.sum(y, axis=1)
    return y

可能也适用于

def GenericFunc(x):
    return backend.sum(x, axis=[1,2])

推荐阅读