机器学习之求解无约束最优化问题方法(手推公式版)

news2024/7/4 6:16:16

文章目录

    • 前言
    • 1. 基础知识
      • 1.1 方向导数
      • 1.2 梯度
      • 1.3 方向导数与梯度的关系
      • 1.4 泰勒展开公式
      • 1.5 Jacobian矩阵与Hessian矩阵
      • 1.6 正定矩阵
    • 2. 梯度下降法
    • 3. 牛顿法
    • 4. 拟牛顿法
    • 5. 代码实现
    • 结束语

前言

  本篇博文主要介绍了机器学习里面的常见的求解无约束最优化问题的方法,包括梯度下降法、牛顿法和拟牛顿法,并给出了相关的推导过程及代码实现。

  本篇博文内容主要来自李航老师的《统计学习方法》(附录A和B)。

1. 基础知识

1.1 方向导数

  在许多问题中,我们不仅要知道函数再坐标轴上的变化率(即偏导数),而且还要设法求得函数在某点沿着其他特定方向上的变化率,这就是方向导数。
  方向导数的计算公式如下:设三元函数 u = u ( x , y , z ) u=u(x,y,z) u=u(x,y,z)在点 P 0 ( x 0 , y 0 , z 0 ) P_0(x_0,y_0,z_0) P0(x0,y0,z0)处可微分,则 u = u ( x , y , z ) u=u(x,y,z) u=u(x,y,z)在点 P 0 P_0 P0处沿任一方向 l \bm l l 的方向导数都存在,则

在这里插入图片描述

1.2 梯度

  在一个数量场中,函数在给定点处沿不同的方向,其方向导数一般都是不相同的,现在我们关心的是沿哪一个方向其方向导数最大?最大值是多少?函数在点 P P P沿哪一个方向增加的速度最快?由此引入了梯度这一概念。
  设三元函数 u = u ( x , y , z ) u=u(x,y,z) u=u(x,y,z)在点 P 0 ( x 0 , y 0 , z 0 ) P_0(x_0,y_0,z_0) P0(x0,y0,z0)处具有一阶偏导数,则定义 g r a d u ∣ P 0 = ( u x ′ ( P 0 ) , u y ′ ( P 0 ) , u z ′ ( P 0 ) ) \bm {grad} u\bigg|_{P_0}=(u^{\prime}_x(P_0),u^{\prime}_y(P_0),u^{\prime}_z(P_0)) gradu P0=(ux(P0),uy(P0),uz(P0))  为函数 u = u ( x , y , z ) u=u(x,y,z) u=u(x,y,z)在点 P 0 ( x 0 , y 0 , z 0 ) P_0(x_0,y_0,z_0) P0(x0,y0,z0)处的梯度。

1.3 方向导数与梯度的关系

  由方向导数的计算公式和梯度的定义可以得到

在这里插入图片描述
  由上可以得到如下结论:函数在某点的梯度是一个向量,它的方向与取得最大方向导数的方向一致,而它的模为方向导数的最大值,再通俗点说,梯度的方向就是变化率最快的方向,也就是函数值增加最快的方向

1.4 泰勒展开公式

  设 f ( x ) f(x) f(x)在点 x 0 x_0 x0的某个邻域内n+1阶导数存在,则对该邻域内的任意点有 f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + 1 2 f ′ ′ ( x 0 ) ( x − x 0 ) 2 + ⋯ + 1 n ! f ( n ) ( x 0 ) ( x − x 0 ) n + 1 ( n + 1 ) ! f ( n + 1 ) ( ξ ) ( x − x 0 ) ( n + 1 ) f(x)=f(x_0)+f^{\prime}(x_0)(x-x_0)+\frac {1} {2} f^{\prime\prime}(x_0)(x-x_0)^2+\dots+\frac {1} {n!} f^{(n)}(x_0)(x-x_0)^n+\frac {1} {(n+1)!} f^{(n+1)}(\xi)(x-x_0)^{(n+1)} f(x)=f(x0)+f(x0)(xx0)+21f′′(x0)(xx0)2++n!1f(n)(x0)(xx0)n+(n+1)!1f(n+1)(ξ)(xx0)(n+1)  其中 ξ \xi ξ介于 x x x x 0 x_0 x0之间。
  上述公式是带拉格朗日余项的n阶泰勒公式,当 x 0 = 0 x_0=0 x0=0时,上述泰勒公式又称为麦克劳林公式。

