当前位置: 首页 > news >正文

计算神经网络中梯度的核心机制 - 反向传播(backpropagation)算法(1)

计算神经网络中梯度的核心机制 - 反向传播(backpropagation)算法(1)

flyfish

链式法则在深度学习中的主要应用是在反向传播(backpropagation)算法中。
从简单的开始 ,文本说的就是链式法则

R \mathbb{R} R

  • 英文:The set of real numbers
  • 解释:符号 R \mathbb{R} R 表示所有实数的集合,包括所有正数、负数和零。在英语中,这个符号称为 “the set of real numbers” 或简称 “the reals”。
  • 读作:实数集
  • 含义:符号 R \mathbb{R} R 表示所有实数的集合。在数学中,这个符号用来指代从负无穷到正无穷的所有实数。

f ∘ g f \circ g fg

  • 读作 f f f 复合 g g g
  • 含义:符号 ∘ \circ 表示函数的复合。复合函数 f ∘ g f \circ g fg 表示先应用函数 g g g,然后将 g g g 的输出作为函数 f f f 的输入。形式上,这可以写作:
    ( f ∘ g ) ( x ) = f ( g ( x ) ) (f \circ g)(x) = f(g(x)) (fg)(x)=f(g(x))

例子

假设我们有两个函数 g ( x ) = 2 x + 3 g(x) = 2x + 3 g(x)=2x+3 f ( u ) = u 3 f(u) = u^3 f(u)=u3,复合函数 f ∘ g f \circ g fg 表示为:
( f ∘ g ) ( x ) = f ( g ( x ) ) = f ( 2 x + 3 ) = ( 2 x + 3 ) 3 (f \circ g)(x) = f(g(x)) = f(2x + 3) = (2x + 3)^3 (fg)(x)=f(g(x))=f(2x+3)=(2x+3)3

箭头符号的意义

  • f : A → B f: A \to B f:AB 表示函数 f f f 将集合 A A A 中的每个元素映射到集合 B B B 中的一个元素。
  • x ↦ f ( x ) x \mapsto f(x) xf(x) 表示 x x x 经过函数 f f f 的映射得到 f ( x ) f(x) f(x)

例子

  1. 简单映射
    f : R → R f: \mathbb{R} \to \mathbb{R} f:RR 表示一个从实数集合到实数集合的函数。具体的映射可以是:
    f ( x ) = x 2 f(x) = x^2 f(x)=x2
    这里, f f f 将每个实数 x x x 映射到它的平方 x 2 x^2 x2
  2. 复合函数的映射
    如果有两个函数 g g g f f f
  • g : R → R g: \mathbb{R} \to \mathbb{R} g:RR
  • f : R → R f: \mathbb{R} \to \mathbb{R} f:RR并且 g ( x ) = 2 x + 3 g(x) = 2x + 3 g(x)=2x+3 f ( u ) = u 3 f(u) = u^3 f(u)=u3,那么复合函数 f ∘ g f \circ g fg 可以表示为:
    ( f ∘ g ) ( x ) = f ( g ( x ) ) (f \circ g)(x) = f(g(x)) (fg)(x)=f(g(x))
    具体的映射是:
    g : x ↦ 2 x + 3 g: x \mapsto 2x + 3 g:x2x+3
    f : u ↦ u 3 f: u \mapsto u^3 f:uu3
    结合起来:
    ( f ∘ g ) : x ↦ ( 2 x + 3 ) 3 (f \circ g): x \mapsto (2x + 3)^3 (fg):x(2x+3)3

函数的映射关系

在数学中,函数的定义和使用广泛应用于各种映射关系中。箭头符号帮助我们清晰地描述这些关系。更具体地:

  • 箭头 → \to 用于描述集合之间的映射关系。
  • 箭头 ↦ \mapsto 用于描述具体的元素如何被映射。

复合函数的表示

复合函数的映射关系可以通过箭头符号更直观地表示:

  1. g : A → B g: A \to B g:AB
  2. f : B → C f: B \to C f:BC
  3. 复合函数 f ∘ g f \circ g fg 的映射关系为 f ∘ g : A → C f \circ g: A \to C fg:AC
    假设 g g g x x x 映射到 u u u,即 g : x ↦ u g: x \mapsto u g:xu,并且 f f f u u u 映射到 y y y,即 f : u ↦ y f: u \mapsto y f:uy。那么复合函数 f ∘ g f \circ g fg x x x 直接映射到 y y y,即:
    ( f ∘ g ) : x ↦ f ( g ( x ) ) (f \circ g): x \mapsto f(g(x)) (fg):xf(g(x))

复合函数的概念

如果我们有两个函数:

  • g : A → B g: A \to B g:AB
  • f : B → C f: B \to C f:BC
    其中,函数 g g g 将集合 A A A 中的元素映射到集合 B B B,而函数 f f f 将集合 B B B 中的元素映射到集合 C C C。那么,复合函数 f ∘ g f \circ g fg 将集合 A A A 中的元素直接映射到集合 C C C,即:
    ( f ∘ g ) ( x ) = f ( g ( x ) ) (f \circ g)(x) = f(g(x)) (fg)(x)=f(g(x))

