Python 函数返回错误值

Python function returning wrong value

我在 python 中有一个函数(梯度下降),return 我有一些值:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


def read_data(file):
    df = pd.read_excel(file)
    x_data= np.array(df['X_axis']) 
    y_data = np.array(df['Y_axis']) 

    return x_data,y_data 


x_data ,y_data = read_data('path\file')

alpha= 10**-8

#Auxiliaries Functions
...

函数如下:

def gradient(x_axis,y_axis):

    current_iteration = 0
    iterations_number= 100

    #Initial values
    #I guess that the problem is here. When I print those initial 
    #values,inside the function, they are different from what they should be   


    A1_inicial = y_axis[0] 
    A2_inicial = y_axis[-1] 
    x0_inicial = np.mean(x_axis) 
    dx_inicial = (np.std(x_axis))   


    while current_iteration < iterations_number:
        sum_A1 = 0
        sum_A2 = 0
        sum_dx = 0
        sum_x0 = 0


       for x_values,y_values  in zip(x_axis, y_axis):
            sum_A1 += derivada_A1(A1_inicial,A2_inicial,x0_inicial,dx_inicial,x_values,y_values  )
            sum_A2 += derivada_A2(A1_inicial,A2_inicial,x0_inicial,dx_inicial,x_values,y_values  )
            sum_dx += derivada_dx(A1_inicial,A2_inicial,x0_inicial,dx_inicial,x_values,y_values  )
            sum_x0 += derivada_x0(A1_inicial,A2_inicial,x0_inicial,dx_inicial,x_values,y_values  )



            A1_inicial = A1_inicial - (alpha* sum_A1 )
            A2_inicial = A2_inicial - (alpha* sum_A2 )
            x0_inicial = x0_inicial - (alpha* sum_x0 )
            dx_inicial = dx_inicial - (alpha* sum_dx )



        return A1_inicial,A2_inicial,x0_inicial,dx_inicial
        current_iteration+=1

所以,问题是,每当我使用这个函数时,我 returned 的值都是错误的。我知道他们错了,因为我有可以比较的真实价值。

以下是我使用函数的方式:

new_y = []

A1_inicial,A2_inicial,x0_inicial,dx_inicial = gradient(x_axis,y_axis)

for x in x_axis:
    new_y.append(A2_inicial + ((A1_inicial - A2_inicial) /(1+np.exp((x- x0_inicial)/dx_inicial))))

print("A1: {}".format(A1_inicial))
print("A2: {}".format(A2_inicial))
print("X0: {}".format(x0_inicial))
print("DX: {}".format(dx_inicial))

而且我知道如果我撤销这个函数,就像这样:

current_iteration = 0
iterations_number= 100


A1_inicial = y_axis[0] 
A2_inicial = y_axis[-1] 
x0_inicial = np.mean(x_axis) 
dx_inicial = (np.std(x_axis))   


while current_iteration < iterations_number:
    sum_A1 = 0
    sum_A2 = 0
    sum_dx = 0
    sum_x0 = 0


    for x_values,y_values in zip(x_axis, y_axis):
        sum_A1 += derivada_A1(A1_inicial,A2_inicial,x0_inicial,dx_inicial,x_values,y_values  )
        sum_A2 += derivada_A2(A1_inicial,A2_inicial,x0_inicial,dx_inicial,x_values,y_values  )
        sum_dx += derivada_dx(A1_inicial,A2_inicial,x0_inicial,dx_inicial,x_values,y_values  )
        sum_x0 += derivada_x0(A1_inicial,A2_inicial,x0_inicial,dx_inicial,x_values,y_values  )

    A1_inicial = A1_inicial - (alpha* sum_A1 )
    A2_inicial = A2_inicial - (alpha* sum_A2 )
    x0_inicial = x0_inicial - (alpha* sum_x0 )
    dx_inicial = dx_inicial - (alpha* sum_dx )

然后:

new_y = []


for x in x_axis:
    new_y.append(A2_inicial + ((A1_inicial - A2_inicial) /(1+np.exp((x- x0_inicial)/dx_inicial))))

print("A1: {}".format(A1_inicial))
print("A2: {}".format(A2_inicial))
print("X0: {}".format(x0_inicial))
print("DX: {}".format(dx_inicial))

它有效,为我提供了正确的值,但我不知道该函数有什么问题,为什么它不起作用。

感谢您的帮助!

在您的梯度函数中,在递增 current_iteration 变量之前有 return 语句。所以它永远不会增加。函数在 return.

处终止

在 return 语句之前添加 current_iteration 增量符,并在 while 循环结束后添加 return 语句。