神经网络

本文介绍了神经网络的前向传播过程,从输入层到隐含层再到输出层的计算步骤。接着详细阐述了反向传播中的损失函数和权重更新,特别是针对隐含层到输出层以及输入层到隐含层的权值更新策略。最后,文章通过TensorFlow展示了神经网络的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

x_{0}=1x_{1}=0.05x_{2}=0.10

v_{01}=0.35v_{11}=0.15v_{21}=0.20

v_{02}=0.35v_{12}=0.25v_{22}=0.30

w_{01}=0.60w_{11}=0.40w_{21}=0.45

w_{02}=0.60w_{12}=0.50w_{22}=0.55

y_{1}=0.01y_{2}=0.99

一. 前向传播

  1. 输入层->隐含层

h_{1} 的输入: net_{h_{1}}=x_{0}v_{01}+x_{1}v_{11}+x_{2}v_{21}=0.3775

h_{1} 的输出: out_{h_{1}}=\frac{1}{1+e^{-net_{h_{1}}}}\approx 0.5932699921

h_{2} 的输入: net_{h_{2}}=x_{0}v_{02}+x_{1}v_{12}+x_{2}v_{22}=0.3925

h_{2} 的输出: out_{h_{2}}=\frac{1}{1+e^{-net_{h_{2}}}}\approx 0.5968843783

2. 隐含层->输出层

y_{1} 的输入: net_{y_{1}}=h_{0}w_{01}+h_{1}w_{11}+h_{2}w_{21}\approx 1.1059059671

y_{1} 的输出: out_{y_{1}}=\frac{1}{1+e^{-net_{y_{1}}}}\approx 0.7513650696

y_{2} 的输入: net_{y_{2}}=h_{0}w_{02}+h_{1}w_{12}+h_{2}w_{22}\approx 1.2249214041

y_{2} 的输出: out_{y_{2}}=\frac{1}{1+e^{-net_{y_{2}}}}\approx 0.7729284653

二. 反向传播

  1. 损失函数(均方误差): E_{total}=\frac{1}{2}\sum_{i=1}^{m}{(target_{y_{i}}-out_{y_{i}})^2}
  2. 隐含层->输出层的权值 w 更新

w_{11} 为例, 用整体误差对 w_{11} 求偏导

\frac{\partial E_{total}}{\partial w_{11}}=\frac{\partial E_{y_{1}}}{\partial w_{11}}=\frac{\partial E_{y_{1}}}{\partial out_{y_{1}}}*\frac{\partial out_{y_{1}}}{\partial net_{y_{1}}}*\frac{\partial net_{y_{1}}}{\partial w_{11}}

\frac{\partial E_{total}}{\partial w_{11}}=\frac{\partial E_{y_{1}}}{\partial w_{11}}=(out_{y_{1}}-target_{y_{1}})*(out_{y_{1}}(1-out_{y_{1}}))*h_{1}

w_{11}^{+}=w_{11}-\eta \frac{\partial E_{total}}{\partial w_{11}}=0.40-0.5*0.0821670406=0.3589164797

w_{21}^{+}=w_{21}-\eta \frac{\partial E_{total}}{\partial w_{21}}=0.45-0.5*0.0826676278=0.4086661861

3. 输入层->隐含层的权值 v 更新

v_{11} 为例, 用整体误差对 v_{11} 求偏导

\frac{\partial E_{total}}{\partial v_{11}}=\frac{\partial E_{y_{1}}}{\partial v_{11}}+\frac{\partial E_{y_{2}}}{\partial v_{11}}

\frac{\partial E_{y_{1}}}{\partial v_{11}}=\frac{\partial E_{y_{1}}}{\partial out_{y_{1}}}*\frac{\partial out_{y_{1}}}{\partial net_{y_{1}}}*\frac{\partial net_{y_{1}}}{\partial out_{h_{1}}}*\frac{\partial out_{h_{1}}}{\partial net_{h_{1}}}*\frac{\partial net_{h_{1}}}{\partial v_{11}}

\frac{\partial E_{y_{2}}}{\partial v_{11}}=\frac{\partial E_{y_{2}}}{\partial out_{y_{2}}}*\frac{\partial out_{y_{2}}}{\partial net_{y_{2}}}*\frac{\partial net_{y_{2}}}{\partial out_{h_{1}}}*\frac{\partial out_{h_{1}}}{\partial net_{h_{1}}}*\frac{\partial net_{h_{1}}}{\partial v_{11}}

\frac{\partial E_{y_{1}}}{\partial v_{11}}=(out_{y_{1}}-target_{y_{1}})*(out_{y_{1}}(1-out_{y_{1}}))*w_{11}*(out_{h_{1}}(1-out_{h_{1}}))*x_{1}

\frac{\partial E_{y_{2}}}{\partial v_{11}}=(out_{y_{2}}-target_{y_{2}})*(out_{y_{2}}(1-out_{y_{2}}))*w_{21}*(out_{h_{1}}(1-out_{h_{1}}))*x_{1}

v_{11}^{+}=v_{11}-\eta \frac{\partial E_{total}}{\partial v_{11}}=0.15-0.5*(0.0006683960+0.0007519455)=0.1492898293

三. TensorFlow代码实现

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import math
import numpy as np
import tensorflow as tf

sess = tf.InteractiveSession()

x_input = tf.constant([[0.05, 0.10]], dtype=tf.float32)
y_input = tf.constant([[0.01, 0.99]], dtype=tf.float32)

biases1 = tf.Variable(tf.constant([[0.35, 0.35]], dtype=tf.float32))
weights1 = tf.Variable(tf.constant([[0.15, 0.25], [0.20, 0.30]], dtype=tf.float32))

biases2 = tf.Variable(tf.constant([[0.60, 0.60]], dtype=tf.float32))
weights2 = tf.Variable(tf.constant([[0.40, 0.50], [0.45, 0.55]], dtype=tf.float32))

h_layer1 = tf.nn.sigmoid(tf.matmul(x_input, weights1) + biases1)
y_output = tf.nn.sigmoid(tf.matmul(h_layer1, weights2) + biases2)

loss_mse = tf.reduce_mean(tf.square(y_input - y_output))

tf.global_variables_initializer().run()

for step in range(401):
    tf.train.GradientDescentOptimizer(0.50).minimize(loss_mse).run()
    if step % 20 == 0:
        print(step, y_output.eval())

sess.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值