我是深度学习的新手,正在尝试为sin函数创建一个基本的神经网络。我已经生成了形状为(50,1)的随机值的numpy数组,其输出为sin(input)
。
神经网络包括一个具有激活功能的sigmoid
的隐层(3个神经元),最终输出神经元也包含sigmoid
激活功能。在以时期20000
和学习率为0.1
训练网络后,最终错误似乎没有达到接近零的程度。
完整代码:
import numpy as np
import pandas as pd
import random
np.random.seed(1000)
input_array=np.random.uniform(size=(50,1))
output_array=np.sin(input_array)
total_rows=input_array.shape[0]
def sigmoid(x):
d=(1/(1+np.exp(-x)))
return d
def derivative_sigmoid(x):
derivative=x*(1-x)
return derivative
epoch=20000
hidden_layer=3
input_neurons=1
output_neurons=1
learning_rate=0.1
input_array=data['input'].values.reshape(total_rows,1)
output_array=data['output'].values.reshape(total_rows,1)
weights_in=np.random.uniform(size=(input_neurons,hidden_layer))
bias_in=np.random.uniform(size=(1,hidden_layer))
weights_out=np.random.uniform(size=(hidden_layer,output_neurons))
bias_out=np.random.uniform(size=(1,output_neurons))
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 (Error)
我使用S型函数作为最终输出的原因是0-1之间(如果我写错了,请纠正我)。这是error。
有人可以建议我我做错了什么吗?
答案 0 :(得分:0)
正弦值在间隔[-1,1]
中移动。如果将Sigmoid用作输出激活,则模型只能输出[0,1]
中的值,因此没有机会正确预测值。