Я новичок в Python и изучаю глубокое обучение, поэтому я создал базовый код нейронной сети с использованием Python.Есть один нейрон с входными значениями (от 1 до 49) и одним выходом как sin(input)
.Все, что я сделал что-то как:
ввод как:
array([[ 1.],
[ 2.],
[ 3.],
[ 4.],
[ 5.],.....[49]]
вывод как:
array([[ 0.84147098],
[ 0.90929743],
[ 0.14112001],
[-0.7568025 ],.....]
Полный код:
import numpy as np
import pandas as pd
data=pd.read_excel("C:/Users/neural_network.xlsx")
total_rows=data.shape[0]
np.seterr(divide='ignore', invalid='ignore')
def sigmoid(x):
d=(np.exp(x)/(1+np.exp(x)))
return d
def derivative_sigmoid(x):
derivative=x/(1-x)
return derivative
epoch=5000
hidden_layer=3
input_neurons=1
output_neurons=1
learning_rate=0.1
input_array=data['input'].values.reshape(total_rows,1)
input_array=input_array.astype(np.float64)
output_array=data['output'].values.reshape(total_rows,1)
output_array=output_array.astype(np.float64)
weights_in=np.random.uniform(size=(input_neurons,hidden_layer))
weights_in=weights_in.astype(np.float64)
bias_in=np.random.uniform(size=(1,hidden_layer))
bias_in=bias_in.astype(np.float64)
weights_out=np.random.uniform(size=(hidden_layer,output_neurons))
weights_out=weights_out.astype(np.float64)
bias_out=np.random.uniform(size=(1,output_neurons))
bias=weights_in.astype(np.float64)
for i in range(epoch):
#forward propogation
hidden_layer_output=(np.dot(input_array,weights_in))+bias_in
activation_1=sigmoid(hidden_layer_output)
activation_2_input=(np.dot(activation_1,weights_out))+bias_out
predicted_output=sigmoid(activation_2_input)
# #backward propogation
Error=(predicted_output-output_array)
rate_change_output=derivative_sigmoid(predicted_output)
rate_change_hidden_output=derivative_sigmoid(activation_1)
error_on_output=Error*rate_change_output
error_hidden_layer=error_on_output.dot(weights_out.T)
delta_hidden_layer=error_hidden_layer*rate_change_hidden_output
weights_out+=activation_1.T.dot(error_on_output)*learning_rate
weights_in+=input_array.T.dot(delta_hidden_layer)*learning_rate
bias_out+=np.sum(error_on_output,axis=0,keepdims=True)*learning_rate
bias_in+=np.sum(error_hidden_layer,axis=0,keepdims=True)*learning_rate
print (weights_out)
Сейчаскогда я пытаюсь напечатать weights_out=activation_1.T.dot(error_on_output)*learning_rate
без for loop
, тогда мне выдаются правильные обновленные значения для weights_out
.Но, поскольку я использую тот же кусок кода в for loop
для итерации, равной epoch
, то он возвращается как:
[[nan]
[nan]
[nan]]
Я пробовал каждую строку отдельно и получаю правильные значения итакже измените dtype на «float64», но кажется, что код не работает внутри цикла for
.Что-то не так в цикле?