the below code is my main code block
iter_pos=0
max_iter=120
iter_cost=[]
parameters=generate_parameters()
while iter_pos<max_iter:
y_pred = forward_prop(x_train, parameters)
cost_value = cost(y_hat=y_pred, y=multi_class_y_train)
iter_cost.append(cost_value)
delta_para = back_prop(parameters, multi_class_y_train, y_pred)
parameters=update_parameters(parameters,delta_para)
print(iter_pos, cost_value)
iter_pos+=1
now this is my forward prop algorithm
def forward_prop(x_input, parameter):
a=x_input
nodes_values[f'l{1}']=a
for pos in range(1,n_layers):
w = parameter[f'w{pos}']
b=parameter[f'b{pos}']
z=np.dot(w,a)+b
a=sigmoid(z)
nodes_values[f'l{pos+1}']=a
return a
now comes the main back prop I guess I have done mistake here only
def back_prop(parameters, y_true, y_pred):
delta = (nodes_values[f'l{n_layers}']-y_true)
delta_para={}
delta_para[f'delW{n_layers-1}']=np.dot(delta, nodes_values[f'l{n_layers-1}'].T)*lr/m
delta_para[f'delB{n_layers-1}']=(np.sum(delta, axis=1, keepdims=True))*lr/m
for pos in range(n_layers-1,1,-1):
a=nodes_values[f'l{pos}']
x=nodes_values[f'l{pos-1}']
delta=np.dot(parameters[f'w{pos}'].T, delta)*((a)*(1-a))
delta_para[f'delW{pos-1}']=np.dot(delta, x.T)*lr/m
delta_para[f'delB{pos-1}']=np.sum(delta, axis=1, keepdims=True)*lr/m
return delta_para
after getting all my gradients I am going to update them
def update_parameters(parameters, delta_para):
for pos in range(n_layers-1,0,-1):
parameters[f'w{pos}']-=delta_para[f'delW{pos}']
parameters[f'b{pos}']-=delta_para[f'delB{pos}']
return parameters
these are my main code blocks if required I will provide my complete code, please someone suggest what might be the issue