例子

  1. 简单的复合函数
    g ( x ) = x 2 g(x) = x^2 g(x)=x2 f ( u ) = sin ⁡ ( u ) f(u) = \sin(u) f(u)=sin(u)。复合函数 ( f ∘ g ) ( x ) (f \circ g)(x) (fg)(x) 表示为:
    ( f ∘ g ) ( x ) = f ( g ( x ) ) = sin ⁡ ( x 2 ) (f \circ g)(x) = f(g(x)) = \sin(x^2) (fg)(x)=f(g(x))=sin(x2)
    在这个例子中,先计算内部函数 g ( x ) = x 2 g(x) = x^2 g(x)=x2,然后将结果代入到外部函数 f ( u ) = sin ⁡ ( u ) f(u) = \sin(u) f(u)=sin(u)
  2. 其他例子
    g ( x ) = 2 x + 3 g(x) = 2x + 3 g(x)=2x+3 f ( u ) = u 3 f(u) = u^3 f(u)=u3。复合函数 ( f ∘ g ) ( x ) (f \circ g)(x) (fg)(x) 表示为:
    ( f ∘ g ) ( x ) = f ( g ( x ) ) = ( 2 x + 3 ) 3 (f \circ g)(x) = f(g(x)) = (2x + 3)^3 (fg)(x)=f(g(x))=(2x+3)3

假设我们有两个函数 g ( x ) g(x) g(x) f ( u ) f(u) f(u)

  1. 先绘制 g ( x ) g(x) g(x) 的图形。例如, g ( x ) = x 2 g(x) = x^2 g(x)=x2 是一个抛物线。
  2. 然后将 g ( x ) g(x) g(x) 的输出代入 f ( u ) f(u) f(u),绘制 f ( g ( x ) ) f(g(x)) f(g(x)) 的图形。例如, f ( u ) = sin ⁡ ( u ) f(u) = \sin(u) f(u)=sin(u),将 u = x 2 u = x^2 u=x2 代入,得到 sin ⁡ ( x 2 ) \sin(x^2) sin(x2) 的图形。
    在这里插入图片描述
import numpy as np
import matplotlib.pyplot as plt# 定义两个函数
def g(x):return x**2def f(u):return np.sin(u)# 生成x的值
x = np.linspace(-2, 2, 400)
y_g = g(x)
y_f = f(y_g)# 初始化图形
fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(8, 12))# 绘制函数 g(x)
ax1.plot(x, y_g, label=r'$g(x) = x^2$', color='blue')
ax1.set_title('Function $g(x)$')
ax1.set_xlabel('$x$')
ax1.set_ylabel('$g(x)$')
ax1.legend()# 绘制函数 f(u)
u = np.linspace(0, 4, 400)
ax2.plot(u, f(u), label=r'$f(u) = \sin(u)$', color='green')
ax2.set_title('Function $f(u)$')
ax2.set_xlabel('$u$')
ax2.set_ylabel('$f(u)$')
ax2.legend()# 绘制复合函数 h(x) = f(g(x))
ax3.plot(x, y_f, label=r'$h(x) = \sin(x^2)$', color='red')
ax3.set_title('Composite Function $h(x) = f(g(x))$')
ax3.set_xlabel('$x$')
ax3.set_ylabel('$h(x)$')
ax3.legend()# 调整子图之间的间距
plt.subplots_adjust(hspace=0.5)# 显示图形
plt.show()

链式法则(Chain Rule)是微积分中一个重要的求导法则,它用于求复合函数的导数。复合函数是指一个函数的输入是另一个函数的输出,形式上可以写作 y = f ( g ( x ) ) y = f(g(x)) y=f(g(x))。链式法则告诉我们如何求这种复合函数的导数。

如果我们有两个函数 f f f g g g,其中 y = f ( u ) y = f(u) y=f(u) u = g ( x ) u = g(x) u=g(x),那么根据链式法则,复合函数 y = f ( g ( x ) ) y = f(g(x)) y=f(g(x)) x x x 的导数可以表示为:
d y d x = d y d u ⋅ d u d x \frac{dy}{dx} = \frac{dy}{du} \cdot \frac{du}{dx} dxdy=dudydxdu

用更直观的方式理解,链式法则表明:

  1. 首先求出内部函数 u = g ( x ) u = g(x) u=g(x) x x x 的导数,即 d u d x \frac{du}{dx} dxdu
  2. 然后求出外部函数 y = f ( u ) y = f(u) y=f(u) u u u 的导数,即 d y d u \frac{dy}{du} dudy
  3. 最后将这两个导数相乘,得到复合函数 y = f ( g ( x ) ) y = f(g(x)) y=f(g(x)) x x x 的导数。

例子

假设有函数 y = sin ⁡ ( x 2 ) y = \sin(x^2) y=sin(x2),我们希望求 y y y x x x 的导数。

  1. 首先,我们将 y = sin ⁡ ( x 2 ) y = \sin(x^2) y=sin(x2) 看作两个函数的复合,即 y = sin ⁡ ( u ) y = \sin(u) y=sin(u) u = x 2 u = x^2 u=x2
  2. 对内部函数 u = x 2 u = x^2 u=x2 求导: d u d x = 2 x \frac{du}{dx} = 2x dxdu=2x
  3. 对外部函数 y = sin ⁡ ( u ) y = \sin(u) y=sin(u) 求导: d y d u = cos ⁡ ( u ) \frac{dy}{du} = \cos(u) dudy=cos(u)
  4. 将这两个结果相乘: d y d x = d y d u ⋅ d u d x = cos ⁡ ( x 2 ) ⋅ 2 x \frac{dy}{dx} = \frac{dy}{du} \cdot \frac{du}{dx} = \cos(x^2) \cdot 2x dxdy=dudydxdu=cos(x2)2x
    所以, y = sin ⁡ ( x 2 ) y = \sin(x^2) y=sin(x2) x x x 的导数为:
    d y d x = 2 x cos ⁡ ( x 2 ) \frac{dy}{dx} = 2x \cos(x^2) dxdy=2xcos(x2)