1.5 Jacobian矩阵与Hessian矩阵

  简单来说,由一阶偏导数组成的矩阵叫做Jacobian矩阵(雅可比矩阵),由二阶偏导数组成的矩阵叫做Hessian矩阵(黑塞矩阵)。
  称矩阵 J = [ ∂ f 1 ∂ x 1 ∂ f 1 ∂ x 2 … ∂ f 1 ∂ x n ∂ f 2 ∂ x 1 ∂ f 2 ∂ x 2 … ∂ f 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ f n ∂ x 1 ∂ f n ∂ x 2 … ∂ f n ∂ x n ] J=\begin{bmatrix} \frac {\partial f_1} {\partial {x_1}} & \frac {\partial f_1} {\partial {x_2}} & \dots & \frac {\partial f_1} {\partial {x_n}} \\[5pt] \frac {\partial f_2} {\partial {x_1}} & \frac {\partial f_2} {\partial {x_2}} & \dots &\frac {\partial f_2} {\partial {x_n}} \\ \vdots & \vdots & \ddots & \vdots \\[3pt] \frac {\partial f_n} {\partial {x_1}} & \frac {\partial f_n} {\partial {x_2}} & \dots & \frac {\partial f_n} {\partial {x_n}} \end{bmatrix} J= x1f1x1f2x1fnx2f1x2f2x2fnxnf1xnf2xnfn 为雅可比矩阵(Jacobian Matrix),也可记作 ∇ f \nabla f f
  若 n n n元函数 f ( x ) f(x) f(x)在点 x x x处对于自变量的各分量的二阶偏导数连续,则称矩阵 H ( x ) = [ ∂ 2 f ∂ x 1 2 ∂ 2 f ∂ x 1 x 2 … ∂ 2 f ∂ x 1 x n ∂ 2 f ∂ x 2 x 1 ∂ 2 f ∂ x 2 2 … ∂ 2 f ∂ x 2 x n ⋮ ⋮ ⋱ ⋮ ∂ 2 f ∂ x n x 1 ∂ 2 f ∂ x n x 2 … ∂ 2 f ∂ x n 2 ] H(x)=\begin{bmatrix} \frac {\partial ^2f} {\partial {x_1}^2} & \frac {\partial ^2f} {\partial {x_1}{x_2}} & \dots & \frac {\partial ^2f} {\partial {x_1}{x_n}} \\[5pt] \frac {\partial ^2f} {\partial {x_2}{x_1}} & \frac {\partial ^2f} {\partial {x_2}^2} & \dots &\frac {\partial ^2f} {\partial {x_2}{x_n}} \\[3pt] \vdots & \vdots & \ddots & \vdots \\[3pt] \frac {\partial ^2f} {\partial {x_n}{x_1}} & \frac {\partial ^2f} {\partial {x_n}{x_2}} & \dots & \frac {\partial ^2f} {\partial {x_n}^2} \end{bmatrix} H(x)= x122fx2x12fxnx12fx1x22fx222fxnx22fx1xn2fx2xn2fxn22f f ( x ) f(x) f(x)在点 x x x处的二阶导数或黑塞矩阵(Hessian Matrix),也可记作 ∇ 2 f ( x ) \nabla ^2f(x) 2f(x)  由此可以知道,Hessian矩阵是一个对称矩阵。

1.6 正定矩阵

   n n n元二次型 f ( x 1 , x 2 , … , x n ) = x T A x f(x_1, x_2, \dots, x_n)=x^TAx f(x1,x2,,xn)=xTAx,若对任意的 x = [ x 1 , x 2 , … , x n ] T ≠ 0 x=[x_1,x_2,\dots,x_n]^T \neq 0 x=[x1,x2,,xn]T=0,均有 x T A x > 0 x^TAx > 0 xTAx>0,则成 f f f为正定二次型,二次型对应的矩阵 A A A为正定矩阵。
  二次型正定的充分条件:
   n n n元二次型 f = x T A x f=x^TAx f=xTAx正定 ⟺ \Longleftrightarrow 对于任意 x ≠ 0 x \neq 0 x=0,有 x T A x > 0 x^TAx > 0 xTAx>0
               ⟺ \Longleftrightarrow f f f的正惯性指数 p = n p=n p=n
               ⟺ \Longleftrightarrow 存在可逆矩阵 D D D,使 A = D T D A=D^TD A=DTD
               ⟺ \Longleftrightarrow A A A E E E合同,即存在矩阵 C C C,是 C T A C = E C^TAC=E CTAC=E
               ⟺ \Longleftrightarrow A A A的特征值 λ i > 0 ( i = 1 , 2 , … , n ) \lambda _i > 0 (i=1,2,\dots,n) λi>0(i=1,2,,n)
               ⟺ \Longleftrightarrow A A A的全部顺序主子式均大于0

  二次型正定的必要条件:
  (1) a i i > 0 ( i = 0 , 1 , … , n ) a_{ii} > 0 (i=0,1,\dots,n) aii>0(i=0,1,,n)
  (2) ∣ A ∣ > 0 |A| > 0 A>0

