重点实验室网站建设方案,中国空间站最新视频,网站建设多少钱一个,如何在手机上做自己的网站原理 BP 神经网络#xff0c;也称为多层感知机#xff08;Multilayer Perceptron#xff0c;MLP#xff09;#xff0c;是一种常见的神经网络模型#xff0c;用于解决各种机器学习问题#xff0c;包括分类和回归。BP 代表“反向传播”#xff08;Backpropagation#…原理 BP 神经网络也称为多层感知机Multilayer PerceptronMLP是一种常见的神经网络模型用于解决各种机器学习问题包括分类和回归。BP 代表“反向传播”Backpropagation这是该模型训练的关键算法。 BP 神经网络由多个神经元组成通常分为输入层、隐藏层和输出层。每个神经元都与前一层的每个神经元相连并且具有权重用于调整信号的传递和计算。BP 神经网络的原理基于前向传播和反向传播两个关键步骤。 前向传播是在前向传播过程中输入信号从输入层传递到隐藏层和输出层每个神经元将其输入与权重相乘并应用激活函数来产生输出。这个过程一直持续到达输出层生成网络的预测结果。输入层到隐藏层公式: z j ∑ i 1 n w j i ( 1 ) x i z_j\sum_{i1}^{n}w_{ji}^{(1)}x_i zji1∑nwji(1)xi α j f ( z j ) \alpha_jf(z_j) αjf(zj) 输入层到隐藏层公式 z k ∑ j 1 m w k i ( 2 ) α j z_k\sum_{j1}^{m}w_{ki}^{(2)}\alpha_j zkj1∑mwki(2)αj α k f ( z k ) \alpha_kf(z_k) αkf(zk) 其中 z j z_j zj和 z k z_k zk分别表示隐藏层和输出层神经元的加权输入 α j \alpha_j αj和 α k \alpha_k αk表示它们的激活输出是权重是自变量是激活函数。 反向传播是在反向传播过程中网络的输出与实际目标进行比较以计算误差。然后误差通过网络反向传播根据链式规则将误差分配给每个神经元并根据误差调整权重以减小误差。这个过程重复进行多次直到误差收敛到满意的水平或达到预定的训练轮次。其公式如下 Δ w k j ( 2 ) − η ∂ E ∂ w k j ( 2 ) \Delta w_{kj}^{(2)}-\eta \frac{\partial E}{\partial w_{kj}^{(2)}} Δwkj(2)−η∂wkj(2)∂E Δ w j i ( 1 ) − η ∂ E ∂ w j i ( 1 ) \Delta w_{ji}^{(1)}-\eta \frac{\partial E}{\partial w_{ji}^{(1)}} Δwji(1)−η∂wji(1)∂E 其中其中是学习率∂∂表示误差关于权重的偏导数。误差计算中通常使用均方误差Mean Squared ErrorMSE作为误差函数 E 1 2 ∑ k 1 p ( t k − α k ) 2 E\frac12\sum_{k1}^p(t_k-\alpha_k)^2 E21k1∑p(tk−αk)2 其中 t k t_k tk是目标输入 α k \alpha_k αk是网络的实际输出。 BP神经网络结构
代码
多层感知机实际上就是多层全连接网络构成的网络一个示例代码
import tensorflow as tf
from tensorflow import keras# 定义模型
model keras.Sequential([keras.layers.Dense(64, activationrelu, input_shape(X.shape[1],)),keras.layers.Dense(32, activationsigmoid),keras.layers.Dense(1, activationsigmoid)
])
# model.compile(optimizeradam, lossbinary_crossentropy, metrics[accuracy])
# model.fit(X_train, Y_train, epochs100, batch_size32, validation_split0.05)
# odel keras.Sequential([
# keras.layers.Dense(128, activationrelu, input_shape(X.shape[1],)),
# keras.layers.Dense(64, activationsigmoid),
# keras.layers.Dense(32, activationrelu),
# keras.layers.Dense(16, activationsigmoid),
# keras.layers.Dense(8, activationrelu),
# keras.layers.Dense(1, activationsigmoid)
# ])model.compile(optimizeradam, lossbinary_crossentropy, metrics[accuracy])
# 模型训练
historymodel.fit(X_train, Y_train, epochs60, batch_size32, validation_split0.5)# 模型评估
test_loss, test_accuracy model.evaluate(X_test, Y_test)
print(fTest accuracy: {test_accuracy})
# 使用表1的所有行进行水肿概率的预测
# all_predictions model.predict(X2)
# all_predictions