微分符号 d d d 的含义

  1. 导数的定义
    导数表示函数在某一点的变化率。对于函数 y = f ( x ) y = f(x) y=f(x),它在 x x x 处的导数定义为: d y d x = lim ⁡ Δ x → 0 Δ y Δ x \frac{dy}{dx} = \lim_{\Delta x \to 0} \frac{\Delta y}{\Delta x} dxdy=limΔx0ΔxΔy这里, Δ y \Delta y Δy Δ x \Delta x Δx 分别表示 y y y x x x 的增量。当这些增量趋近于零时,我们用 d y dy dy d x dx dx 来表示这些非常小的变化量。
  2. 微分表示法
    微分符号 d d d 用于表示一个函数的微小变化。例如, d x dx dx 表示变量 x x x 的一个非常小的变化量。同样地, d y dy dy 表示函数 y y y 的一个非常小的变化量。如果 y = f ( x ) y = f(x) y=f(x),那么 d y dy dy 表示 y y y x x x 的微小变化,可以表示为: d y = f ′ ( x ) ⋅ d x dy = f'(x) \cdot dx dy=f(x)dx这里, f ′ ( x ) f'(x) f(x) 是函数 f ( x ) f(x) f(x) 的导数,表示 x x x 处的变化率。

链式法则中的 d d d

在链式法则中, d d d 表示不同变量的微小变化。例如:

  • d u du du 表示变量 u u u 的微小变化量。

  • d x dx dx 表示变量 x x x 的微小变化量。

  • d y dy dy 表示函数 y y y 的微小变化量。
    链式法则告诉我们,当我们有复合函数 y = f ( g ( x ) ) y = f(g(x)) y=f(g(x)) 时, y y y x x x 的变化可以分解为 y y y u u u 的变化以及 u u u x x x 的变化:
    d y d x = d y d u ⋅ d u d x \frac{dy}{dx} = \frac{dy}{du} \cdot \frac{du}{dx} dxdy=dudydxdu
    这里,每个 d d d 都表示相应变量的微小变化。例如:

  • d y d x \frac{dy}{dx} dxdy 表示 y y y x x x 的变化率。

  • d y d u \frac{dy}{du} dudy 表示 y y y u u u 的变化率。

  • d u d x \frac{du}{dx} dxdu 表示 u u u x x x 的变化率。
    通过这样分解,我们可以更容易地计算复合函数的导数。

基于极限和增量来理解链式法则

  1. 定义复合函数和导数
  • y = f ( u ) y = f(u) y=f(u),其中 u = g ( x ) u = g(x) u=g(x)
  • 我们需要求 y = f ( g ( x ) ) y = f(g(x)) y=f(g(x)) x x x 的导数。
  1. 增量表示
  • Δ x \Delta x Δx x x x 的一个非常小的增量。
  • 相应的, u u u 有一个非常小的增量 Δ u \Delta u Δu,其中 Δ u = g ( x + Δ x ) − g ( x ) \Delta u = g(x + \Delta x) - g(x) Δu=g(x+Δx)g(x)
  • y y y 的增量表示为 Δ y = f ( g ( x + Δ x ) ) − f ( g ( x ) ) \Delta y = f(g(x + \Delta x)) - f(g(x)) Δy=f(g(x+Δx))f(g(x))
  1. 导数的定义 d y d x = lim ⁡ Δ x → 0 Δ y Δ x \frac{dy}{dx} = \lim_{\Delta x \to 0} \frac{\Delta y}{\Delta x} dxdy=limΔx0ΔxΔy
  2. 应用链式法则的思想 Δ y = f ( g ( x + Δ x ) ) − f ( g ( x ) ) \Delta y = f(g(x + \Delta x)) - f(g(x)) Δy=f(g(x+Δx))f(g(x))可以表示为: Δ y Δ x = f ( g ( x + Δ x ) ) − f ( g ( x ) ) Δ x \frac{\Delta y}{\Delta x} = \frac{f(g(x + \Delta x)) - f(g(x))}{\Delta x} ΔxΔy=Δxf(g(x+Δx))f(g(x))
  3. 拆分增量
    由于 u = g ( x ) u = g(x) u=g(x),我们可以引入 Δ u \Delta u Δu Δ y Δ x = f ( g ( x + Δ x ) ) − f ( g ( x ) ) g ( x + Δ x ) − g ( x ) ⋅ g ( x + Δ x ) − g ( x ) Δ x \frac{\Delta y}{\Delta x} = \frac{f(g(x + \Delta x)) - f(g(x))}{g(x + \Delta x) - g(x)} \cdot \frac{g(x + \Delta x) - g(x)}{\Delta x} ΔxΔy=g(x+Δx)g(x)f(g(x+Δx))f(g(x))Δxg(x+Δx)g(x)
  4. 极限过程
    Δ x → 0 \Delta x \to 0 Δx0,我们有 Δ u → 0 \Delta u \to 0 Δu0,因此: d y d x = lim ⁡ Δ x → 0 ( f ( g ( x + Δ x ) ) − f ( g ( x ) ) g ( x + Δ x ) − g ( x ) ⋅ g ( x + Δ x ) − g ( x ) Δ x ) \frac{dy}{dx} = \lim_{\Delta x \to 0} \left( \frac{f(g(x + \Delta x)) - f(g(x))}{g(x + \Delta x) - g(x)} \cdot \frac{g(x + \Delta x) - g(x)}{\Delta x} \right) dxdy=Δx0lim(g(x+Δx)g(x)f(g(x+Δx))f(g(x))Δxg(x+Δx)g(x))根据导数的定义,我们有: d y d x = ( lim ⁡ Δ u → 0 Δ y Δ u ) ⋅ ( lim ⁡ Δ x → 0 Δ u Δ x ) \frac{dy}{dx} = \left( \lim_{\Delta u \to 0} \frac{\Delta y}{\Delta u} \right) \cdot \left( \lim_{\Delta x \to 0} \frac{\Delta u}{\Delta x} \right) dxdy=(Δu0limΔuΔy)(Δx0limΔxΔu)
  5. 导数表示 d y d x = d y d u ⋅ d u d x \frac{dy}{dx} = \frac{dy}{du} \cdot \frac{du}{dx} dxdy=dudydxdu其中, d y d u = lim ⁡ Δ u → 0 Δ y Δ u \frac{dy}{du} = \lim_{\Delta u \to 0} \frac{\Delta y}{\Delta u} dudy=Δu0limΔuΔy d u d x = lim ⁡ Δ x → 0 Δ u Δ x \frac{du}{dx} = \lim_{\Delta x \to 0} \frac{\Delta u}{\Delta x} dxdu=Δx0limΔxΔu
    因此复合函数的导数可以表示为外层函数的导数乘以内层函数的导数。

