首页 > 解决方案 > 在python中调用函数后变量发生变化

问题描述

我最近一直在为 python 中的一个项目编写一些代码,我对从这段代码中得到的输出感到困惑

def sigmoid(input_matrix):
    rows = input_matrix.shape[0]
    columns = input_matrix.shape[1]
    for i in range(0,rows):
        for j in range(0,columns):
            input_matrix[i,j] = (1 / (1 + math.exp(-(input_matrix[i,j]))))
    return input_matrix

def feed_forward(W_L_1 , A_L_0 , B_L_1):
    weighted_sum = np.add(np.dot(W_L_1,A_L_0), B_L_1)
    activation = sigmoid(weighted_sum)
    return [weighted_sum,activation]

a = np.zeros((1,1))
b = feed_forward(a,a,a)
print(b[0])
print(b[1])

当我打印 b[0] 和 b[1] 时,即使 b[0] 应该等于 0,也会给出 0.5 的值。此外,当我放置 '''weighted_sum = np.add(np.dot( W_L_1,A_L_0), B_L_1)''' 在“激活”行之后再次提供正确的结果。就好像“激活”行改变了加权和值的值。想知道是否有人可以对此有所了解,我可以解决这个问题,但对为什么会发生这种情况很感兴趣。谢谢!!

标签: pythonfunctionnumpy

解决方案


在内部sigmoid,您正在更改作为参数传递的矩阵的值,在这一行中:

input_matrix[i,j] = ...

如果您想防止这种情况发生,请在调用之前创建矩阵的副本sigmoid,并像这样调用它sigmoid(copy_of_weighted_sum)


推荐阅读