TNNLS-2020《Autoencoder Constrained Clustering With Adaptive Neighbors》

news2025/5/15 13:17:02

核心思想分析

该论文提出了一种名为ACC_AN(Autoencoder Constrained Clustering with Adaptive Neighbors)的深度聚类方法,旨在解决传统子空间聚类方法在处理非线性数据分布和高维数据时的局限性。核心思想是将深度自编码器(Autoencoder)自适应的图结构学习相结合,通过同时优化数据的低维表示和图结构的相似性矩阵,实现高效的聚类。其主要创新点包括:

  1. 深度自编码器与图学习的联合优化:通过将自适应的图学习嵌入到深度自编码器网络中,ACC_AN能够同时捕获数据的全局结构(通过最小化重构误差)和局部结构(通过自适应相似性矩阵)。
  2. 无参数相似性度量:提出了一种基于自适应邻居的无参数相似性度量方法,避免了传统核函数方法对核函数选择的敏感性。
  3. 迭代优化:通过在反向传播过程中迭代更新潜在表示和图结构,增强了深度特征与聚类过程的相关性。

该方法克服了传统子空间聚类方法(如k-means、谱聚类)对线性结构的依赖,以及核方法对参数选择的敏感性,同时结合了深度学习的非线性表示能力,适用于复杂的高维数据聚类任务。


目标函数分析

论文的目标函数旨在联合优化自编码器的重构误差、图结构的相似性以及网络参数的正则化。目标函数由三部分组成,形式如下:

J = J 1 + λ 1 J 2 + λ 2 J 3 \mathcal{J} = \mathcal{J}_1 + \lambda_1 \mathcal{J}_2 + \lambda_2 \mathcal{J}_3 J=J1+λ1J2+λ2J3

