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

Python实现ANN时的变量可见性/作用域问题:训练进度保存疑问

关于神经网络训练进度保存的疑问解答

嘿,这个问题问得特别精准!我仔细看了你提到的那段神经网络代码,核心原因其实藏在Python对可变对象的引用传递机制里,咱们一步步理清楚:

  • 先搞懂network的本质:在这段代码里,network是一个列表,里面的每一层神经元都是包含weights(权重)和biases(偏置)的结构,而weights、biases本身又都是列表——这些全都是Python里的可变对象。当你把network传入backpropagate函数时,函数拿到的不是整个network的副本,而是这个对象在内存中的引用。

  • 函数内部的修改直接作用于原对象:虽然backpropagate没有返回network,也没把它声明为全局变量,但函数里的操作都是直接修改network内部的可变元素。比如代码里会计算权重的更新值,然后直接执行类似network[i]['weights'][j] -= ...的操作——这种修改是直接在原对象的内存空间里进行的,外部的network变量自然能同步看到这些变化。

  • 举个极简的例子帮你理解:

    def update_list(my_lst):
        # 修改列表的第一个元素
        my_lst[0] = 999
    
    original_lst = [1, 2, 3]
    update_list(original_lst)
    print(original_lst)  # 输出 [999, 2, 3]
    

    你看,函数没返回列表,也没全局声明,但外部的列表还是被修改了——和你遇到的神经网络训练的情况完全一致,都是因为可变对象的引用传递特性。

  • 总结一下:训练循环里每次调用backpropagate(network, x, y),都是直接在原network的基础上更新权重和偏置,不需要返回,因为修改的是同一个对象的内部状态,所以训练进度自然就保存下来了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:06:50