可视化

  • g(x):定义了内层函数 sin ⁡ ( x ) \sin(x) sin(x)
  • f(u):定义了外层函数 exp ⁡ ( u ) \exp(u) exp(u)
  • g_prime(x) 和 f_prime(u):定义了对应的导数。
  • h(x):复合函数 e sin ⁡ ( x ) e^{\sin(x)} esin(x)
  • h_prime(x):复合函数的导数,使用链式法则 f ′ ( g ( x ) ) ⋅ g ′ ( x ) f'(g(x)) \cdot g'(x) f(g(x))g(x)

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation# 定义两个函数及其导数
def g(x):return np.sin(x)def f(u):return np.exp(u)def g_prime(x):return np.cos(x)def f_prime(u):return np.exp(u)# 复合函数及其导数
def h(x):return f(g(x))def h_prime(x):return f_prime(g(x)) * g_prime(x)# 生成x的值
x = np.linspace(0, 2 * np.pi, 400)
y_g = g(x)
y_f = f(y_g)
y_h = h(x)# 初始化图形
fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(8, 12))# 绘制函数 g(x)
ax1.plot(x, y_g, label=r'$g(x) = \sin(x)$', color='blue')
ax1.set_title('Function $g(x)$')
ax1.set_xlabel('$x$')
ax1.set_ylabel('$g(x)$')
ax1.legend()# 绘制函数 f(u)
u = np.linspace(-1, 1, 400)
ax2.plot(u, f(u), label=r'$f(u) = e^{u}$', color='green')
ax2.set_title('Function $f(u)$')
ax2.set_xlabel('$u$')
ax2.set_ylabel('$f(u)$')
ax2.legend()# 绘制复合函数 h(x) = f(g(x))
ax3.plot(x, y_h, label=r'$h(x) = e^{\sin(x)}$', color='red')
ax3.set_title('Composite Function $h(x) = f(g(x))$')
ax3.set_xlabel('$x$')
ax3.set_ylabel('$h(x)$')
ax3.legend()plt.subplots_adjust(hspace=0.5)# 初始化点和切线
point1, = ax1.plot([], [], 'ro')  # 点
tangent_line1, = ax1.plot([], [], 'r--')  # 切线point2, = ax2.plot([], [], 'ro')  # 点
tangent_line2, = ax2.plot([], [], 'r--')  # 切线point3, = ax3.plot([], [], 'ro')  # 点
tangent_line3, = ax3.plot([], [], 'r--')  # 切线def init():point1.set_data([], [])tangent_line1.set_data([], [])point2.set_data([], [])tangent_line2.set_data([], [])point3.set_data([], [])tangent_line3.set_data([], [])return point1, tangent_line1, point2, tangent_line2, point3, tangent_line3def animate(i):x0 = i * 2 * np.pi / 100  # 从 0 开始,步长为 2π / 100y0_g = g(x0)y0_h = h(x0)# 绘制 g(x) 的点和切线slope_g = g_prime(x0)point1.set_data([x0], [y0_g])tangent_x1 = np.array([x0 - 0.5, x0 + 0.5])tangent_y1 = y0_g + slope_g * (tangent_x1 - x0)tangent_line1.set_data(tangent_x1, tangent_y1)# 绘制 f(g(x)) 的点和切线u0 = y0_gy0_f = f(u0)slope_f = f_prime(u0)point2.set_data([u0], [y0_f])tangent_x2 = np.array([u0 - 0.5, u0 + 0.5])tangent_y2 = y0_f + slope_f * (tangent_x2 - u0)tangent_line2.set_data(tangent_x2, tangent_y2)# 绘制 h(x) = f(g(x)) 的点和切线slope_h = h_prime(x0)point3.set_data([x0], [y0_h])tangent_x3 = np.array([x0 - 0.5, x0 + 0.5])tangent_y3 = y0_h + slope_h * (tangent_x3 - x0)tangent_line3.set_data(tangent_x3, tangent_y3)return point1, tangent_line1, point2, tangent_line2, point3, tangent_line3ani = animation.FuncAnimation(fig, animate, frames=100, init_func=init, blit=True)# 保存为gif
ani.save('chain_rule_animation.gif', writer='imagemagick')# 显示动画
plt.show()

相关文章:

计算神经网络中梯度的核心机制 - 反向传播(backpropagation)算法(1)

计算神经网络中梯度的核心机制 - 反向传播(backpropagation)算法(1) flyfish 链式法则在深度学习中的主要应用是在反向传播(backpropagation)算法中。 从简单的开始 ,文本说的就是链式法则 R …...