2. 梯度下降法

  梯度下降法 ( g r a d i e n t   d e s c e n t ,   G D ) (gradient\ descent,\ GD) (gradient descent, GD)是求解无约束最优化问题的一种常用的方法,具有简单的优点。梯度下降算法是迭代算法,每一步需要求解目标函数的梯度向量。

  在《统计学习方法》中对梯度下降法的介绍如下:
  设 f ( x ) f(x) f(x) R n R^n Rn上具有一阶连续偏导数的函数。要求解的无约束最优化问题是 m i n x ∈ R n f ( x ) \underset {x \in \bm R^n} {min} f(x) xRnminf(x)   x ∗ x^∗ x表示目标函数 f ( x ) f(x) f(x)的极小点。选取适当的初值 x 0 x_0 x0,不断迭代,更新 x x x的值,进行目标函数的极小化,直到收敛。由于负梯度方向是使函数值下降最快的方向,在迭代的每一步,以负梯度方向更新 x x x的值,从而达到减少函数值的目的。
  由于 f ( x ) f(x) f(x)具有一阶连续偏导数,若第 k k k次迭代值为 x k x_k xk,则可将 f ( x ) f(x) f(x) x k x_k xk附近进行一阶泰勒展开: f ( x ) = f ( x k ) + g k ( x − x k ) f(x)=f(x_k)+g_k(x-x_k) f(x)=f(xk)+gk(xxk)  其中 g k = g ( x k ) = ∇ f ( x k ) g_k=g(x_k) = \nabla f(x_k) gk=g(xk)=f(xk) f ( x ) f(x) f(x) x k x_k xk的梯度。
  求出第 k + 1 k+1 k+1次迭代值 x k + 1 x_{k+1} xk+1 x k + 1 ← x k + λ k p k x_{k+1} \leftarrow x_k + \lambda _k p_k xk+1xk+λkpk  其中, p k p_k pk是搜索方向,取负梯度方向 p k = − ∇ f ( x k ) = − g k p_k=−\nabla f(x_k) = -g_k pk=f(xk)=gk λ k \lambda _k λk是步长(也就是学习率),由一维搜索确定,即 λ k \lambda _k λk使得 f ( x k + λ k p k ) = m i n λ ≥ 0 f ( x k + λ p k ) f(x_k + \lambda _k p_k) = \underset {\lambda \geq 0} {min} f(x_k + \lambda p_k) f(xk+λkpk)=λ0minf(xk+λpk)
  为方便计算,这里将学习率固定:

在这里插入图片描述

  当目标函数是凸函数时,梯度下降法的解是全局最优解。一般情况下,其解不保证是全局最优解。梯度下降法的收敛速度也未必是很快的。

