Python ValueError:x和y必须具有相同的第一维度,但具有形状(101、)和(100、)

Python ValueError:x和y必须具有相同的第一维度,但具有形状(101、)和(100、),python,matplotlib,Python,Matplotlib,我正在尝试运行一个学习速率,并且得到了这个错误值error:ValueError:x和y必须具有相同的第一维度,但具有形状(101,)和(100,)。如果我做y 101,它会给出一条直线 def g(x): return x**4 - 4*x**2 +5 def dg(x): return 4*x**3 - 8*x def gradient_descent(derivative_func, initial_guess,multiplier=0.01,precision=0.0

我正在尝试运行一个学习速率,并且得到了这个错误值error:ValueError:x和y必须具有相同的第一维度,但具有形状(101,)和(100,)。如果我做y 101,它会给出一条直线

def g(x):
    return x**4 - 4*x**2 +5

def dg(x):
    return 4*x**3 - 8*x

def gradient_descent(derivative_func, initial_guess,multiplier=0.01,precision=0.0001, max_iter=500):

    new_x= initial_guess
    precision= 0.0001
    x_list= []
    slope_list= []

    for n in range(max_iter):

        previous_x= new_x
        gradient= derivative_func(previous_x) #The slope of the graph(Error)
        new_x= previous_x - multiplier *gradient #The Learning rate
        step_size= abs(new_x - previous_x)
        x_list.append(new_x)
        slope_list.append(derivative_func(new_x))
       # print (step_size)
        if step_size < precision:
            break
    return new_x, x_list, slope_list

n=100
local_min, list_x, deriv_list= gradient_descent(derivative_func=dg,initial_guess=0.1, multiplier=0.0005,precision=0.0001,max_iter=n)



#Plotting Reduction in cost for each iteration
plt.figure(figsize=[15,5])

plt.xlim(0,n)
plt.ylim(0,50)
plt.xlabel('Nr. of Iterations', fontsize= 16)
plt.ylabel('Cost', fontsize=16)
plt.title('Effect of Learning Rate', fontsize=16, c= 'g')

#Getting X-axis values:

iteration_list1= list(range(0,n+1))
iteration_list= np.array(iteration_list1)

#Getting y-axis values

low_values= np.array(list_x) 

plt.plot(iteration_list, g(low_values),linewidth=6,c='green')
plt.show()
def g(x):
返回x**4-4*x**2+5
def dg(x):
返回4*x**3-8*x
def梯度下降(导数函数,初始猜测,乘数=0.01,精度=0.0001,最大值=500):
新的\u x=初始的\u猜测
精度=0.0001
x_列表=[]
坡度表=[]
对于范围内的n(最大值):
以前的x=新的x
梯度=导数_func(上一个_x)#图形的斜率(误差)
新的x=先前的x-乘数*梯度#学习率
步进尺寸=绝对值(新的步进尺寸-以前的步进尺寸)
x_list.append(新_x)
slope_list.append(派生函数(新函数))
#打印(步长)
如果步长小于精度:
打破
返回新的x、x列表、坡度列表
n=100
局部最小值,列表x,导数列表=梯度下降(导数函数=dg,初始猜测=0.1,乘数=0.0005,精度=0.0001,最大值=n)
#绘制每个迭代的成本降低图
plt.图(figsize=[15,5])
plt.xlim(0,n)
plt.ylim(0,50)
plt.xlabel('迭代次数',fontsize=16)
plt.ylabel('Cost',fontsize=16)
plt.title(“学习率的影响”,fontsize=16,c=g”)
#获取X轴值:
迭代_list1=列表(范围(0,n+1))
迭代列表=np.array(迭代列表1)
#获取y轴值
低_值=np.数组(列表_x)
plt.plot(迭代列表,g(低值),线宽=6,c='绿色〕)
plt.show()

首先,您必须具有相同的数组维度,因此更改此行:

iteration_list1=list(范围(0,n+1))

iteration_list1=list(范围(0,n))
那么,我认为你应该删除这一行

plt.ylim(0,50)

让库设置最佳y比例。您会看到一条“直线”,因为变化非常小。

谢谢。删除“+1”将使代码运行,但这将是一条直线。我发现它是一条直线的原因是因为初始猜测值太低。