VUE实现简易购物车

主要是对基础的指令的使用&#xff0c;直接上代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&l…...

混沌工程——从捣乱的视角看系统稳定性

概念 混沌工程是通过捣乱实验探究系统稳定性的实践过程&#xff0c;其作战武器是风险因子&#xff0c;即在健康的运行环境中引入风险变量来验证系统对风险的抵抗能力&#xff0c;它的作用是推动系统容错能力建设、验证监控告警及时性、提升研发问题排查能力。 混沌工程的工作…...

Windows宝塔面板部署ThinkPHP8.0创建Vue项目案例

安装ThinkPHP8.0 登录宝塔面板&#xff0c;创建一个站点。 输入composer代码&#xff0c;执行完成后自动创建TP目录 composer create-project topthink/think tp 网站目录设置为tp&#xff0c;运行目录设置为public 设置PHP版本为8.0以上&#xff0c;不然会出现下面的报错代…...

5G频段简介

5G频段 5G网络一共有29个频段&#xff0c;主要被分为两个频谱范围&#xff0c;其中6GHz以下的频段共有26个&#xff08;统称为Sub6GHz&#xff09;&#xff0c;毫米波频段有3个。目前国内主要使用的是Sub6GHz&#xff0c;包括n1/n3/n28/n41/n77/n78/n79共7个频段。具体介绍如下…...

【python学习】bytearray 数组

在Python中&#xff0c;bytearray 是一个可变序列&#xff0c;用于表示一个字节数组。与不可变的 bytes 类型相比&#xff0c;bytearray 允许你修改其内容。你可以通过索引来访问和修改 bytearray 中的元素&#xff0c;也可以添加或删除元素。 使用 bytearray 的一些示例&…...

Labview_Occurrencel(事件发生)

PS&#xff1a;这里遇到 一个很Low的事情&#xff1a; 在停止第二个while循环的时候出现了停止不了的情况。因为等待事件发生设置的超时时间为:-1。所以等事件发生后出现了条件接线端已经执行的情况&#xff0c;所以当下次事件发生时未能及时停止。初版的停止设置如下图&#x…...

天气网站爬虫及可视化

摘要&#xff1a;随着互联网的快速发展&#xff0c;人们对天气信息的需求也越来越高。本论文基于Python语言&#xff0c;设计并实现了一个天气网站爬虫及可视化系统。该系统通过网络爬虫技术从多个天气网站上获取实时的天气数据&#xff0c;并将数据进行清洗和存储。同时&#…...

【python - 数据】

一、序列 序列&#xff08;sequence&#xff09;是一组有顺序的值的集合&#xff0c;是计算机科学中的一个强大且基本的抽象概念。序列并不是特定内置类型或抽象数据表示的实例&#xff0c;而是一个包含不同类型数据间共享行为的集合。也就是说&#xff0c;序列有很多种类&…...

几种热管的构造

1、超薄热管构造形式 在实际应用中&#xff0c;超薄热管通常定义为厚度小于2.0mm的平板热管。超薄热管很薄&#xff0c;可紧贴电子元件表面散热&#xff0c;故被广泛应用于移动和可携带电子设备&#xff0c;如智能手机、笔记本电脑和智能手表。用于笔记本电脑和平板电脑的超薄…...

【GitOps】使用Google工具JIB实现本地无需安装容器推送镜像,加速SpringCloud项目开发

文章目录 一、效果展示二、简介三、安装Jib插件1、区分环境2、安装插件一、效果展示 本地是window系统,无docker环境,没有任何runtime,使用jib工具打包镜像并推送完成,用时20秒 二、简介 Jib 是 Google 开发的一款开源工具,旨在帮助 Java 开发者更高效地将 Java 应用程…...

【proteus经典实战】16X192点阵程序

一、简介 6X192点阵程序通常用于表示高分辨率图像或文字&#xff0c;其中16X表示像素阵列的宽度&#xff0c;192表示每个像素阵列中的点阵数&#xff0c;16X192点阵程序需要一定的编程知识和技能才能编写和调试&#xff0c;同时还需要考虑硬件设备的兼容性和性能等因素。 初始…...

小白上手AIGC-基于FC部署stable-diffusion

AIGC AIGC&#xff08;人工智能创造内容&#xff09;作为一种基于人工智能技术生成内容的新型创作模式。打破了过去大家对于AI的理解都是说只能涉足部分领域而无法涉足艺术或者是其他的创作领域的定律&#xff0c;现在的AIGC也能够创作内容了&#xff0c;而不再只是单纯的返回…...

一些指标的学习

1.平均倒数排名&#xff08;MRR&#xff09; 1.定义 MRR 是衡量检索系统返回的结果列表中第一个相关结果位置的指标。具体来说&#xff0c;它是所有查询倒数排名的平均值。 2.计算步骤 对每个查询&#xff0c;找到第一个正确答案在结果列表中的排名 &#x1d445;&#x1d44…...

dledger原理源码分析系列(三)-选主

简介 dledger是openmessaging的一个组件&#xff0c; raft算法实现&#xff0c;用于分布式日志&#xff0c;本系列分析dledger如何实现raft概念&#xff0c;以及dledger在rocketmq的应用 本系列使用dledger v0.40 本文分析dledger的选主 关键词 Raft Openmessaging 心跳/选…...

如何修改PDF文档的作者名称?

要修改一个 PDF 文档的作者名称&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. **使用 Adobe Acrobat**&#xff08;如果有&#xff09;&#xff1a; - Adobe Acrobat 是一个功能强大的 PDF 编辑工具&#xff0c;支持修改文档属性信息&#xff0c;包括作者名称。打开…...

