一、BP神经网络的概念
【神经网络|深度学习算法3-BP神经网络】BP神经网络是一种多层的前馈神经网络,其主要的特点是:信号是前向传播的,而误差是反向传播的。具体来说,对于如下的只含一个隐层的神经网络模型:
BP神经网络的过程主要分为两个阶段,第一阶段是信号的前向传播,从输入层经过隐含层,最后到达输出层;第二阶段是误差的反向传播,从输出层到隐含层,最后到输入层,依次调节隐含层到输出层的权重和偏置,输入层到隐含层的权重和偏置。
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
故BP神经网络的完整流程如下:
文章图片
文章图片
文章图片
重点代码:
# 前向运算
def feedforward(self, a):
"""Return the output of the network if ``a`` is input."""
for b, w in zip(self.biases, self.weights):
a = sigmoid(np.dot(w, a) + b)
return a# 随机梯度下降法eta学习率
def SGD(self, training_data, epochs, mini_batch_size, eta,
test_data=https://www.it610.com/article/None):"""Train the neural network using mini-batch stochastic
gradient descent.The ``training_data`` is a list of tuples
``(x, y)`` representing the training inputs and the desired
outputs.The other non-optional parameters are
self-explanatory.If ``test_data`` is provided then the
network will be evaluated against the test data after each
epoch, and partial progress printed out.This is useful for
tracking progress, but slows things down substantially."""training_data = list(training_data)# 50000个样本
n = len(training_data)if test_data:
test_data = list(test_data)# 10000个样本
n_test = len(test_data)for j in range(epochs):
random.shuffle(training_data)
mini_batches = [
training_data[k:k + mini_batch_size]
for k in range(0, n, mini_batch_size)] # 将50000个样本分成mini_batch_size批分别运行
for mini_batch in mini_batches:
self.update_mini_batch(mini_batch, eta) # 一批一批运行
if test_data:
print("Epoch {} : {} / {}".format(j, self.evaluate(test_data), n_test))
else:
print("Epoch {} complete".format(j))
参考:深入理解BP神经网络 - 简书 (jianshu.com)
相关资料:链接:https://pan.baidu.com/s/11ySWBrYYeQXGUMaQA6ZtLg
提取码:9hf5
推荐阅读
- 笔记|【深度学习】KNN算法学习
- 神经网络|深度学习算法第三课——BP神经网络
- 笔记|【深度学习】BP神经网络
- 毕业设计|【毕业设计】opencv+python+深度学习 实现公式识别
- 操作系统|操作系统——用C++模拟一个分段存储管理
- 毕设选题|【毕业设计】深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv
- 数据库|软件工程专业困局
- #|一文带你享受数学之优美
- dp|最近写过的dp题单(持续更新)