3. 牛顿法

  相比梯度下降算法,牛顿法使用的是二阶泰勒展开式。
  设 f ( x ) f(x) f(x)具有二阶连续偏导数,若第 k k k次迭代值为 x k x_k xk,则可将 f ( x ) f(x) f(x) x k x_k xk附近进行二阶泰勒展开: f ( x ) = f ( x k ) + g k ( x − x k ) + 1 2 H ( x k ) ( x − x k ) 2 f(x)=f(x_k)+g_k(x-x_k)+\frac {1} {2}H(x_k)(x-x_k)^2 f(x)=f(xk)+gk(xxk)+21H(xk)(xxk)2  其中, g k = g ( x k ) = ∇ f ( x k ) g_k=g(x_k) = \nabla f(x_k) gk=g(xk)=f(xk) f ( x ) f(x) f(x)的梯度向量在 x k x_k xk处的值, H ( x k ) = ∇ 2 f ( x k ) H(x_k)=\nabla ^2f(x_k) H(xk)=2f(xk) f ( x ) f(x) f(x)的黑塞矩阵 H ( x ) = [ ∂ 2 f ∂ x i ∂ x j ] H(x)=\bigg[\frac {\partial ^2f} {\partial x_i \partial x_j}\bigg] H(x)=[xixj2f] x k x_k xk处的值。
  函数 f ( x ) f(x) f(x)有极值的必要条件是在极值点处一阶导数为0,即梯度向量为0。特别是当 H ( x k ) H(x_k) H(xk)是正定矩阵时,函数 f ( x ) f(x) f(x)的极值为极小值。

  (1) 类比一元函数判别极值的第二充分条件,即 f ( x ) f(x) f(x) x = x 0 x=x_0 x=x0处二阶可导,且 f ′ ( x 0 ) = 0 f^{\prime}(x_0)=0 f(x0)=0 f ′ ′ ( x 0 ) ≠ 0 f^{\prime \prime}(x_0) \neq 0 f′′(x0)=0,若 f ′ ′ ( x 0 ) > 0 f^{\prime \prime}(x_0) > 0 f′′(x0)>0,则 f ( x ) f(x) f(x) x 0 x_0 x0处取极小值。
  (2) 类比二元函数取极值的充分条件,若 H = [ A B B C ] H=\begin{bmatrix} A & B \\[3pt] B & C \end{bmatrix} H=[ABBC]为正定矩阵,根据正定矩阵的全部顺序主子式均大于0可知, A > 0 A>0 A>0 Δ = A C − B 2 > 0 \Delta = AC-B^2>0 Δ=ACB2>0,所以 f f f有极小值。

  牛顿法利用极小点的必要条件: ∇ f ( x ) = 0 \nabla f(x) = 0 f(x)=0  根据这一条件,对 f ( x ) f(x) f(x)的二阶泰勒展开式求导可得: ∇ f ( x ) = g k + H ( x k ) ( x − x k ) \nabla f(x)=g_k+H(x_k)(x-x_k) f(x)=gk+H(xk)(xxk)
  假设在 x k + 1 x_{k+1} xk+1处也满足 ∇ f ( x k + 1 ) = 0 \nabla f(x_{k+1}) = 0 f(xk+1)=0,则可以得到 ∇ f ( x k + 1 ) = g k + H ( x k ) ( x k + 1 − x k ) \nabla f(x_{k+1})=g_k+H(x_k)(x_{k+1}-x_k) f(xk+1)=gk+H(xk)(xk+1xk)  假进一步可以得到 x k + 1 = x k − H k − 1 g k x_{k+1} = x_k-H_k^{-1}g_k xk+1=xkHk1gk  具体算法如下:

在这里插入图片描述
  可见,相比梯度下降法,牛顿法的步长是自动计算出来的,且收敛速度较快。

4. 拟牛顿法

  在牛顿法的迭代中,需要计算黑塞矩阵的逆矩阵 H − 1 H^{-1} H1,这一计算比较复杂,考虑用一个 n n n阶矩阵 G k = G ( x k ) G_k=G(x_k) Gk=G(xk)来近似代替 H k − 1 = H − 1 ( x k ) H_k^{-1} = H^{-1}(x_k) Hk1=H1(xk),这就是拟牛顿法的基本想法。

5. 代码实现

  代码实现如下:

# -*- coding:utf-8 -*-
# Author:   liyanpeng
# Email:    youran.xia@foxmail.com
# Datetime: 2023/1/31 15:30
# Filename: grad.py
import numpy as np
from matplotlib import pyplot as plt


def f(x):
    return x ** 2 + 1


def g(x):   # f(x)的导数
    return 2 * x


