微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

建立神经网络

如何解决建立神经网络

message

当我训练第一个数据集时,我对这段代码有疑问,它给了我错误错误输出。请帮助我

错误结果:数组0 :-3.064593410552471919e + 00 2.030214960111619948e + 00 -3.313245700218954148e + 00 2.194621979651765198e + 00 -3.039034712586923703e + 00 2.015828980420916405e + 00 1.092356199022950136e + 01 -7.174143386123477129e + 00 -2.063741809177218389e + 00 1.365922985650685595e + 00 9.134417850872669220e + 00 -6.003831834491881736e + 00

数组1:5.967928829511552902e-01 -3.970550524412196913e-01 -4.948326302447532132e-01 3.206240274960787673e-01

数组2:-1.185265072944454989e-01 6.395640201815155912e-02 -5.462542561719030410e-02 4.683089263310857842e-02

输出结果:[[0.11851118] [0.05462103]]

解决方法

import numpy as np
import pandas as pd

def sigmoid(X):
    return 1 / (1 + np.exp(-X))

def sigmoid_der(x):
    return sigmoid(x)*(1-sigmoid(x))

def getError(target,output):
    print("Target :",target)
    print("output : ",output)
    print("Result : ",target - output)
    return target - output

def mse(target,output):
    result = np.sum((1/2)*((target-output)**2),axis=1)
    print(np.array([result]))
    return np.array([result])

def Reverse(lst): 
    return [ele for ele in reversed(lst)]

def der_error_der_output(target,output):
    return output-target

data = {"Input1" : [0,1],"Input2" : [0,1,0],"Target Ouput" : [0,1] }
   
df = pd.DataFrame(data)
#df = pd.DataFrame(pd.read_csv("mnist_train.csv"))
lr = 0.01
number_of_neuron_of_hidden_layer = 2
number_of_neuron_of_output_layer = 1
number_of_hidden_layer = 2
number_of_output_layer = 1
input_df = df.iloc[:,:-1]
output_df = np.array([df.iloc[:,-1]])
input_np = input_df.values.T
output_np = output_df
weights_array = [];
for i in range(0,10000):
    output_of_neurons_of_layer = [];
    #print(i)
    if i == 0:
        for j in range(0,number_of_hidden_layer):
            if(j == 0): 
                weights = np.full((number_of_neuron_of_hidden_layer,input_np[:,0].size),"float")  #np.random.randn(number_of_neuron_of_hidden_layer,0].size)
                xw = np.dot(weights,input_np)
            else :
                weights = np.full((number_of_neuron_of_hidden_layer,output_of_neurons_of_layer[-1][:,"float")#np.random.randn(number_of_neuron_of_hidden_layer,output_of_neurons_of_layer[-1])
            z = sigmoid(xw)
            weights_array.append(weights)
            output_of_neurons_of_layer.append(z)
                
        for j in range(0,number_of_output_layer):
            weights = np.full((number_of_neuron_of_output_layer,"float")
            xw = np.dot(weights,output_of_neurons_of_layer[-1]) #+ bias
            z = sigmoid(xw)
            weights_array.append(weights)
            output_of_neurons_of_layer.append(z)
        
    else :
        for j in range(0,number_of_hidden_layer):
            weights = weights_array[j]
            if j == 0:
                xw = np.dot(weights,input_np)
            else :
                xw = np.dot(weights,output_of_neurons_of_layer[-1])
            z = sigmoid(xw)
            output_of_neurons_of_layer.append(z)
                
        for j in range(number_of_hidden_layer,number_of_output_layer + number_of_hidden_layer):
            weights = weights_array[j]
            xw = np.dot(weights,output_of_neurons_of_layer[-1])
            z = sigmoid(xw)
            output_of_neurons_of_layer.append(z)
            
            
    error = getError(output_np,output_of_neurons_of_layer[-1])  
      
    error_of_layers = [error]

    #Backpropagation
    
    #for in range(0,number_of_output_layer):
        

    for j in range(len(weights_array)-1,-1):
        error_output = error_of_layers[-1]
        weight_t = weights_array[j].T
        error_result = np.dot(weight_t,error_output)
        error_of_layers.append(error_result)
    
    error_of_layers = Reverse(error_of_layers)
    
    for j in range(len(weights_array)-1,-1,-1):
        error = error_of_layers[j]
        der_sigmoid = sigmoid_der(output_of_neurons_of_layer[j])
        if(j - 1 == -1):   
            der_der_weight = input_np.T
        else:
            der_der_weight = output_of_neurons_of_layer[j-1].T
        z_delta = error * der_sigmoid
        gradient = np.dot(z_delta,der_der_weight)
        weights_array[j] += lr * gradient
        #print(i,j)
#Testing
data = {"Input1" : [1],"Input2" : [1]}
   
df = pd.DataFrame(data)
#df = pd.DataFrame(pd.read_csv("mnist_train.csv"))
input_df = df.iloc[:,:]
input_np = input_df.values.T

output_of_neurons_of_layer = []

for j in range(0,number_of_hidden_layer):
    if j == 0:
        weights = weights_array[j]
        xw = np.dot(weights,input_np) #+ bias
        z = sigmoid(xw)
        output_of_neurons_of_layer.append(z)
        
    
    else :
        weights = weights_array[j]
        #bias =  np.full((number_of_neuron_of_hidden_layer,output_of_neurons_of_layer[-1][0,:].size),"float") 
        xw = np.dot(weights,output_of_neurons_of_layer[-1]) #+ bias
        z = sigmoid(xw)
        output_of_neurons_of_layer.append(z)
        
                
for j in range(number_of_hidden_layer,number_of_output_layer+number_of_hidden_layer):
    weights = weights_array[j]
    xw = np.dot(weights,output_of_neurons_of_layer[-1]) #+ bias
    z = sigmoid(xw)
    output_of_neurons_of_layer.append(z)
    
print(output_of_neurons_of_layer[-1])

这是更新的代码,但仍无法正常工作(计算错误)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。