Python:1-S ^ 1-1网络的反向传播近似值

时间:2018-07-30 03:22:32

标签: python numpy machine-learning neural-network backpropagation

我正在尝试对1-S-1(S =神经元数)网络实施反向传播,以在输入(p)限制内近似实现以下功能:

enter image description here

只能通过对矩阵运算使用Numpy来实现近似。我将初始权重和偏差设置为在-0.5和0.5之间均匀分布的随机数,以训练网络。我还需要将神经元设置为2或10,以观察网络的差异/改进。学习率也将很灵活。可以将其设置为允许收敛的任何数字。

我正在使用的传递函数是sigmoid:

  

输出= 1 /(1 + e ^(-激活))

我对理解反向传播的概念仍然很不了解,并且正在尝试从头开始进行编程学习。但是,当我仍然感到困惑时,这是极其困难的。

我了解到,反向传播会从输出和目标集中逐层更新权重和偏差。 {(p1,t1),(p2,t2)....}。然后通过诸如以下的误差估计来更新权重和偏差:

  

错误=(预期-输出)* transfer_derivative(输出)

在下面的程序中,我试图通过反向传播来绘制近似函数,但我不知道如何为近似正弦图计算近似输出。任何澄清将不胜感激。 我现在的代码可能不完整,因为我停止了体重传播,并希望从那里获得一些帮助。

仅仅尝试自己学习它,感觉这是目前最难掌握的概念。

class backProg:
def __init__(self,P):
    self.W1 = np.random.uniform(-1/2, 1/2, 20)

    #self.W2 = np.random.uniform(-1/2, 1/2, 20)
    self.B = np.random.uniform(-1/2, 1/2, 20)#include bias in input

def transfer_derivative(self, output):
    deriv1 = output * (1.0 - output)
    return deriv1

def logsig(self, p):
    for i in range(len(p)):
        w1 = np.zeros(len(self.W1))
        a1 = w1
        s2 = w1
        x = self.W1[i]*p[i]+self.B[i]
        a1[i] = 1/(1+np.exp(x))
        deriv = self.transfer_derivative(a1)
        t = 1 + np.sin((math.pi/2)*p[i])
        #Second layer
        s2[i] = -2*deriv*(t-a1[i])
        w1[i] = self.W1[i] - 0.1*s2[i]*a1[i] #a1
    #First layer
        return w1, t, s2,a1

    P = np.arange(-2,2,0.2)

    backP = backProg(P)
    backP.logsig(P)

尝试近似此正弦图:

 p = np.arange(-2,2,0.2)

 t = 1 + np.sin((math.pi/2)*p)

 plt.plot(p,t,'C0')

0 个答案:

没有答案