if __name__ == '__main__':
    max_count = 50000
    lr = 0.05
    x_k = np.random.uniform(-1, 1)
    err = 0.00001
    print('Init x_0 is : ', x_k)

    # fig = plt.figure()
    # plt.ion()
    # x_ = np.linspace(-1, 1, num=200)
    # plt.plot(x_, f(x_))

    for i in range(max_count):
        # if 'sca' in globals():
        #     sca.remove()
        # sca = plt.scatter(x_k, f(x_k), s=100, lw=0, c='red', alpha=0.5)
        # plt.pause(0.1)

        grad = g(x_k)  # 计算梯度
        if abs(grad) < err:  # 梯度收敛到控制误差内
            break
        x_k = x_k + (-grad) * lr  # 更新x(迭代公式: 梯度下降法)
        # x_k = x_k - grad / 2  # 更新x(迭代公式: 牛顿法,由于是一元二次函数,所以其二阶导数为常数2)

    print('The optimal solution x* is: {:.6f} ==> f(x*)={:.6f}'.format(x_k, f(x_k)))

    # plt.scatter(x_k, f(x_k), s=100, lw=0, c='green')
    # plt.ioff()
    # plt.show()

  可视化效果如下:

在这里插入图片描述

结束语

  持续充电中,博客内容也在不断更新补充中,如有错误,欢迎来私戳小编哦!共同进步,感谢Thanks♪(・ω・)ノ

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode——1664. 生成平衡数组的方案数

一、题目 给你一个整数数组 nums。你需要选择恰好一个下标&#xff08;下标从0开始&#xff09;并删除对应的元素。请注意剩下元素的下标可能会因为删除操作而发生改变。 比方说&#xff0c;如果 nums [6,1,7,4,1] &#xff0c;那么&#xff1a; 选择删除下标 1 &#xff0…

在CentOS-6.9部署apache服务

文章目录一 系统环境二 部署服务2.1 yum安装软件2.2 修改主配置文件2.3 修改防火墙规则2.4 访问测试三 主配置文件参数3.1 主配置文件常规语句3.2 主配置文件日志控制语句3.3 主配置文件的性能控制语句一 系统环境 参数值主机IP10.0.0.100主机名test操作系统版本CentOS releas…

css 过渡动画

目录过渡动画1 css 属性1.1 transform 变换&#xff08;平移旋转缩放&#xff09;1.2 animation 动画1.2.1 keyframes1.3 transition 过渡1.4 比较2 方式2.1 css 伪类2.2 vue <Transition> 组件2.2.1 默认名称2.2.2 自定义名称2.2.3 自定义 class2.2.4 配合 animation2.2…

sqlserver存储过程简单游标示例

test数据库有表如下&#xff1b; 创建一个存储过程&#xff0c;输出姓名和电话&#xff1b; CREATE PROCEDURE printname AS BEGINDECLARE sName varchar(20), phone varchar(20)DECLARE cursor1 CURSOR FOR --定义游标SELECT name,phonenumber from t_student OPEN cursor1 …

OpenStack的“神秘组件” 裸金属(Ironic)管理使用

OpenStack是目前全球部署最广泛的开源云基础架构&#xff0c;在OpenStack中提供的裸金属服务的项目是Ironic。OpenStack的官网主要介绍裸金属的用途在如下5方面&#xff1a; &#xff08;1&#xff09;高性能计算&#xff1b; &#xff08;2&#xff09;无法虚拟化的硬件设备的…

DSVW通关教程

DSVW通关教程 首先整体浏览网站 Blind SQL Injection (boolean) 基于布尔型的盲注: HTTP请求的响应体中不会明确的返回SQL的错误信息, 当把参数送入程序查询时&#xff0c;并且在查询条件为真的情况下返回正常页面&#xff0c;条件为假时程序会重定向到或者返回一个自定义的错…

GICv3 基本规则

目录 1.中断类型 1.1中断标识符 1.2中断如何发送给中断控制器 二、中断状态机 2.1 电平触发 2.2 边沿触发 三、亲和性路由 四、安全模型 4.1 对软件的影响 4.2 对单一安全状态的支持 五、编程模型 本章介绍了符合GICv3架构的中断控制器的基本操作。它还描述了不同…

R语言与数据分析—上(篇幅长,全)

内容过长但详细&#xff0c;分三篇写&#xff0c;总结分享也供日后参考回顾一、什么是R语言R是免费的&#xff0c;是一个全面的统计研究平台&#xff0c;提供了各式各样的数据分析技术&#xff0c;R拥有顶尖的绘图功能二、R语言优点和缺点优点1、有效的数据处理和保存机制2、拥…

LwIP系列--数据包处理和PBUF结构详解

