ValueError: x и y должны иметь одинаковое первое измерение, но иметь формы (101,) и (100,) - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь запустить скорость обучения и получаю следующее сообщение об ошибке: ValueError: x и y должны иметь одинаковое первое измерение, но иметь формы (101,) и (100,). Если я сделаю у 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()

1 Ответ

0 голосов
/ 01 апреля 2020

Во-первых, у вас должны быть одинаковые размеры массива, поэтому измените эту строку:

iteration_list1= list(range(0,n+1))

на

iteration_list1= list(range(0,n))

Затем, я думаю, вам следует удалить строку

plt.ylim(0,50)

, чтобы позволить библиотеке установить лучший масштаб y. Вы видите «прямую линию», потому что вариации очень малы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...