其中,具体定义为:

  1. 重构误差项( J 1 \mathcal{J}_1 J1
    J 1 = 1 2 ∑ i = 1 n ∥ x i − h i ( M ) ∥ 2 2 \mathcal{J}_1 = \frac{1}{2} \sum_{i=1}^n \left\| x_i - h_i^{(M)} \right\|_2^2 J1=21i=1n xihi(M) 22
    这一项最小化输入数据 x i x_i xi与自编码器输出 h i ( M ) h_i^{(M)} hi(M)之间的重构误差,确保网络能够保留数据的全局结构。

  2. 图结构相似性项( J 2 \mathcal{J}_2 J2
    J 2 = 1 2 ∑ i , j = 1 n ( s i j ∥ h i ( M 2 ) − h j ( M 2 ) ∥ 2 2 + γ i s i j 2 ) \mathcal{J}_2 = \frac{1}{2} \sum_{i,j=1}^n \left( s_{ij} \left\| h_i^{\left(\frac{M}{2}\right)} - h_j^{\left(\frac{M}{2}\right)} \right\|_2^2 + \gamma_i s_{ij}^2 \right) J2=21i,j=1n(sij hi(2M)hj(2M) 22+γisij2)
    这一项通过自适应相似性矩阵 S S S(其中 s i j s_{ij} sij表示数据点 i i i j j j之间的相似性)来捕获数据在中间层表示 h i ( M 2 ) h_i^{\left(\frac{M}{2}\right)} hi(2M)的局部结构。 γ i \gamma_i γi是权衡参数,控制相似性矩阵的稀疏性。

  3. 正则化项( J 3 \mathcal{J}_3 J3
    J 3 = 1 2 ∑ m = 1 M ( ∥ W ( m ) ∥ F 2 + ∥ p ( m ) ∥ 2 2 ) \mathcal{J}_3 = \frac{1}{2} \sum_{m=1}^M \left( \left\| W^{(m)} \right\|_F^2 + \left\| p^{(m)} \right\|_2^2 \right) J3=21m=1M( W(m) F2+ p(m) 22)
    这一项对网络权重 W ( m ) W^{(m)} W(m)和偏置 p ( m ) p^{(m)} p(m)施加Frobenius范数和L2范数正则化,防止过拟合并避免平凡解。

目标函数通过权衡参数 λ 1 \lambda_1 λ1 λ 2 \lambda_2 λ2平衡三部分的贡献,综合考虑数据的重构质量、局部结构的保持以及模型的稳定性。


目标函数的优化过程

目标函数的优化采用**随机子梯度下降(SGD)**算法,通过反向传播迭代更新网络参数和相似性矩阵 S S S。优化过程分为以下步骤:

  1. 前向传播
    自编码器网络包含 M + 1 M+1 M+1层,其中前 M / 2 M/2 M/2层为编码器,后 M / 2 M/2 M/2层为解码器。前向传播过程定义为:
    { H ( 0 ) = X Z ( m + 1 ) = W ( m ) ⋅ H ( m ) + p ( m ) , for  m = 0 , 1 , … , M − 1 H ( m ) = f ( Z ( m ) ) \begin{cases} H^{(0)} = X \\ Z^{(m+1)} = W^{(m)} \cdot H^{(m)} + p^{(m)}, \quad \text{for } m=0,1,\ldots,M-1 \\ H^{(m)} = f(Z^{(m)}) \end{cases} H(0)=XZ(m+1)=W(m)H(m)+p(m),for m=0,1,,M1H(m)=f(Z(m))
    其中, H ( m ) H^{(m)} H(m)是第 m m m层的输出, f ( ⋅ ) f(\cdot) f()是激活函数(使用 tanh ⁡ \tanh tanh函数, f ( z ) = 1 − e − 2 z 1 + e − 2 z f(z) = \frac{1-e^{-2z}}{1+e^{-2z}} f(z)=1+e2z1e2z)。

  2. 相似性矩阵 S S S的计算
    相似性矩阵 S S S基于中间层表示 H ( M 2 ) H^{\left(\frac{M}{2}\right)} H(2M),通过优化以下问题计算:
    min ⁡ s i T 1 = 1 , 0 ≤ s i ≤ 1 ∑ i = 1 n 1 2 ∥ s i + d i 2 γ i ∥ 2 2 \min_{s_i^T \mathbf{1}=1, 0 \leq s_i \leq 1} \sum_{i=1}^n \frac{1}{2} \left\| s_i + \frac{d_i}{2 \gamma_i} \right\|_2^2 siT1=1,0si1mini=1n21 si+2γidi 22
    其中, d i j = ∥ h i ( M 2 ) − h j ( M 2 ) ∥ 2 2 d_{ij} = \left\| h_i^{\left(\frac{M}{2}\right)} - h_j^{\left(\frac{M}{2}\right)} \right\|_2^2 dij= hi(2M)hj(2M) 22 γ i \gamma_i γi是权衡参数。闭合解为:
    s i j = ( q i ( k + 1 ) − q i j k q i ( k + 1 ) − ∑ j = 1 k q i j ) + s_{ij} = \left( \frac{q_{i(k+1)} - q_{ij}}{k q_{i(k+1)} - \sum_{j=1}^k q_{ij}} \right)_+ sij=(kqi(k+1)j=1kqijqi(k+1)qij)+
    其中, q i j = ∥ h i ( M 2 ) − h j ( M 2 ) ∥ 2 2 q_{ij} = \left\| h_i^{\left(\frac{M}{2}\right)} - h_j^{\left(\frac{M}{2}\right)} \right\|_2^2 qij= hi(2M)hj(2M) 22 k k k是邻居数量, ( + ) (_+) (+)表示 max ⁡ ( ⋅ , 0 ) \max(\cdot, 0) max(,0)

  3. 反向传播与参数更新
    通过计算目标函数对权重 W ( m ) W^{(m)} W(m)和偏置 p ( m ) p^{(m)} p(m)的子梯度,更新网络参数。子梯度计算公式为:
    { ∂ J ∂ p ( m ) = Σ ( m ) + λ 1 Θ ( m ) + λ 2 p ( m ) ∂ J ∂ W ( m ) = ( Σ ( m ) + λ 1 Θ ( m ) ) ( h i ( m − 1 ) ) T + λ 2 W ( m ) \begin{cases} \frac{\partial \mathcal{J}}{\partial p^{(m)}} = \Sigma^{(m)} + \lambda_1 \Theta^{(m)} + \lambda_2 p^{(m)} \\ \frac{\partial \mathcal{J}}{\partial W^{(m)}} = \left( \Sigma^{(m)} + \lambda_1 \Theta^{(m)} \right) \left( h_i^{(m-1)} \right)^T + \lambda_2 W^{(m)} \end{cases} p(m)J=Σ(m)+λ1Θ(m)+λ2p(m)W(m)J=(Σ(m)+λ1Θ(m))(hi(m1))T+λ2W(m)
    其中, Σ ( m ) = ∂ J 1 ∂ z ( m ) \Sigma^{(m)} = \frac{\partial \mathcal{J}_1}{\partial z^{(m)}} Σ(m)=z(m)J1 Θ ( m ) = ∂ J 2 ∂ z ( m ) \Theta^{(m)} = \frac{\partial \mathcal{J}_2}{\partial z^{(m)}} Θ(m)=z(m)J2通过链式法则计算。参数更新规则为:
    { p ( m ) = p ( m ) − μ ∂ J ∂ p ( m ) W ( m ) = W ( m ) − μ ∂ J ∂ W ( m ) \begin{cases} p^{(m)} = p^{(m)} - \mu \frac{\partial \mathcal{J}}{\partial p^{(m)}} \\ W^{(m)} = W^{(m)} - \mu \frac{\partial \mathcal{J}}{\partial W^{(m)}} \end{cases} {p(m)=p(m)μp(m)JW(m)=W(m)μW(m)J
    其中, μ \mu μ是学习率。

  4. 迭代优化
    重复前向传播、相似性矩阵计算和反向传播步骤,直到目标函数收敛。最终,使用中间层表示 H ( M 2 ) H^{\left(\frac{M}{2}\right)} H(2M)进行k-means聚类,得到最终的聚类结果。


主要的贡献点

  1. 自适应图学习的嵌入
    首次将自适应邻居的图学习嵌入到深度自编码器网络中,通过反向传播过程同时更新潜在表示和图结构,增强了聚类的鲁棒性和准确性。

  2. 无参数相似性度量
    提出了一种基于 k k k近邻的无参数相似性度量方法,避免了传统核函数方法对参数选择的依赖,实现了可控稀疏性的相似性矩阵构造。

  3. 联合优化框架
    通过联合优化重构误差和图结构相似性,ACC_AN能够同时捕获数据的全局和局部结构,适用于高维非线性数据的聚类任务。

  4. 高效的优化算法
    提供了基于SGD的优化算法,通过闭合解计算相似性矩阵,降低了计算复杂度,并保证了收敛性。


实验结果分析

实验在六个基准数据集(COIL20、YaleB、CIFAR10、MNIST、Fashion-MNIST)上进行,比较了ACC_AN与15种聚类方法(包括SSC、LRR、KSSC、KLRR、PARTY等)的性能。评估指标包括准确率(ACC)、归一化互信息(NMI)、调整兰德指数(ARI)、精确率(Precision)和F分数(Fscore)。

  1. COIL20数据集

    • 使用SDSIFT特征时,ACC_AN的性能为:ACC=91.65%,NMI=94.80%,ARI=89.72%,Precision=86.60%,Fscore=89.47%。
    • 使用LPQ特征时,性能稍低,但仍优于其他方法(如PARTY:ACC=90.88%,NMI=94.12%)。
  2. YaleB数据集

    • SDSIFT特征下,ACC_AN的性能优于LPQ特征,且在所有指标上均优于其他方法。
  3. CIFAR10和MNIST数据集

    • LPQ特征下,ACC_AN的性能优于SDSIFT特征。例如,在MNIST数据集上,ACC_AN的性能为:ACC=78.69%,NMI=74.21%,ARI=67.51%,显著优于PARTY(ACC=65.69%,NMI=68.89%)。
  4. Fashion-MNIST数据集

    • ACC_AN在NMI、ARI和Fscore上表现最佳,仅在Precision上略逊于其他方法。
  5. 计算效率

    • ACC_AN的运行时间低于PARTY,表明其收敛速度更快,计算效率更高。

总结:ACC_AN在所有数据集和大多数指标上均表现出色,特别是在NMI和ARI上,证明了其在深度聚类任务中的优越性。实验结果还表明,不同数据集对特征类型(SDSIFT或LPQ)的敏感性不同,但ACC_AN的鲁棒性使其在多种场景下均能保持高性能。


算法实现过程详细解释

以下是ACC_AN算法的详细实现过程,结合论文中的伪代码(Algorithm 1)进行说明:

输入
  • 数据矩阵: X ∈ R d × n X \in \mathbb{R}^{d \times n} XRd×n,其中 d d d是特征维度, n n n是数据点数量。
  • 参数: λ 1 \lambda_1 λ1(权衡图结构项)、 λ 2 \lambda_2 λ2(权衡正则化项)、 k k k(邻居数量)。
初始化
  1. 网络参数初始化

    • 初始化自编码器网络的权重 W ( m ) W^{(m)} W(m)和偏置 p ( m ) p^{(m)} p(m) m = 1 , 2 , … , M m=1,2,\ldots,M m=1,2,,M
    • 使用预训练的自编码器参数(通过最小化重构误差训练)初始化编码器和解码器层。
    • 设置初始输入 H ( 0 ) = X H^{(0)} = X H(0)=X
  2. 网络结构

    • 网络包含 M + 1 M+1 M+1层,前 M / 2 M/2 M/2层为编码器,后 M / 2 M/2 M/2层为解码器。
    • 激活函数使用 tanh ⁡ \tanh tanh,定义为 f ( z ) = 1 − e − 2 z 1 + e − 2 z f(z) = \frac{1-e^{-2z}}{1+e^{-2z}} f(z)=1+e2z1e2z,其导数为 f ′ ( z ) = 1 − tanh ⁡ 2 ( z ) f'(z) = 1 - \tanh^2(z) f(z)=1tanh2(z)
优化过程
  1. 前向传播

    • 对于每一层 m = 1 , 2 , … , M m=1,2,\ldots,M m=1,2,,M,计算:
      Z ( m + 1 ) = W ( m ) ⋅ H ( m ) + p ( m ) Z^{(m+1)} = W^{(m)} \cdot H^{(m)} + p^{(m)} Z(m+1)=W(m)H(m)+p(m)
      H ( m ) = f ( Z ( m ) ) H^{(m)} = f(Z^{(m)}) H(m)=f(Z(m))
    • 得到中间层表示 H ( M 2 ) H^{\left(\frac{M}{2}\right)} H(2M)和最终输出 H ( M ) H^{(M)} H(M)
  2. 计算初始相似性矩阵 S S S

    • 基于中间层表示 H ( M 2 ) H^{\left(\frac{M}{2}\right)} H(2M),计算距离 q i j = ∥ h i ( M 2 ) − h j ( M 2 ) ∥ 2 2 q_{ij} = \left\| h_i^{\left(\frac{M}{2}\right)} - h_j^{\left(\frac{M}{2}\right)} \right\|_2^2 qij= hi(2M)hj(2M) 22
    • 对每个数据点 i i i,按距离排序 q i 1 ≤ q i 2 ≤ ⋯ ≤ q i n q_{i1} \leq q_{i2} \leq \cdots \leq q_{in} qi1qi2qin
    • 计算 γ i \gamma_i γi的上界:
      γ i = k 2 q i ( k + 1 ) − 1 2 ∑ j = 1 k q i j \gamma_i = \frac{k}{2} q_{i(k+1)} - \frac{1}{2} \sum_{j=1}^k q_{ij} γi=2kqi(k+1)21j=1kqij
    • 计算相似性 s i j s_{ij} sij
      s i j = ( q i ( k + 1 ) − q i j k q i ( k + 1 ) − ∑ j = 1 k q i j ) + s_{ij} = \left( \frac{q_{i(k+1)} - q_{ij}}{k q_{i(k+1)} - \sum_{j=1}^k q_{ij}} \right)_+ sij=(kqi(k+1)j=1kqijqi(k+1)qij)+
    • 构造相似性矩阵 S = [ s i j ] n × n S = [s_{ij}]_{n \times n} S=[sij]n×n
  3. 迭代优化

    • 循环直到收敛
      • 对于每个数据点 i = 1 , 2 , … , n i=1,2,\ldots,n i=1,2,,n
        1. 前向传播
          • 计算每一层的输出 h i ( m ) h_i^{(m)} hi(m),从 h i ( 0 ) = x i h_i^{(0)} = x_i hi(0)=xi开始:
            h i ( m ) = f ( W ( m ) h i ( m − 1 ) + p ( m ) ) h_i^{(m)} = f(W^{(m)} h_i^{(m-1)} + p^{(m)}) hi(m)=f(W(m)hi(m1)+p(m))
        2. 反向传播
          • m = M m=M m=M m = 1 m=1 m=1,计算子梯度 Σ ( m ) \Sigma^{(m)} Σ(m) Θ ( m ) \Theta^{(m)} Θ(m)
            • 对于 J 1 \mathcal{J}_1 J1
              Σ ( m ) = { − ( x i − h i ( M ) ) ⊙ f ′ ( z i ( M ) ) , m = M ( W ( m + 1 ) ) T Σ ( m + 1 ) ⊙ f ′ ( z i ( m ) ) , otherwise \Sigma^{(m)} = \begin{cases} -(x_i - h_i^{(M)}) \odot f'(z_i^{(M)}), & m=M \\ (W^{(m+1)})^T \Sigma^{(m+1)} \odot f'(z_i^{(m)}), & \text{otherwise} \end{cases} Σ(m)={(xihi(M))f(zi(M)),(W(m+1))TΣ(m+1)f(zi(m)),m=Motherwise
            • 对于 J 2 \mathcal{J}_2 J2
              Θ ( m ) = { ( W ( m + 1 ) ) T Θ ( m + 1 ) ⊙ f ′ ( z i ( m ) ) , m = 1 , … , M − 2 2 ∑ j = 1 n s i j ( h i ( M 2 ) − h j ( M 2 ) ) ⊙ f ′ ( z i ( M 2 ) ) , m = M 2 0 , m = M + 2 2 , … , M \Theta^{(m)} = \begin{cases} (W^{(m+1)})^T \Theta^{(m+1)} \odot f'(z_i^{(m)}), & m=1,\ldots,\frac{M-2}{2} \\ \sum_{j=1}^n s_{ij} (h_i^{\left(\frac{M}{2}\right)} - h_j^{\left(\frac{M}{2}\right)}) \odot f'(z_i^{\left(\frac{M}{2}\right)}), & m=\frac{M}{2} \\ 0, & m=\frac{M+2}{2},\ldots,M \end{cases} Θ(m)= (W(m+1))TΘ(m+1)f(zi(m)),j=1nsij(hi(2M)hj(2M))f(zi(2M)),0,m=1,,2M2m=2Mm=2M+2,,M
        3. 更新参数
          • 计算总子梯度:
            ∂ J ∂ p ( m ) = Σ ( m ) + λ 1 Θ ( m ) + λ 2 p ( m ) \frac{\partial \mathcal{J}}{\partial p^{(m)}} = \Sigma^{(m)} + \lambda_1 \Theta^{(m)} + \lambda_2 p^{(m)} p(m)J=Σ(m)+λ1Θ(m)+λ2p(m)
            ∂ J ∂ W ( m ) = ( Σ ( m ) + λ 1 Θ ( m ) ) ( h i ( m − 1 ) ) T + λ 2 W ( m ) \frac{\partial \mathcal{J}}{\partial W^{(m)}} = \left( \Sigma^{(m)} + \lambda_1 \Theta^{(m)} \right) (h_i^{(m-1)})^T + \lambda_2 W^{(m)} W(m)J=(Σ(m)+λ1Θ(m))(hi(m1))T+λ2W(m)
          • 更新权重和偏置:
            p ( m ) = p ( m ) − μ ∂ J ∂ p ( m ) p^{(m)} = p^{(m)} - \mu \frac{\partial \mathcal{J}}{\partial p^{(m)}} p(m)=p(m)μp(m)J
            W ( m ) = W ( m ) − μ ∂ J ∂ W ( m ) W^{(m)} = W^{(m)} - \mu \frac{\partial \mathcal{J}}{\partial W^{(m)}} W(m)=W(m)μW(m)J
      • 更新相似性矩阵 S S S
        • 使用最新的 H ( M 2 ) H^{\left(\frac{M}{2}\right)} H(2M),重新计算 q i j q_{ij} qij s i j s_{ij} sij,更新 S S S
  4. 聚类

    • 使用最终的中间层表示 H ( M 2 ) H^{\left(\frac{M}{2}\right)} H(2M),应用k-means算法进行聚类,得到聚类结果。
输出
  • 网络参数: { p ( m ) , W ( m ) } m = 1 M \{p^{(m)}, W^{(m)}\}_{m=1}^M {p(m),W(m)}m=1M
  • 聚类结果:基于 H ( M 2 ) H^{\left(\frac{M}{2}\right)} H(2M)的聚类标签。

总结

ACC_AN通过将自适应图学习嵌入深度自编码器,提出了一种高效的深度聚类方法。其目标函数综合考虑了重构误差、图结构相似性和正则化,通过SGD优化实现了联合学习。实验结果表明,ACC_AN在多个基准数据集上均优于现有方法,特别是在NMI和ARI指标上表现突出。算法实现过程清晰,通过前向传播、相似性矩阵计算和反向传播的迭代优化,保证了高效性和收敛性。该方法在高维非线性数据聚类任务中具有广泛的应用潜力。

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

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

相关文章

SpringAI

机器学习: 定义:人工智能的子领域,通过数据驱动的方法让计算机学习规律,进行预测或决策。 核心方法: 监督学习(如线性回归、SVM)。 无监督学习(如聚类、降维)。 强化学…

lua 作为嵌入式设备的配置语言

从lua的脚本中获取数据 lua中栈的索引 3 | -1 2 | -2 1 | -3 可以在lua的解释器中加入自己自定的一些功能,其实没啥必要,就是为了可以练习下lua

ERP系统源码,小型工厂ERP系统源码,CRM+OA+进销存+财务

ERP系统源码,小型工厂ERP系统源码,ERP计划管理系统源码,CRMOA进销存财务 对于ERP来说,最为主要的作用就是能够强调企业的计划性,通过以业务订单以及客户的相关需求来作为企业计划的基础,并且还能够对企业现…

基于EFISH-SCB-RK3576/SAIL-RK3576的矿用本安型手持终端技术方案‌

(国产化替代J1900的矿山智能化解决方案) 一、硬件架构设计‌ ‌本安型结构设计‌ ‌防爆防护体系‌: 采用铸镁合金外壳复合防爆玻璃(抗冲击能量>20J),通过GB 3836.1-2021 Ex ib I Mb认证 全密闭IP68接口…

配置文件介绍xml、json

#灵感# 常用xml, 但有点模棱两可,记录下AI助理给我总结的。 .xml XML(eXtensible Markup Language,可扩展标记语言)是一种用于存储和传输数据的标记语言。它与 HTML 类似,但有以下主要特点和用途&#xf…

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】附录-D. 扩展插件列表(PostGIS/PostgREST等)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 附录D. PostgreSQL扩展插件速查表一、插件分类速查表二、核心插件详解三、安装与配置指南四、应用场景模板五、版本兼容性说明六、维护与优化建议七、官方资源与工具八、附录…

Qt笔记---》.pro中配置

文章目录 1、概要1.1、修改qt项目的中间文件输出路径和部署路径1.2、Qt 项目模块配置1.3、外部库文件引用配置 1、概要 1.1、修改qt项目的中间文件输出路径和部署路径 (1)、为解决 “ 输出文件 ” 和 “ 中间输出文件 ”全部在同一个文件夹下的问题&am…

【Liblib】基于LiblibAI自定义模型,总结一下Python开发步骤

一、前言 Liblib AI(哩布哩布 AI)是一个集成了先进人工智能技术和用户友好设计的 AI 图像创作绘画平台和模型分享社区。 强大的图像生成能力 :以 Stable Diffusion 技术为核心,提供文生图、图生图、图像后期处理等功能&#xff…

CCF第七届AIOps国际挑战赛季军分享(RAG)

分享CCF 第七届AIOps国际挑战赛的季军方案,从我们的比赛经历来看,并不会,相反,私域领域问答的优秀效果说明RAG真的很重要 历经4个月的时间,从初赛赛道第1,复赛赛道第2,到最后决赛获得季军&…

【Cesium入门教程】第七课:Primitive图元

Cesium丰富的空间数据可视化API分为两部分:primitive API面向三维图形开发者,更底层一些。 Entity API是数据驱动更高级一些。 // entity // 调用方便,封装完美 // 是基于primitive的封装// primitive // 更接近底层 // 可以绘制高级图形 /…

【5分钟学Docker】Docker快速使用

目录 1. 概述 2. 基本操作 2.1. 镜像操作 2.2. 容器操作 2.3. 运行操作 2.4. 镜像保存 2.5. 镜像分享 3. 高级操作 4. 挂载 4.1. 目录挂载 4.2. 卷映射 1. 概述 Docker 镜像有镜像名称和TAG 2. 基本操作 2.1. 镜像操作 查看镜像 docker images docker image ls …

opencv 一些简单的设置

输出当前程序启动的路径 可能会出现 🔧 设置 C17 标准(解决 std::filesystem 报错) 在 VS 中,右键项目 → 属性。 选择左边的 “C/C” → “语言” 找到 C语言标准(C Language Standard)选项。 设置为&…

监控易运维管理软件:架构稳健,组件强大

在当今的信息化时代,运维管理对于企业的稳定运营至关重要。一款好的运维管理软件,不仅能够帮助企业高效管理IT基础设施,还能提升运维效率,降低运维成本。今天,我要给大家介绍的,就是我们公司自主研发的监控…

数字IC后端零基础入门基础理论(Day2)

数字IC后端零基础入门基础理论(Day1) Placement Blockage: cell摆放阻挡层。它是用来引导工具做placement的一种物理约束或手段,目的是希望工具按照我们的要求来做标准单元的摆放。 它主要有三种类型,分别是hard placement bloc…

零成本打造专属AI图像处理平台:IOPaint本地部署与远程访问指南

文章目录 前言1.什么是IOPaint?2.本地部署IOPaint3.IOPaint简单实用4.公网远程访问本地IOPaint5.内网穿透工具安装6.配置公网地址7.使用固定公网地址远程访问总结 前言 移动摄影的普及使得记录生活变得轻而易举,然而获得一张高质量的照片往往需要付出不…

操作系统-物理结构

操作系统使用read系统调用,将逻辑地址转(对于用户来说逻辑地址容易计算,因为各个逻辑块都相邻)成了逻辑块号和块内偏移量,并根据分配存储方式,将逻辑块号转成物理块号和块内偏移量 对于用户来说的文件的一…

《AI大模型应知应会100篇》第64篇:构建你的第一个大模型 Chatbot

第64篇:构建你的第一个大模型 Chatbot 手把手教你从零开始搭建一个基于大模型的聊天机器人 摘要 你是否想过,自己也能构建一个像 ChatGPT 一样能对话、能思考的聊天机器人(Chatbot)?别担心,这并不需要你是…

STM32 片上资源之串口

STM32 片上资源之串口 1 串口介绍1.1 初步介绍1.2 主要特性1.2.1 USART特性1.2.2 UART特性 1.3 主要寄存器1.4 波特率计算1.5 常用工作模式1.5.1 轮询模式:1.5.2 中断模式:1.5.3 DMA模式: 1.6 常见应用1.7 注意事项 2 软件层面协议2.1 基本概…

职坐标IT培训:互联网行业核心技能精讲

在互联网行业高速迭代的今天,掌握全链路核心技能已成为职业发展的关键突破口。职坐标IT培训聚焦行业需求,系统拆解从需求分析到系统部署的完整能力模型,助力从业者构建多维竞争力。无论是产品岗的用户调研与原型设计,还是技术岗的…

FlashInfer - 介绍 LLM服务加速库 地基的一块石头

FlashInfer - 介绍 LLM服务加速库 地基的一块石头 flyfish 大型语言模型服务中的注意力机制 大型语言模型服务(LLM Serving)迅速成为重要的工作负载。Transformer中的算子效率——尤其是矩阵乘法(GEMM)、自注意力(S…