python - 在 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
任何建议都将受到欢迎!
解决方案
永远不要使用循环。张量是为张量操作而制作的。
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])