You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JAX中使用tree_reduce归约同结构列表组成的列表?

问题分析与解决

你代码中的核心问题是is_leaf=True的错误设置:这个参数会让JAX将所有嵌套层级的元素(包括整个子列表)识别为叶子节点,导致初始值0和子列表(比如list_1)直接相加,触发类型不匹配的报错。而且tree_reduce默认会递归遍历嵌套结构,自动将JAX数组视为叶子节点,不需要手动指定is_leaf。

以下是两种正确实现同结构子列表求和/求积的方式:

方式一:用tree_map直接实现元素级合并(推荐)

这种方式更直观,适合处理多个同结构树的对应元素合并:

import jax
import jax.numpy as jnp

list_1 = [
    [jnp.asarray([1]), jnp.asarray([2, 3])],
    [jnp.asarray([4]), jnp.asarray([5, 6])],
]

list_2 = [
    [jnp.asarray([7]), jnp.asarray([8, 9])],
    [jnp.asarray([10]), jnp.asarray([11, 12])],
]
    
list_of_lists = [list_1, list_2]

# 对所有同位置的叶子节点求和
reduced_sum = jax.tree_util.tree_map(lambda *args: jnp.sum(jnp.stack(args)), *list_of_lists)

# 如果要实现求积,替换为以下代码
reduced_prod = jax.tree_util.tree_map(lambda *args: jnp.prod(jnp.stack(args)), *list_of_lists)

# 验证求和结果
print(reduced_sum)
# 输出:
# [[Array([8], dtype=int32), Array([10, 12], dtype=int32)], [Array([14], dtype=int32), Array([16, 18], dtype=int32)]]

方式二:用tree_reduce实现累积合并

如果必须使用tree_reduce,需要定义一个能合并两个同结构树的函数,同时初始值要与子树结构完全匹配:

import jax
import jax.numpy as jnp

list_1 = [
    [jnp.asarray([1]), jnp.asarray([2, 3])],
    [jnp.asarray([4]), jnp.asarray([5, 6])],
]

list_2 = [
    [jnp.asarray([7]), jnp.asarray([8, 9])],
    [jnp.asarray([10]), jnp.asarray([11, 12])],
]
    
list_of_lists = [list_1, list_2]

# 定义合并两个同结构树的函数:对应叶子节点相加
def merge_sum(tree_a, tree_b):
    return jax.tree_util.tree_map(lambda a, b: a + b, tree_a, tree_b)

# 生成与子树同结构的初始零值
initial_sum_tree = jax.tree_util.tree_map(jnp.zeros_like, list_of_lists[0])

# 累积合并所有子树求和
reduced_sum = jax.tree_util.tree_reduce(merge_sum, list_of_lists, initializer=initial_sum_tree)

# 求积的话,修改合并函数和初始值
def merge_prod(tree_a, tree_b):
    return jax.tree_util.tree_map(lambda a, b: a * b, tree_a, tree_b)

initial_prod_tree = jax.tree_util.tree_map(lambda x: jnp.ones_like(x), list_of_lists[0])
reduced_prod = jax.tree_util.tree_reduce(merge_prod, list_of_lists, initializer=initial_prod_tree)

内容的提问来源于stack exchange,提问作者Gilfoyle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 11:35:00