BP神经网络详解,Python实现求解异或问题

神经网络学习笔记(十二):异或问题 在Rosenblatt单层感知机中已经对异或问题做了介绍,并论证说明了只适用于线性分类问题的Rosenblatt感知机无法对异或问题进行分类。然而非线性问题是普遍存在的,下面就使用带隐藏节点的神经网络来解决异或问题。 异或问题:         异或(XOR)问题可以看做是单位正方形的四个角,响应的输入模式为(0,0),(0,1),(1,1),(1,0)。第一个和第三个模式属于 阅读详情

BP神经网络

符号及其含义

  • nln_lnl​表示第lll层神经元的个数;
  • f(⋅)f(·)f(⋅)表示神经元的激活函数;
  • W(l)∈Rni∗ni−1W^{(l)}\in\mathbb R^{n_i*n_{i-1}}W(l)∈Rni​∗ni−1​表示第l−1l-1l−1层到第lll层的权重矩阵;
  • wij(l)w_{ij}^{(l)}wij(l)​是权重矩阵W(l)W^{(l)}W(l)中的元素,表示第l−1l-1l−1层第jjj个神经元到第lll层第iii个神经元的连接的权重(注意标号的顺序);
  • b(l)=(b1(l),b2(l),...,bnl(l))T∈R(nl)b^{(l)}=(b_1^{(l)},b_2^{(l)},...,b_{nl}^{(l)})^T\in\mathbb R^{(nl)}b(l)=(b1(l)​,b2(l)​,...,bnl(l)​)T∈R(nl)表示l−1l-1l−1层到第lll层的偏置;
  • z(l)=(z1(l),z2(l),...,znl(l))T∈R(nl)z^{(l)}=(z_1^{(l)},z_2^{(l)},...,z_{nl}^{(l)})^T\in\mathbb R^{(nl)}z(l)=(z1(l)​,z2(l)​,...,znl(l)​)T∈R(nl)表示lll层神经元的状态;
  • a(l)=(a1(l),a2(l),...,anl(l))T∈R(nl)a^{(l)}=(a_1^{(l)},a_2^{(l)},...,a_{nl}^{(l)})^T\in\mathbb R^{(nl)}a(l)=(a1(l)​,a2(l)​,...,anl(l)​)T∈R(nl)表示lll层神经元的激活值(即输出值)。

在这里插入图片描述

图1图1图1
显然,图1所示神经网络的第2层神经元的状态及激活值可以通过下面的计算得到:
z1(2)=w11(2)x1+w12(2)x2+w13(2)x3+b1(2)z_1^{(2)}=w_{11}^{(2)}x_1+w_{12}^{(2)}x_2+w_{13}^{(2)}x_3+b_1^{(2)}z1(2)​=w11(2)​x1​+w12(2)​x2​+w13(2)​x3​+b1(2)​
z2(2)=w21(2)x1+w22(2)x2+w23(2)x3+b2(2)z_2^{(2)}=w_{21}^{(2)}x_1+w_{22}^{(2)}x_2+w_{23}^{(2)}x_3+b_2^{(2)}z2(2)​=w21(2)​x1​+w22(2)​x2​+w23(2)​x3​+b2(2)​
z3(2)=w31(2)x1+w32(2)x2+w33(2)x3+b3(2)z_3^{(2)}=w_{31}^{(2)}x_1+w_{32}^{(2)}x_2+w_{33}^{(2)}x_3+b_3^{(2)}z3(2)​=w31(2)​x1​+w32(2)​x2​+w33(2)​x3​+b3(2)​
a1(2)=f(z1(2))a_1^{(2)}=f(z_1^{(2)})a1(2)​=f(z1(2)​)
a2(2)=f(z2(2))a_2^{(2)}=f(z_2^{(2)})a2(2)​=f(z2(2)​)
a3(2)=f(z3(2))a_3^{(2)}=f(z_3^{(2)})a3(2)​=f(z3(2)​)
(1)(1)(1)
类似地,第3层神经元的状态及激活值可以通过下面的计算得到:
z1(3)=w11(3)a1(2)+w12(3)a2(2)+w13(3)a3(2)+b1(3)z_1^{(3)}=w_{11}^{(3)}a_1^{(2)}+w_{12}^{(3)}a_2^{(2)}+w_{13}^{(3)}a_3^{(2)}+b_1^{(3)}z1(3)​=w11(3)​a1(2)​+w12(3)​a2(2)​+w13(3)​a3(2)​+b1(3)​
z2(3)=w21(3)a1(2)+w22(3)a2(2)+w23(3)a3(2)+b2(3)z_2^{(3)}=w_{21}^{(3)}a_1^{(2)}+w_{22}^{(3)}a_2^{(2)}+w_{23}^{(3)}a_3^{(2)}+b_2^{(3)}z2(3)​=w21(3)​a1(2)​+w22(3)​a2(2)​+w23(3)​a3(2)​+b2(3)​
a1(3)=f(z1(3))a_1^{(3)}=f(z_1^{(3)})a1(3)​=f(z1(3)​)
a2(3)=f(z2(3))a_2^{(3)}=f(z_2^{(3)})a2(3)​=f(z2(3)​)
(2)(2)(2)
可总结出,第l(2<=l<=L)l(2<=l<=L)l(2<=l<=L)层神经元的状态及激活值为(下面式子是向量表示形式):
z(l)=W(l)a(l−1)+b(l)(3)z^{(l)}=W^{(l)}a^{(l-1)}+b^{(l)}\\(3)z(l)=W(l)a(l−1)+b(l)(3)

