七、反向传播算法

这篇博客主要介绍了反向传播算法,包括Sigmoid、ReLU、LeakyReLU和Tanh函数的导数,详细讲解了链式法则,并通过Himmelblau函数优化实战展示了反向传播的应用。同时,博主分享了自己在学习过程中的思考和实践体会。
摘要由CSDN通过智能技术生成

七、反向传播算法

内容参考来自https://github.com/dragen1860/Deep-Learning-with-TensorFlow-book开源书籍《TensorFlow2深度学习》,这只是我做的简单的学习笔记,方便以后复习。

1.激活函数导数

1.1Sigmoid 函数导数

在这里插入图片描述
在这里插入图片描述

import numpy as np # 导入 numpy 库
def sigmoid(x): # 实现 sigmoid 函数
	return 1 / (1 + np.exp(-x))
def derivative(x): # sigmoid 导数的计算
    # sigmoid 函数的表达式由手动推导而得
    return sigmoid(x)*(1-sigmoid(x))

1.2ReLU函数导数

在这里插入图片描述
在这里插入图片描述

def derivative(x): # ReLU 函数的导数
    d = np.array(x, copy=True) # 用于保存梯度的张量
    d[x < 0] = 0 # 元素为负的导数为 0
    d[x >= 0] = 1 # 元素为正的导数为 1
    return d

1.3LeakyReLU 函数导数

在这里插入图片描述

在这里插入图片描述

# 其中 p 为 LeakyReLU 的负半段斜率,为超参数
def derivative(x, p):
    dx = np.ones_like(x) # 创建梯度张量,全部初始化为 1
    dx[x < 0] = p # 元素为负的导数为 p
    return dx

1.4Tanh 函数梯度

在这里插入图片描述
在这里插入图片描述

def sigmoid(x): # sigmoid 函数实现
	return 1 / (1 + np.exp(-x))
def tanh(x): # tanh 函数实现
	return 2*sigmoid(2*x) - 1
def derivative(x): # tanh 导数实现
	return 1-tanh(x)**2

2.链式法则

import tensorflow as tf 

# 构建待优化变量
x = tf.constant(1.)
w1 = tf.constant(2.)
b1 = tf.constant(1.)
w2 = tf.constant(2.)
b2 = tf.constant(1.)


with tf.GradientTape(persistent=True) as tape:
	# 非tf.Variable类型的张量需要人为设置记录梯度信息
	tape.watch([w1, b1, w2, b2])
	# 构建2层网络
	y1 = x * w1 + b1	
	y2 = y1 * w2 + b2

# 独立求解出各个导数
dy2_dy1 = tape.gradient(y2, [y1])[0]
dy1_dw1 = tape.gradient(y1, [w1])[0]
dy2_dw1 = tape.gradient(y2, [w1])[0]

# 验证链式法则
print(dy2_dy1 * dy1_dw1)
print(dy2_dw1)

3.Himmelblau 函数优化实战

Himmelblau 函数是用来测试优化算法的常用样例函数之一,它包含了两个自变量𝑦和𝑧,数学表达式是

f ( x , y ) = ( x 2 + y − 11 ) 2 + ( x + y 2 − 7 ) 2 f(x,y)=(x^2+y-11)^2+(x+y^2-7)^2 f(x,y)=(x2+y

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coder_jyz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值