从笔灵到AI去痕:全方位提升内容创作与学术诚信

内容为王&#xff0c;在内容创作的世界中尤为重要。然而&#xff0c;面对写作时常常感到无从下手&#xff1a;有时缺乏灵感&#xff0c;有时难以表达清楚自己的想法。AI写作助手的出现&#xff0c;为这些问题提供了创新的解决方案&#xff0c;极大地改变了内容创作的过程。 今…...

考试如果出现汉诺塔问题怎么办?

对于这道题来说 就按照测试案例里的数字进行输入 测试案例用100 那这三只鸡的具体最多能有多少只鸡呢&#xff1f; 用总数除以这只鸡的单价>>>>>>>即为这只鸡最多有 >>>>>>>> n / 单价 修改后 >>>>> 不只适…...

导出word模板开发记录

exportWordDocx.js import JSZipUtils from “jszip-utils” import Docxtemplater from “docxtemplater” import {saveAs} from “file-saver” import PizZip from “pizzip” const exportWordDocx (demoUrl, docxData, fileName) > {// 读取并获得模板文件的二进制…...

PHP爬虫类的并发与多线程处理技巧

PHP爬虫类的并发与多线程处理技巧 引言&#xff1a; 随着互联网的快速发展&#xff0c;大量的数据信息存储在各种网站上&#xff0c;获取这些数据已经成为很多业务场景下的需求。而爬虫作为一种自动化获取网络信息的工具&#xff0c;被广泛应用于数据采集、搜索引擎、舆情分析…...

用Python将PowerPoint演示文稿转换到图片和SVG

PowerPoint演示文稿作为展示创意、分享知识和表达观点的重要工具&#xff0c;被广泛应用于教育、商务汇报及个人项目展示等领域。然而&#xff0c;面对不同的分享场景与接收者需求&#xff0c;有时需要我们将PPT内容以图片形式保存与传播。这样能够避免软件兼容性的限制&#x…...

机电公司管理小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;管理员管理&#xff0c;客户管理&#xff0c;公告管理&#xff0c;考勤管理&#xff0c;请假管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;公告&#xff0c;机电零件&…...

SQL中的子查询和CTE(with ....as..)

第一次看到with as 这种类似于python中读文件的写法还是挺疑惑的&#xff0c;其实它是CTE&#xff0c;功能和子查询很类似但又有不同点&#xff0c;在实际应用场景中具有着独特作用。 子查询 子查询是在主查询中的嵌套查询&#xff0c;可以出现在SELECT、FROM、WHERE等子句中…...

Cesium 基本概念:创建实体和相机控制

基本概念 Entity // 创建一个实体 const entity_1 viewer.entities.add({position: new Cesium.Cartesian3(0, 0, 10000000),point: {pixelSize: 10,color: Cesium.Color.BLUE} });// 通过经纬度创建实体 const position Cesium.Cartesian3.fromDegrees(180.0, 0.0); // 创…...

vue使用scrollreveal和animejs实现页面滑动到指定位置后再开始执行动画效果

效果图 效果链接&#xff1a;http://website.livequeen.top 介绍 一、Scrollreveal ScrollReveal 是一个 JavaScript 库&#xff0c;用于在元素进入/离开视口时轻松实现动画效果。 ScrollReveal 官网链接&#xff1a;ScrollReveal 二、animejs animejs是一个好用的动画库…...

在Ubuntu 16.04上安装和配置GitLab的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 GitLab CE&#xff08;Community Edition&#xff09;是一个开源应用程序&#xff0c;主要用于托管 Git 仓库&#xff0c;并提供额…...

STM32的SPI通信

1 SPI协议简介 SPI&#xff08;Serial Peripheral Interface&#xff09;协议是由摩托罗拉公司提出的通信协议&#xff0c;即串行外围设备接口&#xff0c;是一种高速全双工的通信总线。它被广泛地使用在ADC、LCD等设备与MCU间&#xff0c;使用于对通信速率要求较高的场合。 …...

机器学习引领教育革命:智能教育的新时代

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀目录 &#x1f4d2;1. 引言&#x1f4d9;2. 机器学习在教育中的应用&#x1f31e;个性化学习&#x1f319;评估与反馈的智能化⭐教学资源的优…...

6月29日,每日信息差

第一、位于四川省绵阳市的中广核质子治疗装备制造基地正式通过竣工验收&#xff0c;为全球装机数量和治疗患者数量最多的国际领先质子治疗系统全面国产化奠定了坚实基础。质子治疗作为目前全球最尖端的肿瘤放射治疗技术之一&#xff0c;与传统放疗技术相比&#xff0c;质子治疗…...

SpringCloud中复制模块然后粘贴,文件图标缺少蓝色方块

再maven中点击&#xff0b;号&#xff0c;把当前pom文件交给maven管理即可...

JS乌龟吃鸡游戏

代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>乌龟游戏</title><script type"text/javascript">function move(obj){//乌龟图片高度var wuGui_height 67;…...

第十节:学习ConfigurationProperties类来配置pojo实体类参数(自学Spring boot 3.x的第二天)

大家好&#xff0c;我是网创有方 。这节记录下如何使用ConfigurationProperties来实现自动注入配置值。。实现将配置文件里的application.properties的参数赋值给实体类并且打印出来。 第一步&#xff1a;新建一个实体类WechatConfig package cn.wcyf.wcai.config;import org…...

如何学习Node.js

Node.js是一个开源、跨平台的JavaScript运行环境&#xff0c;它允许你在服务器端使用JavaScript。以下是一些步骤和资源&#xff0c;可以帮助你开始学习Node.js&#xff1a; ### 1. 基础知识 首先&#xff0c;确保你熟悉JavaScript语言的基础。Node.js是基于JavaScript的&…...

云计算基础知识

前言&#xff1a; 随着ICT技术的高速发展&#xff0c;企业架构对计算、存储、网络资源的需求更高&#xff0c;急需一种新的架构来承载业务&#xff0c;以获得持续&#xff0c;高速&#xff0c;高效的发展&#xff0c;云计算应运而生。 云计算背景 信息大爆炸时代&#xff1a…...

基于单片机光纤测距系统的设计与实现

摘要 &#xff1a; 光纤由于其频带宽 、 损耗低及抗干扰能力强等优点已被广泛地应用在通信 、 电子及电力方面 &#xff0c; 是我们生产生活中必不可少的媒介。 在实际的光纤实验 、 安装 、 运营和维护工作中 &#xff0c; 一种精准 、 轻便和易操作的光纤测距系统显得尤为重…...

python项目实战——人生重开模拟器

文章目录 1.菜单栏的编写2.玩家确定颜值、体质、智力、家境3.生成性别4.设定角色出生点5.各个年龄段的变化5.1 幼年阶段5.2 青年阶段5.3中年阶段5.4 晚年阶段 6.整体代码 人生重开模拟器是一款文字类小游戏. 玩家可根据提示输入角色的初始属性之后, 就可以开启不同的人生经历. …...

小时候的子弹击中了现在的我-hive进阶:案例解析(第18天)

系列文章目录 一、Hive表操作 二、数据导入和导出 三、分区表 四、官方文档&#xff08;了解&#xff09; 五、分桶表&#xff08;熟悉&#xff09; 六、复杂类型&#xff08;熟悉&#xff09; 七、Hive乱码解决&#xff08;操作。可以不做&#xff0c;不影响&#xff09; 八、…...

电影票房预测管理系统设计

电影票房预测管理系统的开发涉及多个层面的设计&#xff0c;包括但不限于数据收集、数据分析、预测模型构建、用户界面设计和系统集成。以下是一个基本的系统设计框架&#xff1a; 1. 数据收集模块&#xff1a;这是整个系统的基础。需要收集的数据可能包括历史票房数据、上映电…...

正则表达式与Pyhton

一、正则表达式的规则 1、支持普通字符匹配 2、元字符&#xff0c;一个符号匹配一堆字符 \d 匹配数字 \w 匹配数字、字母、下划线 \D \d的取反&#xff0c;除了数字全部匹配 \W \w的取反 [abc] 匹配字母a、b、c [^abc] [abc]的取反&#xf…...

Transformer常见面试题

目录 1.Transformer为何使用多头注意力机制&#xff1f;&#xff08;为什么不使用一个头&#xff09; 2.Transformer为什么Q和K使用不同的权重矩阵生成&#xff0c;为何不能使用同一个值进行自身的点乘&#xff1f; &#xff08;注意和第一个问题的区别&#xff09; 3.Transf…...

Linux——vim的配置文件+异常处理

vim的配置文件&#xff1a; [rootserver ~]# vim /etc/vimrc # 输入以下内容 set nu # 永久设置行号 shell [rootserver ~]# vim /etc/vimrc 或者 vim ~/.vimrc set hlsearch "高亮度反白 set backspace2 "可随时用退格键删除 set autoindent…...

node mySql 实现数据的导入导出,以及导入批量插入的sql语句

node 实现导出, 在导出excel中包含图片&#xff08;附件&#xff09; node 实现导出, 在导出excel中包含图片&#xff08;附件&#xff09;-CSDN博客https://blog.csdn.net/snows_l/article/details/139999392?spm1001.2014.3001.5502 一、效果 如图&#xff1a; 二、导入 …...

Webpack: 底层配置逻辑

概述 Webpack 5 提供了非常强大、灵活的模块打包功能&#xff0c;配合其成熟生态下数量庞大的插件、Loader 资源&#xff0c;已经能够满足大多数前端项目的工程化需求&#xff0c;但代价则是日益复杂、晦涩的使用方法&#xff0c;开发者通常需要根据项目环境、资源类型、编译目…...

数字图像处理期末复习题1

个人名片&#xff1a; &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir2025WB…...

poi-tl 生成 word 文件(插入文字、图片、表格、图表)

文章说明 本篇文章主要通过代码案例的方式&#xff0c;展示 poi-tl 生成 docx 文件的一些常用操作&#xff0c;主要涵盖以下内容 &#xff1a; 插入文本字符&#xff08;含样式、超链接&#xff09;插入图片插入表格引入标签&#xff08;通过可选文字的方式&#xff0c;这种方…...

centos上部署Ollama平台,实现语言大模型本地部署

网上有很多大模型&#xff0c;很多都是远程在线调用ChatGPT的api来实现的&#xff0c;自己本地是没有大模型的&#xff0c;这里和大家分享一个大模型平台&#xff0c;可以实现本地快速部署大模型。 Ollama是一个开源项目&#xff0c;它提供了一个平台和工具集&#xff0c;用于部…...

Java学习 - Redis Redigo简单介绍

Redigo 驱动下载 go get github.com/garyburd/redigo/redis获取redis服务器连接 c, err : redis.Dial("tcp", "127.0.0.1:6379")if err ! nil {panic(err) }defer c.Close()命令使用 v, err : c.Do("SET","hello","world&quo…...

【鸿蒙学习笔记】ArkTS组件 Blank

官方文档&#xff1a;Blank 目录标题...

如何使用Spring Boot进行单元测试

如何使用Spring Boot进行单元测试 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Spring Boot项目中进行单元测试&#xff0c;确保代码质量…...

2024steam夏促商店打不开、steam活动加载不了解决方法一览

今年的夏促终于开始了!目前可以看到很多精品小游戏在促销列表内&#xff0c;活动正式开启后还不知道又会是怎样的一幅场景。因为每年夏促都会有不少刚高考完的新手加入&#xff0c;遇到常见的steam商店打不开、活动页面不加载等问题不知道怎么解决。所以这里给大家准备了几种常…...

免杀笔记 ----> DLL注入

这段时间我们暂时没什么事情干的话我们就继续更新我们的免杀笔记力&#xff01;&#xff01;&#xff01; &#xff1a;今天我们讲DLL注入 目录 1.DLL注入 2.直接加载DLL&#xff1f; 3.远程线程注入 获取Handle 远程申请内存空间 将我们的CS的DLL加载入内存 创建远程线…...

Nifi脚本组件ExecuteScript 的使用(一)

ExecuteScript 组件的基本使用 前面已经介绍过Nifi中基本的数据流程&#xff0c;这里介绍一下最为常用的一个组件&#xff0c;ExecuteScript processor&#xff0c;顾名思义ExecuteScript组件是一组以自定义脚本为主体的组件&#xff0c;意思就是&#xff0c;可以在该组件内部…...

Vue 路由传参 query方法 bug 记录

问题描述 vue 路由传参 踩坑 this.$router.push({path: "xxxxxxx",query: {opportunity_id:row.opportunity_id,constructor:row.constructor,},});解决方案&#xff1a; 上述方法传入新页面时&#xff0c;访问的 this.$route.query 会有bug 每一次刷新都会在最后一…...

windows USB设备驱动开发-开发USB 设备端驱动

USB 设备是通过单个端口连接到计算机的外设&#xff0c;例如鼠标设备和键盘。 USB 客户端驱动程序是计算机上安装的软件&#xff0c;该软件与硬件通信以使设备正常运行。 如果设备属于 Microsoft 支持的设备类&#xff0c;Windows 会为该设备加载 Microsoft 提供的 USB 驱动程序…...

探索大型语言模型自动评估 LLM 输出长句准确性的方法

LLM现在能够自动评估较长文本中的事实真实性 源码地址&#xff1a;https://github.com/google-deepmind/long-form-factuality 论文地址&#xff1a;https://arxiv.org/pdf/2403.18802.pdf 这篇论文是关于谷歌DeepMind的&#xff0c;提出了新的数据集、评估方法和衡量标准&am…...

Django REST Framework(四)DRF APIVIEW

REST framework 传入视图的request对象不再是Django默认的HttpRequest对象&#xff0c;而是REST framework提供的扩展了HttpRequest类的Request类的对象。 REST framework 提供了Parser解析器&#xff0c;在接收到请求后会自动根据Content-Type指明的请求数据类型&#xff08;…...

“超级智能轿车”智己L6开启全国用户交付

继昨天智己L6官宣公布,新增上市权益价为22.69万元的Max 长续航欧;今日又添重磅好消息!新晋爆品智己L6在北京、上海、广州、深圳、杭州、苏州、南京等十余座城市,将首批新车交付用户,正式拉开全国交付的帷幕。同时,智己L6的IM AD“去高精地图城市NOA”在上海、深圳、广州、…...

售价53.86万元新款奔驰E350eL插混版正式上市

6月1日,在 2024 粤港澳车展上,新款梅赛德斯-奔驰 E 350e L 插混版正式上市,售价 53.86 万元。外观方面,新车整体依旧延续燃油版车型的样子,标志性的“花生”大灯,大尺寸格栅以及立标等元素均得以保留。尺寸方面,新车也是保持一直,长宽高分别为 5092/1880/1489mm,轴距为…...

秦L/海豹06的到来,扯下了合资燃油车最后一块遮羞布

从事汽车行业的小伙伴们肯定都知道,现在的新车价格很不稳定。即便是强如奔驰、宝马、奥迪这样的实力派传统豪华品牌,面对着市场环境的变化,中国品牌的崛起,在价格上一步一步下探,跌到了谷底中的谷底。可以预见的是,过去合资燃油车,靠品牌影响力,靠品质取胜的年代已经一…...

Open3D-Geometry-2:Mesh网格的一些基础操作示例

0. 引言 Open3D 有一个名为 的 3D 三角形网格数据结构TriangleMesh。下面的代码显示了如何从ply文件中读取三角形网格并打印其顶点和三角形。 import open3d as o3d import numpy as npprint("Testing mesh in Open3D...") armadillo_mesh = o3d.data.ArmadilloMes…...

QT截图程序,可多屏幕截图二,增加调整截图区域功能

上一篇QT截图程序&#xff0c;可多屏幕截图只是实现了最基本的截图功能&#xff0c;虽然能用但是缺点也有&#xff0c;没办法更改选中的区域&#xff0c;这在实际使用时不太方便。这篇增加了这个功能。先看看效果。 实现代码为&#xff1a; 头文件 #ifndef MASKWIDGET_H #de…...

aws glue配置读取本地kafka数据源

创建连接时填写本地私有ip地址&#xff0c;选择网络配置 配置任务选择kafka作为数据源 但是执行任务时日志显示连接失败 文档提到只能用加密通信 如果您希望与 Kafka 数据源建立安全连接&#xff0c;请选择 Require SSL connection (需要 SSL 连接)&#xff0c;并在 Kafka priv…...