对于训练的数据集,使用均方误差作为损失函数来评估整体误差:
Error=12[(y1−a1(3))2+(y2−a2(3))2]Error=\frac{1}{2}\begin{bmatrix} (y_1-a_1^{(3)})^2+(y_2-a_2^{(3)})^2 \end{bmatrix}Error=21​[(y1​−a1(3)​)2+(y2​−a2(3)​)2​]
(4)(4)(4)
把EEE展开到隐藏层:
E=12[(y1−a1(3))2+(y2−a2(3))2]E=\frac{1}{2}\begin{bmatrix} (y_1-a_1^{(3)})^2+(y_2-a_2^{(3)})^2 \end{bmatrix}E=21​[(y1​−a1(3)​)2+(y2​−a2(3)​)2​]
E=12[(y1−f(z1(3)))2+(y2−f(z2(3)))2]E=\frac{1}{2}\begin{bmatrix} (y_1-f(z_1^{(3)}))^2+(y_2-f(z_2^{(3)}))^2 \end{bmatrix}E=21​[(y1​−f(z1(3)​))2+(y2​−f(z2(3)​))2​]
E=12[(y1−f(w11(3)a1(2)+w12(3)a2(2)+w13(3)a3(2)+b1(3)))2+(y2−f(w21(3)a1(2)+w22(3)a2(2)+w23(3)a3(2)+b2(3)))2]E=\frac{1}{2}\begin{bmatrix} (y_1-f(w_{11}^{(3)}a_1^{(2)}+w_{12}^{(3)}a_2^{(2)}+w_{13}^{(3)}a_3^{(2)}+b_1^{(3)}))^2+(y_2-f(w_{21}^{(3)}a_1^{(2)}+w_{22}^{(3)}a_2^{(2)}+w_{23}^{(3)}a_3^{(2)}+b_2^{(3)}))^2 \end{bmatrix}E=21​[(y1​−f(w11(3)​a1(2)​+w12(3)​a2(2)​+w13(3)​a3(2)​+b1(3)​))2+(y2​−f(w21(3)​a1(2)​+w22(3)​a2(2)​+w23(3)​a3(2)​+b2(3)​))2​]
(5)(5)(5)
我们的目的时调整权重和偏执使总体误差减小,求得误差为最小(或某一可以接受的范围)时所对应的每个wij(l)w_{ij}^{(l)}wij(l)​,bi(l)b_i^{(l)}bi(l)​。
训练过程的核心就是梯度下降,我们对每个参数wij(l)w_{ij}^{(l)}wij(l)​,bi(l)b_i^{(l)}bi(l)​求偏导,通过下降这些梯度来减小损失函数EEE的值,每次步长为α\alphaα(学习率),这也就是每个权重的更新过程,以w11(3)w_{11}^{(3)}w11(3)​为例:
以w11(3)w_{11}^{(3)}w11(3)​为例,由链式求导法则,对w11(3)w_{11}^{(3)}w11(3)​求偏导结果为:
∂E∂w11(3)=∂E∂z1(3)∂z1(3)∂w11(3)=∂E∂a1(3)∂a1(3)∂z1(3)∂z1(3)∂w11(3)=−(y1−a1(3))f′(z1(3))∂z1(3)∂w11(3)=−(y1−a1(3))f′(z1(3))a1(2)\frac{\partial E}{\partial w_{11}^{(3)}} = \frac{\partial E}{\partial z_{1}^{(3)}} \frac{\partial z_{1}^{(3)}}{\partial w_{11}^{(3)}} = \frac{\partial E}{\partial a_{1}^{(3)}} \frac{\partial a_{1}^{(3)}}{\partial z_{1}^{(3)}}\frac{\partial z_{1}^{(3)}}{\partial w_{11}^{(3)}} = -(y_1-a_1^{(3)})f^{'}(z_1^{(3)}) \frac{\partial z_{1}^{(3)}}{\partial w_{11}^{(3)}} = -(y_1-a_1^{(3)})f^{'}(z_1^{(3)}) a_1^{(2)}∂w11(3)​∂E​=∂z1(3)​∂E​∂w11(3)​∂z1(3)​​=∂a1(3)​∂E​∂z1(3)​∂a1(3)​​∂w11(3)​∂z1(3)​​=−(y1​−a1(3)​)f′(z1(3)​)∂w11(3)​∂z1(3)​​=−(y1​−a1(3)​)f′(z1(3)​)a1(2)​
(6)(6)(6)
其中偏导数∂E∂zi(l)\frac{\partial E}{\partial z_{i}^{(l)}}∂zi(l)​∂E​表示第lll层第iii个神经元对最终损失的影响,也反映了最终损失对第lll层神经元的敏感程度,因此一般称为第lll层神经元的误差项,用δ(l)\delta^{(l)}δ(l)来表示。
δ(l)≡∂E∂zi(l)(7)\delta^{(l)}≡\frac{\partial E}{\partial z_{i}^{(l)}}\\(7)δ(l)≡∂zi(l)​∂E​(7)
∂E∂w11(3)=∂E∂z1(3)∂z1(3)∂w11(3)=δ1(3)a1(2)(8)\frac{\partial E}{\partial w_{11}^{(3)}} = \frac{\partial E}{\partial z_{1}^{(3)}} \frac{\partial z_{1}^{(3)}}{\partial w_{11}^{(3)}}=\delta_1^{(3)}a_1^{(2)}\\(8)∂w11(3)​∂E​=∂z1(3)​∂E​∂w11(3)​∂z1(3)​​=δ1(3)​a1(2)​(8)
其中:δ1(3)=∂E∂z1(3)=∂E∂a1(3)∂a1(3)∂z1(3)=−(y1−a1(3))f′(z1(3))\delta_1^{(3)}= \frac{\partial E}{\partial z_{1}^{(3)}}= \frac{\partial E}{\partial a_{1}^{(3)}} \frac{\partial a_{1}^{(3)}}{\partial z_{1}^{(3)}} =-(y_1-a_1^{(3)})f^{'}(z_1^{(3)})δ1(3)​=∂z1(3)​∂E​=∂a1(3)​∂E​∂z1(3)​∂a1(3)​​=−(y1​−a1(3)​)f′(z1(3)​)

对于误差项δ\deltaδ(增量),引入他除了可以简化计算∂E∂w\frac{\partial E}{\partial w}∂w∂E​以外,更重要的是可以通过δ(l+1)\delta^{(l+1)}δ(l+1)来求解δ(l)\delta^{(l)}δ(l),这样可以便于理解和加快计算速度。

以下是输出层(L)(L)(L)计算误差项和梯度的矩阵形式(⊙表示矩阵中对应位置元素相乘)
δ(L)=−(y−a(L))⊙f′(z(L))△w(L)=δ(l)(a(L−1))T(9)\delta^{(L)}=-(y-a^{(L)})⊙f^{'}(z^{(L)})\\△w^{(L)}=\delta^{(l)}(a^{(L-1)})^T\\(9)δ(L)=−(y−a(L))⊙f′(z(L))△w(L)=δ(l)(a(L−1))T(9)
权重更新公式(α为学习率\alpha为学习率α为学习率):
w(L)=w(L)−α△w(L)(10)w^{(L)}=w^{(L)}-\alpha△w^{(L)}\\(10)w(L)=w(L)−α△w(L)(10)
再以隐藏层的w11(2)w_{11}^{(2)}w11(2)​为例,按照链式求导规则可以展开为两项和:
∂E∂w11(2)=∂E∂a1(3)∂a1(3)∂z1(3)∂z1(3)∂a1(2)∂a1(2)∂z1(2)∂z1(2)∂w11(2)+∂E∂a2(3)∂a2(3)∂z2(3)∂z2(3)∂a1(2)∂a1(2)∂z1(2)∂z1(2)∂w11(2)=−(y−a1(3))f′(z1(3))w11(3)f′(z1(2))x1−(y−a2(3))f′(z2(3))w21(3)f′(z1(2))x1=[(y−a1(3))f′(z1(3))w11(3)−(y−a2(3))f′(z2(3))w21(3)]f′(z1(2))x1=(δ1(3)w11(3)+δ2(3)w21(3))f′(z1(2))x1\frac{\partial E}{\partial w_{11}^{(2)}} \\ = \frac{\partial E}{\partial a_{1}^{(3)}} \frac{\partial a_{1}^{(3)}}{\partial z_{1}^{(3)}} \frac{\partial z_{1}^{(3)}}{\partial a_{1}^{(2)}} \frac{\partial a_{1}^{(2)}}{\partial z_{1}^{(2)}} \frac{\partial z_{1}^{(2)}}{\partial w_{11}^{(2)}} + \frac{\partial E}{\partial a_{2}^{(3)}} \frac{\partial a_{2}^{(3)}}{\partial z_{2}^{(3)}} \frac{\partial z_{2}^{(3)}}{\partial a_{1}^{(2)}} \frac{\partial a_{1}^{(2)}}{\partial z_{1}^{(2)}} \frac{\partial z_{1}^{(2)}}{\partial w_{11}^{(2)}}\\ = -(y-a_1^{(3)})f^{'}(z_1^{(3)})w_{11}^{(3)}f^{'}(z_1^{(2)})x1 - (y-a_2^{(3)})f^{'}(z_2^{(3)})w_{21}^{(3)}f^{'}(z_1^{(2)})x1\\ =\begin{bmatrix} (y-a_1^{(3)})f^{'}(z_1^{(3)})w_{11}^{(3)} - (y-a_2^{(3)})f^{'}(z_2^{(3)})w_{21}^{(3)} \end{bmatrix} f^{'}(z_1^{(2)})x1\\ =(\delta_1^{(3)}w_{11}^{(3)}+\delta_2^{(3)}w_{21}^{(3)})f^{'}(z_1^{(2)})x1∂w11(2)​∂E​=∂a1(3)​∂E​∂z1(3)​∂a1(3)​​∂a1(2)​∂z1(3)​​∂z1(2)​∂a1(2)​​∂w11(2)​∂z1(2)​​+∂a2(3)​∂E​∂z2(3)​∂a2(3)​​∂a1(2)​∂z2(3)​​∂z1(2)​∂a1(2)​​∂w11(2)​∂z1(2)​​=−(y−a1(3)​)f′(z1(3)​)w11(3)​f′(z1(2)​)x1−(y−a2(3)​)f′(z2(3)​)w21(3)​f′(z1(2)​)x1=[(y−a1(3)​)f′(z1(3)​)w11(3)​−(y−a2(3)​)f′(z2(3)​)w21(3)​​]f′(z1(2)​)x1=(δ1(3)​w11(3)​+δ2(3)​w21(3)​)f′(z1(2)​)x1 (12)(12)(12)

又因为:
∂E∂w11(2)=∂E∂z1(2)∂z1(2)∂w11(2)=δ1(2)x1\frac{\partial E}{\partial w_{11}^{(2)}} = \frac{\partial E}{\partial z_{1}^{(2)}} \frac{\partial z_{1}^{(2)}}{\partial w_{11}^{(2)}} = \delta_1^{(2)}x_1∂w11(2)​∂E​=∂z1(2)​∂E​∂w11(2)​∂z1(2)​​=δ1(2)​x1​ (13)(13)(13)
由(12)(13)(12)(13)(12)(13)可得:
∂E∂w11(2)=(δ1(3)w11(3)+δ2(3)w21(3))f′(z1(2))x1=δ1(2)x1\frac{\partial E}{\partial w_{11}^{(2)}}\\ =(\delta_1^{(3)}w_{11}^{(3)}+\delta_2^{(3)}w_{21}^{(3)})f^{'}(z_1^{(2)})x1\\ =\delta_1^{(2)}x_1∂w11(2)​∂E​=(δ1(3)​w11(3)​+δ2(3)​w21(3)​)f′(z1(2)​)x1=δ1(2)​x1​

从以上公式可以看出,第lll层的误差项可以通过第l+1l+1l+1层的误差项计算得到,这就是误差的反向传播。
反向传播算法的含义是:第lll层的一个神经元的误差项是所有与该神经元相连的第l+1l+1l+1层的神经元的误差项的权重和。然后,再乘上该神经元激活函数的梯度。
以矩阵的形式可以写为:
δ(l)=((W(l+1))Tδ(l+1))⊙f′(z(l))△w(L)=δ(L)XT(14)\delta^{(l)}=((W^{(l+1)})^T\delta^{(l+1)})⊙f^{'}(z^{(l)})\\ △w^{(L)}=\delta^{(L)}X^T\\ (14)δ(l)=((W(l+1))Tδ(l+1))⊙f′(z(l))△w(L)=δ(L)XT(14)

Python实现BP求解异或问题

# -*- coding: utf-8 -*-
import numpy as np


# 双曲正切函数,该函数为奇函数
def tanh(x):
    return np.tanh(x)


# tanh导函数性质:f'(t) = 1 - f(x)^2
def tanh_prime(x):
    return 1.0 - tanh(x) ** 2

class NeuralNetwork:
    def __init__(self, layers, activation='tanh'):
        """
        :参数layers: 神经网络的结构(输入层-隐含层-输出层包含的结点数列表)
        :参数activation: 激活函数类型
        """
        if activation == 'tanh':  # 也可以用其它的激活函数
            self.activation = tanh
            self.activation_prime = tanh_prime
        else:
            pass

        # 存储权值矩阵
        self.weights = []

        # range of weight values (-1,1)
        # 初始化输入层和隐含层之间的权值
        print('------------------', len(layers))    # 3
        for i in range(1, len(layers) - 1):
            # layer[i-1]+1 = layer[0]+1 = 2+1 = 3
            # layers[i] + 1 = layer[1]+1 = 3
            r = 2 * np.random.random((layers[i - 1] + 1, layers[i] + 1)) - 1  # add 1 for bias node
            self.weights.append(r)

        # 初始化输出层权值
        r = 2 * np.random.random((layers[i] + 1, layers[i + 1])) - 1
        self.weights.append(r)

    def fit(self, X, Y, learning_rate=0.2, epochs=10000):
        # 将一列一加到X
        # 这是为了将偏置单元添加到输入层
        # np.hstack()将两个数组按水平方向组合起来, 4*2 --> 4*3
        X = np.hstack([np.ones((X.shape[0], 1)), X])

        for k in range(epochs):  # 训练固定次数
            # if k % 1000 == 0: print('epochs:', k)

            # 从区间中的离散均匀分布返回随机整数 [0, low).[0, 4)
            i = np.random.randint(X.shape[0], high=None)
            a = [X[i]]  # 从m个输入样本中随机选一组
            # len(self.weights) 2
            for l in range(len(self.weights)):
                # 每组输入样本(第一列未偏执值b)与权值进行矩阵相乘,a:1*3, weights:3*3 ---> 1*3
                dot_value = np.dot(a[l], self.weights[l])  # 权值矩阵中每一列代表该层中的一个结点与上一层所有结点之间的权值
                activation = self.activation(dot_value)     # 放入激活函数
                a.append(activation)

            '''
            反向传播算法的含义是:第l层的一个神经元的误差项delta(l)是
            所有与该神经元相连的第l+1层的神经元的误差项delta(l+1)的权重
            和。然后,再乘上该神经元激活函数的梯度。
            '''
            # 均方误差函数   E = 1/2 * (Y - a)**2
            # 反向递推计算delta:从输出层开始,先算出该层的delta,再向前计算
            error = Y[i] - a[-1]  # 计算输出层delta
            deltas = [error * self.activation_prime(a[-1])]

            # 从倒数第2层开始反向计算delta
            for l in range(len(a) - 2, 0, -1):
                deltas.append(deltas[-1].dot(self.weights[l].T) * self.activation_prime(a[l]))

            # [level3(output)->level2(hidden)]  => [level2(hidden)->level3(output)]
            deltas.reverse()  # 逆转列表中的元素

            # backpropagation
            # 1. 将其输出增量与输入激活相乘,得到权重的梯度。
            # 2. 从权重中减去渐变的比率(百分比)。
            for i in range(len(self.weights)):  # 逐层调整权值
                layer = np.atleast_2d(a[i])  # 将输入作为至少具有两个维度的数组查看
                delta = np.atleast_2d(deltas[i])
                self.weights[i] += learning_rate * np.dot(layer.T, delta)  # 每输入一次样本,就更新一次权值

    def predict(self, x):
        a = np.concatenate((np.ones(1), np.array(x)))  # a为输入向量(行向量)
        for l in range(0, len(self.weights)):  # 逐层计算输出
            a = self.activation(np.dot(a, self.weights[l]))
        return a


if __name__ == '__main__':
    nn = NeuralNetwork([2, 2, 1])  # 网络结构: 2输入1输出,1个隐含层(包含2个结点)

    X = np.array([[0, 0],  # 输入矩阵(每行代表一个样本,每列代表一个特征)
                  [0, 1],
                  [1, 0],
                  [1, 1]])
    Y = np.array([0, 1, 1, 0])  # 期望输出

    nn.fit(X, Y)  # 训练网络

    print('w:', nn.weights)  # 调整后的权值列表

    for s in X:
        print(s, nn.predict(s))  # 测试

运行结果:

在这里插入图片描述

从异或问题到前馈神经网络 (from XOR problem to FNN) KaTeX parse error: Undefined control sequence: \usepackage at position 1: \̲u̲s̲e̲p̲a̲c̲k̲a̲g̲e̲{amsmath} 关于非线性问题 Non-Linear Problem 有以下三种 solution 1 Non-Linear Transformation 非线性转化 ϕ:X→Z\phi:\mathcal{X}\to \mathcal{Z}ϕ:X→Z 即构造函数 ϕ\phiϕ,将 input space X\ma. 阅读详情

相关推荐

BP神经网络简单python实现

BP神经网络简单python实现 假设输入层有3个神经元,隐藏层有4个神经元,输出层有1个神经元,分析如何用3层(1输入层+1隐藏层+1输出层)BP神经网络来解决异或问题。

info_kerwin的博客 1484

机器学习——神经网络(五):BP神经网络解决异或问题

BP神经网络解决异或问题 BP神经网络的推导、python实现代码及结果视图请移至机器学习——神经网络(四):BP神经网络 单层感知器异或问题请移至机器学习——神经网络(二):单层感知机异或问题 python 3.6 numpy、matplotlib库 import numpy as np import matplotlib.pyplot as plt # 载入数据 x_data = np.array([[1,0,0], [1,0,1],

Liu Feng's Blog 4657

利用BP神经网络解决异或问题:Python实战教程

在BP神经网络中,要映射异或问题,需要构造一个可以学习并表示非线性决策边界的网络。BP神经网络通过多层处理单元(神经元)构成的网络结构来逼近复杂的函数映射。每个处理单元执行一个加权输入的总和,通过非线性激活函数转换成输出信号。对于异或问题,需要一个至少包含一个隐藏层的网络结构。隐藏层使得网络能够学习到输入数据的更复杂表示,从而能够解决异或问题。均方误差(MSE):是最常用的回归任务误差函数,计算预测值和真实值之间差值的平方的平均数。MSE对异常值敏感,因为它会将较大的误差进行平方。

weixin_35257663的博客 791

【机器学习基础】使用python实现BP算法

用pytorch跟tensorflow实现神经网络固然爽。但是想要深入学习神经网络,光学会调包是不够的,还是得亲自动手去实现一个神经网络,才能更好去理解。一、问题介绍传说中线性分类器无法...

fengdu78的博客 7250

BP神经网络解决异或问题的深度剖析

在人工智能领域,BP神经网络(Backpropagation Neural Network)是一个核心概念,它属于前馈神经网络的一种,通过反向传播算法实现网络权重的迭代优化。BP网络因其结构简单、学习能力强,被广泛应用于函数逼近、模式识别、数据分析等众多领域。接下来的章节将深入探讨BP神经网络的网络结构、权重调整、反向传播算法的原理和机制,以及在解决特定问题如异或问题中的应用方法。在讨论反向传播算法之前,首先需要理解损失函数。损失函数衡量的是模型预测值与实际值之间的差异。

weixin_34620658的博客 905

Rosetta基础2:preparing ligand

Rosetta是基于残基,也就是说Rosetta不把原子单独对待,而是把它们看作一个完整的化学实体。为了实现这个目标,Rosetta必须知道键长、键角以及其它性质。对标准残基和小分子残基模型都是必须的。Rosetta在params文件中对残基的性质进行编码。Rosetta数据库包含常见氨基酸残基和小分子残基的parmas文件。当我们添加新的配体时,需要生成新的parms文件。 What is a Params File params文件包含残基的几何形状和化学特征的信息,为了让Rosetta理解怎样运行这个

li1guangjun的博客 1755

用BP神经网络解决异或问题

初步的神经网络入门分为三篇 1:神经网络简析 2:Back Propagation算法 3:用BP神经网络解决异或问题 这一篇主要是讲解一下关于用BP神经网络解决异或问题 对于我们的输入 [0,0],[0,1],[1,0],[1,1] 对于我们的输出 0或1 这里我们需要借用上一篇文章的一张图片 构建双层神经网络 #导入numpy import numpy as ...

weixin_43272605的博客 7235

手把手教你用MOS管设计双电源自动切换电路(附零压降方案)

本文详细介绍了使用MOS管设计双电源自动切换电路的完整方案,包括基础电路拓扑、零压降优化设计及实战调试技巧。针对外接电源与电池供电的无缝切换需求,提供低损耗MOS管选型建议和性能实测数据,帮助工程师解决传统二极管方案的压降与漏电问题。

h0i1j2k3l的博客 1445

【深度学习】2:BP算法原理,BP算法解决异或问题

BP神经网络介绍

zzZ_CMing的博客 9228

IDEA 导入 jbolt项目(实验室非公开项目)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录准备一、准备数据库二、IDEA导入jbolt项目 准备 在实验室群文件中下载jbolt.zip和mysql.sql两个文件 将其解压到自己的目录下 一、准备数据库 打开Navicat新建一个jbolt数据库(字符集为utf8) 导入mysql.sql文件 数据库导入完毕 二、IDEA导入jbolt项目 点击打开一个项目 选择jbolt文件夹 以Maven形式打开 打开pom.xml 在里面添加jetty-server依赖

weixin_44094842的博客 973

MATLAB/Simulink与ThingSpeak集成:打通物联网数据与工业算法仿真的闭环

在工业算法开发与控制系统设计中,模型仿真与真实世界数据的脱节是常见的工程挑战。其核心原理在于构建一个双向数据流闭环,将虚拟的仿真模型与物理世界的传感器网络连接起来。这一技术方案的核心价值在于大幅缩短算法迭代周期,实现数据驱动的设计与验证。典型的应用场景包括数字孪生构建、预测性维护和硬件在环(HIL)测试的云端化。通过将MATLAB/Simulink这一强大的模型化设计环境,与ThingSpeak物联网云平台进行深度集成,工程师能够轻松地将实时或历史的物联网数据流直接注入仿真模型作为输入,同时将仿真结果实时回

weixin_34220179的博客 469

BP神经网络Python实现异或问题

# -*- coding: UTF-8 -*- import matplotlib as mpl import numpy as np import matplotlib.pyplot as plt #BP神经网络实现异或问题 X=np.array([[1,0,0], [1,0,1], [1,1,0], [1,1

王猛的专栏 1935

unet学习笔记(milesial/Pytorch-UNet)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 unet学习笔记(milesial/Pytorch-UNet)原理讲解unet_parts.py内容predict.py内容 所用到的代码Pytorch-UNet/predict.py at master · milesial/Pytorch-UNet ·GitHub 原理讲解 蓝/白色框表示 feature map; 蓝色箭头表示 3x3 卷积,用于特征提取; 灰色箭头表示skip-connection,用于特征融合; 红色箭头.

weixin_67138138的博客 2553

python bp神经网络 异或_【神经网络】BP算法解决XOR异或问题MATLAB版

第一种%%%用神经网络解决异或问题clearclcclosems=4;%设置4个样本a=[0 0;0 1;1 0;1 1];%设置输入向量y=[0,1,1,0];%设置输出向量n=2;%输入量的个数m=3;%隐层量的个数k=1;%输出层的个数w=rand(n,m);%为输入层到隐层的权值赋初值v=rand(m,k);%为隐层到输出层的权值赋权值yyuzhi=rand(1,m);%为输入层到隐层的阈...

weixin_39548972的博客 1193

【GlobalMapper精品教程】072:GlobalmapperV25中文版下载地址及安装教程

GlobalmapperV25中文版下载地址及安装教程安装包位于专栏完整数据包中,请订阅后从优快云私信查收!最新GlobalMapper中文版入门实战实验教程,图文并茂,实用性强,内容包括:GM基础操作、数据处理及地形图制作、航测内业数据处理、点云处理、地形分析、空间分析、数据库建库入库等。配套完整案例数据,持续同步更新!订阅专栏后,从私信查收中文安装包永久版(中文23.0+24.0)及配套实验数据包。

智慧空间实验室 4733

偏最小二乘回归分析原理详解和案例分析实例

偏最小二乘回归分析原理详解背景偏最小二乘回归分析 Partial least squares regression analysis基本思想建模步骤步骤一:分别提取两变量组的第一对成分,并使之相关性达最大步骤二:建立 y1,⋯ ,yp\boldsymbol{y}_{1}, \cdots, \boldsymbol{y}_{p}y1​,⋯,yp​ 对 u1\boldsymbol{u}_{1}u1​ 的回归及 x1,⋯ ,xm\boldsymbol{x}_{1}, \cdots, \boldsymbol{x}_{

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 9977

三层BP神经网络的python实现

这是一个非常漂亮的三层反向传播神经网络的python实现,下一步我准备试着将其修改为多层BP神经网络。 下面是运行演示函数的截图,你会发现预测的结果很惊人! 提示:运行演示函数的时候,可以尝试改变隐藏层的节点数,看节点数增加了,预测的精度会否提升 import math import random import string random.seed(0) # 生成...

不二的博客 6211

最新2026年《网络数据安全风险评估办法》条款解读

大型企业集团IT变革下的零信任安全体系建设方案(55页).pptx。以数据安全为核心的安全立体防御体系解决方案(41页).pptx。让数据安全合规地创造价值(15页 PPT).pptx。大型集团数据安全应急预案(57页).docx。数据安全治理与评估服务业务介绍.pptx。数据安全管理实践(17页).pptx。大数据安全架构设计方案.pptx。大数据安全规划总体方案.pptx。数据库安全综合治理方案.pptx。医疗数据安全建设方案.pptx。数据安全框架规划图.pptx。数据安全治理方案.pptx。

cdfunlove的博客 47

用python实现BP算法 判别异或

BP算法第一次简单实现,遇到了很多问题就记录下来了。

qq_43235540的博客 2685

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

BP神经网络原理与异或实例分析

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录BP神经网络原理介绍一、BP神经网络算法原理是什么?二、激活函数1.激活函数作用三、BP神经网络异或实例分析1.问题:2.分析:3.代码总结 BP神经网络原理介绍 BP神经网络算法(Back-Propagation Neural Network) 一、BP神经网络算法原理是什

阿宾的地盘儿 2216

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

python bp神经网络 异或_BP神经网络求解异或问题(Python实现)

反向传播算法(Back Propagation)分二步进行,即正向传播和反向传播。这两个过程简述如下:1.正向传播输入的样本从输入层经过隐单元一层一层进行处理,传向输出层;在逐层处理的过程中。在输出层把当前输出和期望输出进行比较,如果现行输出不等于期望输出,则进入反向传播过程。2.反向传播反向传播时,把误差信号按原来正向传播的通路反向传回,逐层修改连接权值,以望代价函数趋向最小。下面以单隐层的神经...

weixin_39596668的博客 768

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

BP神经网络(python代码)

神经网络是深度学习的基础。个人理解神经网络就是可以拟合任何一种广义线性模型的结构,本文主要记录python代码的学习笔记。

骆驼分析师的博客 1万+

用pytorch实现 bp网络 判别异或

用pytorch实现bp网络---判别异或

qq_43235540的博客 1908

python3_实现BP神经网络 + BP神经网络应用实例

1.BP神经网络简介 BP神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络。 优点:具有任意复杂的模式分类能力和优良的多维函数映射能力,解决了简单感知器不能解决的异或或者一些其他的问题。从结构上讲,BP神经网络具有输入层、隐含层和输出层;从本质上讲,BP算法就是以网络误差平方目标函数...

也许有一天我们再相逢 睁开眼睛看清楚 我才是英雄! 6万+

深度学习之bp算法介绍及python代码实现

目录1.bp算法介绍1.1 背景1.2 多层向前神经网络(Multilayer Feed-Forward Neural Network)1.3 神经网络结构的设计1.4 bp算法过程1.4.1 初始化1.4.2 正向更新神经元值1.4.3 反向更新权重与阈值1.4.4 算法停止1.5 bp算法举例2.bp算法理论推导3.bp算法代码举例新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右Smarty

Hariod的博客 7511

人工智能学习——神经网络(matlab+python实现)

神经网络 文章目录神经网络前言一、神经网络理论知识二、matlab实现神经网络1.引入库2.读入数据三、python实现神经网络1.引入库总结 前言 此文章仅作为个人学习笔记使用,主要介绍理论以及学习过程,仅供参考! 一、神经网络理论知识 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、matlab实现神经网络 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matplotlib.p

m0_57171062的博客 1万+
上一篇: 共计10万余字!数据结构知识详细梳理!
下一篇: VSCode扩展工具Copilot MCP使用教程【MCP】
UniqueUnit
博客等级 码龄9年 4万+粉丝 15原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值