一、目的在之前的博文中我们介绍了LwIP中的内存堆和内存池实现细节以及它们之间的优缺点对比。本篇我们将介绍LwIP中另一个比较重要的知识点&#xff0c;即数据包管理和PBUF结构&#xff1b;个人认为PBUF的设计是LwIP整个源码的亮点之一&#xff08;充分考虑了数据包处理的高效…

泛微发布数字化营销管理平台-九川汇

泛微全程数字化营销管理平台——九川汇&#xff0c;对内可以跨部门、跨组织高效协同&#xff0c;对外借助企业微信快速连接客户。 营销活动是企业运营中重要的一环&#xff0c;数字化工具如何满足企业的营销管理需求&#xff1a; 1、如何有效助力销售活动&#xff1a;帮助销售…

WebServer重写(一):日志库双缓冲和阻塞队列压测对比

目录前言重构动机模块介绍FileUtil&#xff0c;LogFile&#xff0c;LogStream&#xff0c;LoggingAsyncLogging&#xff08;重要&#xff09;压测源码前言 上次参考TinyWebserver的实现思路是&#xff1a;实现一个blockQueue, 然后实现一个日志接口类&#xff0c;这个接口类承…

ROS小车研究笔记1/31/2023 小车硬件结构及键盘移动控制节点

1 小车硬件结构 1 中控设备 上方的单片机用于控制电机运动&#xff0c;搭载wifi模块和电量显示屏。下方为树莓派&#xff0c;安装了ROS系统和Ubuntu系统&#xff0c;用于整个小车控制。显示屏和树莓派相连 2 传感器系统 激光雷达及转换器。激光雷达和转换器相连&#xff0…

【Rust】7. 枚举和模式匹配

7.1 枚举&#xff08;可存储不同类型的值&#xff09; 7.1.1 基本概念 7.1.2 枚举的简洁用法&#xff1a;构造函数 7.1.3 枚举的优势&#xff1a;处理不同类型和数量的数据 枚举成员的类型&#xff1a;字符串、数字类型、结构体、枚举注意&#xff1a;在未将标准库枚举引入当…

Java——两两交换链表中的节点

题目链接 leetcode在线oj题——两两交换链表中的节点 题目描述 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 题目示例 …

Vue中的$children与$parent讲解

$children与$parent直接演示代码父组件&#xff1a;<template><div><h2>BABA有存款: {{ money }}</h2><button>找小明借钱100</button><br /><button>找小红借钱150</button><br /><button>找所有孩子借钱2…

Day875.怎么给字符串字段加索引 -MySQL实战

怎么给字符串字段加索引 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于怎么给字符串字段加索引的内容。 现在&#xff0c;几乎所有的系统都支持邮箱登录&#xff0c;如何在邮箱这样的字段上建立合理的索引。 假设&#xff0c;现在维护一个支持邮箱登录的系统&…

【计算机图形学(译)】 一、介绍

【计算机图形学(译&#xff09;】 一、介绍1 介绍 Introduction1.1 图形领域 (Graphics Areas)1.2 主要应用 (Major Applications)1.3 图形APls (Graphics APIs)1.4 图形管线 (Graphics Pinpline)1.5 数值问题 (Numerical Issues)1.6 效率 (Efficiency)1.7 设计和编写图形程序 …

Detectron2部署教程,着重ONNX(从官网翻译)

本教程翻译至这里 https://detectron2.readthedocs.io/en/latest/tutorials/deployment.html detectron2模型训练以后如果想要部署&#xff0c;就需要导出专门的模型才可以。 三种模型导出方式 detectron2支持的模型导出方式有&#xff1a; tracing 该方式导出的格式是Torch…

常量池/String常见面试题

目录 常量池与运行时常量池 字符串常量池String_Table 字符串变量拼接 字符串常量拼接 字符串延迟加载 字符串intern方法 总结StringTable的特点 常量池与运行时常量池 二进制字节码包括 类的基本信息,常量池,类方法定义(包含虚拟机指令) class文件中除了有类的版本,字…

新突破:科学家发现全新的量子纠缠效应

布鲁克海文国家实验室&#xff08;图片来源&#xff1a;网络&#xff09;布鲁克海文国家实验室的科学家发现了一种全新的量子纠缠效应&#xff0c;即使宇宙距离相隔广阔&#xff0c;量子纠缠也会使粒子奇迹般地联系在一起。这一发现使他们能够捕捉到原子内部的奇特世界。这项研…