语音增强的损失函数选择

一、最优尺度不变信噪比(OSISNR)损失函数

  参考:论文解读 --Optimal scale-invariant signal-to-noise ratio and curriculum learning for monaural multi-spea
  最优尺度不变信噪比(OSI-SNR)是一种用于评估信号质量的指标,特别是在语音分离和增强任务中。OSI-SNR 通过优化估计信号与目标信号之间的相似性,提供了一种更稳定和可靠的信号质量度量。OSI-SNR 的计算步骤如下: s s s表示原始语音信号, s ^ \hat{s} s^表示重建的语音信号。
⟨ s , s ^ ⟩ = ∑ t = 1 T s [ t ] ⋅ s ^ [ t ] \langle s, \hat{s} \rangle = \sum_{t=1}^{T} s[t] \cdot \hat{s}[t] s,s^=t=1Ts[t]s^[t]
∣ s ^ ∣ 2 = ∑ t = 1 T ∣ s ^ [ t ] ∣ 2 |s^{\hat{}}|^2 = \sum_{t=1}^{T} |\hat{s}[t]|^2 s^2=t=1Ts^[t]2
λ = ∣ s ^ ∣ 2 ⟨ s , s ^ ⟩ \lambda = \frac{|s^{\hat{}}|^2}{\langle s, \hat{s} \rangle} λ=s,s^s^2
s target = λ ⋅ s ^ s_{\text{target}} = \lambda \cdot \hat{s} starget=λs^
e noise = s ^ − s target e_{\text{noise}} = \hat{s} - s_{\text{target}} enoise=s^starget
OSI-SNR = 10 log ⁡ 10 ( ∥ s target ∥ 2 ∥ e noise ∥ 2 ) \text{OSI-SNR} = 10 \log_{10} \left( \frac{\| s_{\text{target}} \|^2}{\| e_{\text{noise}} \|^2} \right) OSI-SNR=10log10(enoise2starget2)
  将 最优尺度不变信噪比(OSI-SNR) 的倒数作为损失函数是一个合理的想法,尤其是在某些情况下,可能会更好地反映模型的性能。OSI-SNR 是一个衡量信号质量的指标,值越高表示信号质量越好。在训练过程中,我们通常希望最小化损失函数,因此可以考虑将 OSI-SNR 的倒数作为损失函数。参考:基于深层声学特征的端到端语音分离

方法 1:每一帧的 OSI-SNR 取倒数计算损失,再取均值

  1. 计算每一帧的 OSI-SNR
    OSI-SNR i = 10 log ⁡ 10 ( ∥ s target , i ∥ 2 ∥ e noise , i ∥ 2 ) \text{OSI-SNR}_i = 10 \log_{10} \left( \frac{\| s_{\text{target}, i} \|^2}{\| e_{\text{noise}, i} \|^2} \right) OSI-SNRi=10log10(enoise,i2starget,i2)
  2. 计算损失
    Loss i = 1 OSI-SNR i + ϵ = 1 10 log ⁡ 10 ( ∥ s target , i ∥ 2 ∥ e noise , i ∥ 2 ) + ϵ \text{Loss}_i = \frac{1}{\text{OSI-SNR}_i + \epsilon} = \frac{1}{10 \log_{10} \left( \frac{\| s_{\text{target}, i} \|^2}{\| e_{\text{noise}, i} \|^2} \right) + \epsilon} Lossi=OSI-SNRi+ϵ1=10log10(enoise,i2starget,i2)+ϵ1
  3. 取均值
    Final Loss = 1 N ∑ i = 1 N Loss i = 1 N ∑ i = 1 N 1 10 log ⁡ 10 ( ∥ s target , i ∥ 2 ∥ e noise , i ∥ 2 ) + ϵ \text{Final Loss} = \frac{1}{N} \sum_{i=1}^{N} \text{Loss}_i = \frac{1}{N} \sum_{i=1}^{N} \frac{1}{10 \log_{10} \left( \frac{\| s_{\text{target}, i} \|^2}{\| e_{\text{noise}, i} \|^2} \right) + \epsilon} Final Loss=N1i=1NLossi=N1i=1N10log10(enoise,i2starget,i2)+ϵ1

方法 2:每一帧的 OSI-SNR 取均值,再取倒数计算损失

  1. 计算每一帧的 OSI-SNR
    OSI-SNR i = 10 log ⁡ 10 ( ∥ s target , i ∥ 2 ∥ e noise , i ∥ 2 ) \text{OSI-SNR}_i = 10 \log_{10} \left( \frac{\| s_{\text{target}, i} \|^2}{\| e_{\text{noise}, i} \|^2} \right) OSI-SNRi=10log10(enoise,i2starget,i2)
  2. 取均值
    Mean OSI-SNR = 1 N ∑ i = 1 N OSI-SNR i = 1 N ∑ i = 1 N 10 log ⁡ 10 ( ∥ s target , i ∥ 2 ∥ e noise , i ∥ 2 ) \text{Mean OSI-SNR} = \frac{1}{N} \sum_{i=1}^{N} \text{OSI-SNR}_i = \frac{1}{N} \sum_{i=1}^{N} 10 \log_{10} \left( \frac{\| s_{\text{target}, i} \|^2}{\| e_{\text{noise}, i} \|^2} \right) Mean OSI-SNR=N1i=1NOSI-SNRi=N1i=1N10log10(enoise,i2starget,i2)
  3. 计算损失
    Final Loss = 1 Mean OSI-SNR + ϵ = 1 1 N ∑ i = 1 N 10 log ⁡ 10 ( ∥ s target , i ∥ 2 ∥ e noise , i ∥ 2 ) + ϵ \text{Final Loss} = \frac{1}{\text{Mean OSI-SNR} + \epsilon} = \frac{1}{\frac{1}{N} \sum_{i=1}^{N} 10 \log_{10} \left( \frac{\| s_{\text{target}, i} \|^2}{\| e_{\text{noise}, i} \|^2} \right) + \epsilon} Final Loss=Mean OSI-SNR+ϵ1=N1i=1N10log10(enoise,i2starget,i2)+ϵ1
  • 方法 1 的最终损失函数是对每一帧的 OSI-SNR 值取倒数后再取均值,强调了每一帧的信号质量。
  • 方法 2 的最终损失函数是先计算所有帧的 OSI-SNR 的均值,然后取倒数,提供了一个整体的信号质量评估。
import numpy as np
def calculate_osi_snr_frame(target, estimated):# 获取帧数和频点数num_bins, num_frames = target.shapeosi_snr_frames = np.zeros(num_frames)for frame in range(num_frames):dot_product = np.sum(target[:, frame] * estimated[:, frame])estimated_energy = np.sum(np.abs(estimated[:, frame]) ** 2)lambda_opt = estimated_energy / (dot_product + 1e-10)  # 防止除以零target_adjusted = lambda_opt * target[:, frame]noise = estimated[:, frame] - target_adjustedtarget_energy = np.sum(np.abs(target_adjusted) ** 2)noise_energy = np.sum(np.abs(noise) ** 2)osi_snr_frames[frame] = 10 * np.log10(target_energy / (noise_energy + 1e-8))return osi_snr_frames
def loss_method_1(osi_snr_frames, epsilon=1e-8):# 每一帧的 OSI-SNR 取倒数计算损失,再取均值losses = 1 / (osi_snr_frames + epsilon)final_loss = np.mean(losses)return final_loss
def loss_method_2(osi_snr_frames, epsilon=1e-8):# 每一帧的 OSI-SNR 取均值,再取倒数计算损失mean_osi_snr = np.mean(osi_snr_frames)final_loss = 1 / (mean_osi_snr + epsilon)return final_loss
# 示例掩蔽矩阵 M1 和 M2
M1 = np.array([[0.5, 0.6, 0.7],[0.8, 0.9, 1.0],[1.1, 1.2, 1.3]])M2 = np.array([[0.4, 0.5, 0.6],[0.7, 0.8, 0.9],[1.0, 1.1, 1.2]])
# 计算每一帧的 OSI-SNR
osi_snr_frames = calculate_osi_snr_frame(M1, M2)
# 计算损失
loss1 = loss_method_1(osi_snr_frames)
loss2 = loss_method_2(osi_snr_frames)
print(f"Loss Method 1 (Frame-wise OSI-SNR): {loss1:.4f}")
print(f"Loss Method 2 (Mean OSI-SNR): {loss2:.4f}")
Loss Method 1 (Frame-wise OSI-SNR): 0.03342
Loss Method 2 (Mean OSI-SNR): 0.03333

二、幅度幂律压缩均方误差(MC-MSE)损失函数

  在音频信号处理和深度学习领域,幅度幂律压缩均方误差(Magnitude Compression Mean Squared Error, MC-MSE)是一种重要的损失函数,特别适用于语音增强和音频分离任务。MC-MSE通过引入幅度压缩的概念,能够更有效地处理具有大动态范围的音频信号,从而提高模型的性能。

2.1 、原理

  在传统的均方误差(MSE)损失函数中,模型对大幅度信号的敏感性可能导致对小幅度信号的学习不足。这种情况在音频信号处理中尤为明显,因为音频信号的幅度通常具有很大的动态范围。为了解决这个问题,MC-MSE引入了幅度压缩的机制,通过对信号幅度进行非线性变换,使得模型在训练过程中能够更好地关注小幅度信号的特征。

MC-MSE的核心思想是通过幂律压缩函数对信号幅度进行处理,从而使得损失函数在计算时能够更均衡地反映不同幅度信号的影响。具体来说,MC-MSE通过对目标信号和预测信号的幅度进行压缩,来计算它们之间的均方误差。

2.2、公式

MC-MSE Loss的计算公式可以表示为:
L MC-MSE = 1 N ∑ i = 1 N ( compress ( y i ) − compress ( y ^ i ) ) 2 L_{\text{MC-MSE}}= \frac{1}{N} \sum_{i=1}^{N} \left( \text{compress}(y_i) - \text{compress}(\hat{y}_i) \right)^2 LMC-MSE=N1i=1N(compress(yi)compress(y^i))2

其中:

  • y i y_i yi 是目标信号的幅度。
  • y ^ i \hat{y}_i y^i 是模型预测的幅度。
  • compress ( ⋅ ) \text{compress}(\cdot) compress() 是幅度压缩函数,通常采用幂律压缩形式。
    幅度压缩函数的形式为:
    compress ( x ) = sign ( x ) ⋅ ∣ x ∣ α \text{compress}(x) = \text{sign}(x) \cdot |x|^\alpha compress(x)=sign(x)xα

  在这里, α \alpha α是压缩因子,通常取值在 0 < α < 1 0 < \alpha < 1 0<α<1 之间。较小的 α \alpha α值会导致更强的压缩效果,从而使得模型在训练时能够更好地学习小幅度信号的特征。通过这种方式,MC-MSE损失函数能够有效地提高模型在音频处理任务中的性能,尤其是在复杂的噪声环境中。它不仅改善了模型对小幅度信号的学习能力,还增强了模型的鲁棒性,使其在实际应用中表现得更加出色。
  通过一个具体的例子来说明如何计算两个掩蔽之间的幅度幂律压缩均方误差(MC-MSE)。假设我们有两个掩蔽 M 1 M_1 M1 M 2 M_2 M2,它们的维度都是 3 × 3 3 \times 3 3×3(即3个时间帧和3个频率bin),并且我们选择压缩指数 p = 0.3 p = 0.3 p=0.3
  首先,我们对两个掩蔽应用幂律压缩。假设 M 1 M_1 M1 M 2 M_2 M2的值如下:
M 1 = [ 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 ] M_1 = \begin{bmatrix} 0.5 & 0.6 & 0.7 \\ 0.8 & 0.9 & 1.0 \\ 1.1 & 1.2 & 1.3 \end{bmatrix} M1= 0.50.81.10.60.91.20.71.01.3
M 2 = [ 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 ] M_2 = \begin{bmatrix} 0.4 & 0.5 & 0.6 \\ 0.7 & 0.8 & 0.9 \\ 1.0 & 1.1 & 1.2 \end{bmatrix} M2= 0.40.71.00.50.81.10.60.91.2

应用幂律压缩 p = 0.3 p = 0.3 p=0.3后,我们得到:
M 1 p = [ 0. 5 0.3 0. 6 0.3 0. 7 0.3 0. 8 0.3 0. 9 0.3 1. 0 0.3 1. 1 0.3 1. 2 0.3 1. 3 0.3 ] M_1^p = \begin{bmatrix} 0.5^{0.3} & 0.6^{0.3} & 0.7^{0.3} \\ 0.8^{0.3} & 0.9^{0.3} & 1.0^{0.3} \\ 1.1^{0.3} & 1.2^{0.3} & 1.3^{0.3} \end{bmatrix} M1p= 0.50.30.80.31.10.30.60.30.90.31.20.30.70.31.00.31.30.3
M 2 p = [ 0. 4 0.3 0. 5 0.3 0. 6 0.3 0. 7 0.3 0. 8 0.3 0. 9 0.3 1. 0 0.3 1. 1 0.3 1. 2 0.3 ] M_2^p = \begin{bmatrix} 0.4^{0.3} & 0.5^{0.3} & 0.6^{0.3} \\ 0.7^{0.3} & 0.8^{0.3} & 0.9^{0.3} \\ 1.0^{0.3} & 1.1^{0.3} & 1.2^{0.3} \end{bmatrix} M2p= 0.40.30.70.31.00.30.50.30.80.31.10.30.60.30.90.31.20.3
  接下来,我们计算两个压缩后的掩蔽之间的均方误差。具体地,对于每个元素,我们计算差的平方,然后对所有元素求平均。
L MC-MSE = 1 9 ( ( 0. 5 0.3 − 0. 4 0.3 ) 2 + ( 0. 6 0.3 − 0. 5 0.3 ) 2 + … + ( 1. 3 0.3 − 1. 2 0.3 ) 2 ) = 0.00135 L_{\text{MC-MSE}} = \frac{1}{9} \left( (0.5^{0.3} - 0.4^{0.3})^2 \\+ (0.6^{0.3} - 0.5^{0.3})^2 \\+ \ldots + (1.3^{0.3} - 1.2^{0.3})^2 \right) = 0.00135 LMC-MSE=91((0.50.30.40.3)2+(0.60.30.50.3)2++(1.30.31.20.3)2)=0.00135

import numpy as npdef calculate_mc_mse(M1, M2, p=0.3):compressed_M1 = M1 ** pcompressed_M2 = M2 ** pmse = np.mean((compressed_M1 - compressed_M2) ** 2)return mseM1 = np.array([[0.5, 0.6, 0.7], [0.8, 0.9, 1.0], [1.1, 1.2, 1.3]])
M2 = np.array([[0.4, 0.5, 0.6], [0.7, 0.8, 0.9], [1.0, 1.1, 1.2]])mc_mse = calculate_mc_mse(M1, M2, p=0.3)
print("MC-MSE:", mc_mse)
MC-MSE: 0.00135

三、融合损失函数

参考:AEC论文解读 – A Deep Hierarchical Fusion Network for Fullband Acoustic Echo Cancellation
  结合 最优尺度不变信噪比(OSI-SNR)幅度幂律压缩均方误差(MC-MSE) 的损失函数,可以通过超参数 γ \gamma γ 加权来形成最终的损失函数。根据您提供的公式,最终的损失计算公式可以表示为:
L = L OSI-SNR + γ L MC-MSE L = L_{\text{OSI-SNR}} + \gamma L_{\text{MC-MSE}} L=LOSI-SNR+γLMC-MSE

  1. OSI-SNR 损失【方法 1】
    L OSI-SNR = 1 N ∑ i = 1 N Loss i = 1 N ∑ i = 1 N 1 10 log ⁡ 10 ( ∥ s target , i ∥ 2 ∥ e noise , i ∥ 2 ) + ϵ L_{\text{OSI-SNR}}= \frac{1}{N} \sum_{i=1}^{N} \text{Loss}_i = \frac{1}{N} \sum_{i=1}^{N} \frac{1}{10 \log_{10} \left( \frac{\| s_{\text{target}, i} \|^2}{\| e_{\text{noise}, i} \|^2} \right) + \epsilon} LOSI-SNR=N1i=1NLossi=N1i=1N10log10(enoise,i2starget,i2)+ϵ1

  2. MC-MSE 损失
    L MC-MSE = 1 N ∑ i = 1 N ( compress ( y i ) − compress ( y ^ i ) ) 2 L_{\text{MC-MSE}}= \frac{1}{N} \sum_{i=1}^{N} \left( \text{compress}(y_i) - \text{compress}(\hat{y}_i) \right)^2 LMC-MSE=N1i=1N(compress(yi)compress(y^i))2

  3. 最终损失公式
    L = L OSI-SNR + γ ⋅ L MC-MSE = 1 N ∑ i = 1 N Loss i = 1 N ∑ i = 1 N 1 10 log ⁡ 10 ( ∥ s target , i ∥ 2 ∥ e noise , i ∥ 2 ) + ϵ + γ ⋅ 1 N ∑ i = 1 N ( compress ( y i ) − compress ( y ^ i ) ) 2 L = L_{\text{OSI-SNR}} + \gamma \cdot L_{\text{MC-MSE}}= \frac{1}{N} \sum_{i=1}^{N} \text{Loss}_i \\= \frac{1}{N} \sum_{i=1}^{N} \frac{1}{10 \log_{10} \left( \frac{\| s_{\text{target}, i} \|^2}{\| e_{\text{noise}, i} \|^2} \right) + \epsilon} +\gamma \cdot\frac{1}{N} \sum_{i=1}^{N} \left( \text{compress}(y_i) - \text{compress}(\hat{y}_i) \right)^2 L=LOSI-SNR+γLMC-MSE=N1i=1NLossi=N1i=1N10log10(enoise,i2starget,i2)+ϵ1+γN1i=1N(compress(yi)compress(y^i))2

  • γ \gamma γ:需要调试的经验值。
  • ϵ \epsilon ϵ:一个小常数,用于防止除以零的情况。
  • 这个损失函数通过加权结合了 OSI-SNR 和 MC-MSE,能够同时考虑信号的重建质量和相似性。
  • 通过调整 γ \gamma γ 的值,可以控制两种损失在最终损失中的相对重要性,从而优化模型的性能。
import numpy as np
def calculate_osi_snr_frame(target, estimated):num_bins, num_frames = target.shapeosi_snr_frames = np.zeros(num_frames)for frame in range(num_frames):dot_product = np.sum(target[:, frame] * estimated[:, frame])estimated_energy = np.sum(np.abs(estimated[:, frame]) ** 2)lambda_opt = estimated_energy / (dot_product + 1e-10)  # 防止除以零target_adjusted = lambda_opt * target[:, frame]noise = estimated[:, frame] - target_adjustedtarget_energy = np.sum(np.abs(target_adjusted) ** 2)noise_energy = np.sum(np.abs(noise) ** 2)osi_snr_frames[frame] = 10 * np.log10(target_energy / (noise_energy + 1e-8))return osi_snr_frames
def mc_mse_loss(target, estimated, gamma=0.3):compressed_target = np.power(np.abs(target), gamma)compressed_estimated = np.power(np.abs(estimated), gamma)loss = np.mean((compressed_estimated - compressed_target) ** 2)return loss
def combined_loss(target, estimated, gamma=15):# 计算每一帧的 OSI-SNRosi_snr_frames = calculate_osi_snr_frame(target, estimated)# 计算 OSI-SNR 损失osi_snr_loss = np.mean(1 / (osi_snr_frames + 1e-10))print('osi_snr_loss:', osi_snr_loss)# 计算 MC-MSE 损失mc_mse_value = mc_mse_loss(target, estimated)print('mc_mse_value:', mc_mse_value)# 计算最终损失final_loss = osi_snr_loss + gamma * mc_mse_valuereturn final_loss
# 示例掩蔽矩阵 M1 和 M2
M1 = np.array([[0.5, 0.6, 0.7],[0.8, 0.9, 1.0],[1.1, 1.2, 1.3]])M2 = np.array([[0.4, 0.5, 0.6],[0.7, 0.8, 0.9],[1.0, 1.1, 1.2]])
# 计算最终损失
loss_value = combined_loss(M1, M2, gamma=15)
print(f'Final Loss: {loss_value:.5f}')
osi_snr_loss: 0.033421230071106235
mc_mse_value: 0.0013543901266690674
Final Loss: 0.05374

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

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

相关文章

【置信区间】之Python实现

置信区间是统计学中的一个核心概念,用于估计总体参数(如均值、比例等)的取值范围。以下是对置信区间的详细解释: 一、定义与基本概念 定义:置信区间是指由样本统计量所构造的总体参数的估计区间。它给出了参数真实值有一定概率落在该区间内的范围,反映了测量值的可信程度…

大恒相机开发(3)—大恒相机工业检测的实际案例

大恒相机工业检测的实际案例 工业检测的实际案例图像采集性能优化技巧工业环境下的稳定性 工业检测的实际案例 以下是一些使用大恒相机进行工业检测的实际案例&#xff1a; 多特征光学成像系统&#xff1a; 在这个案例中&#xff0c;使用大恒相机构建了一个全方位、多特征的图…

Java基础面试题20:Java语言sendRedirect()和forward()方法有什么区别?

Java基础面试题&#xff1a;Java语言sendRedirect()和forward()方法有什么区别&#xff1f; 在 Java Web 开发中&#xff0c;sendRedirect() 和 forward() 是两个非常常用的方法&#xff0c;但它们有一些核心区别。我们来用最简单的方式给你解释清楚。 一、sendRedirect() 和 …

go官方日志库带色彩格式化

go默认的 log 输出的日志样式比较难看&#xff0c;所以通过以下方式进行了美化和格式化&#xff0c;而且加入了 unicode 的ascii码&#xff0c;进行色彩渲染。 package mainimport ("fmt""log""os""runtime""strings""…

Linux shell脚本用于常见图片png、jpg、jpeg、webp、tiff格式批量转PDF文件

Linux Debian12基于ImageMagick图像处理工具编写shell脚本用于常见图片png、jpg、jpeg、webp、tiff格式批量转PDF文件&#xff0c;”多个图片分开生成多个PDF文件“或者“多个图片合并生成一个PDF文件” 在Linux系统中&#xff0c;使用ImageMagick可以图片格式转换&#xff0c…

【C++语言】多态

一、多态的概念 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某种行为&#xff0c;当不同的对象去完成时会产生出不同的状态。 我们可以举一个例子&#xff1a; 比如买票这种行为&#xff0c;当普通人买票时&#xff0c;是全价买票&am…

Centos7配置webrtc-streamer环境

Centos7配置webrtc-streamer环境 安装webrtc-streamer0.7版本 升级gdb 1、yum安装2、查看gdb版本3.下载待升级的gdb版本4.QA 1、预编译的时候报错no acceptable C compiler found in $PATH2、make的时候报错[all-bfd] Error3、make的时候报错 升级GCC 1.源码编译升级gcc9.3.0…

Vue.js 响应接口

Vue.js 响应接口 引言 Vue.js,作为当前前端开发领域中的佼佼者,以其简洁、高效和灵活的特点,赢得了广大开发者的喜爱。其核心功能之一便是响应式系统,它使得数据与视图之间的同步变得异常简单。本文将深入探讨Vue.js的响应接口,解析其工作原理,并展示如何在实际项目中有…

深入了解蓝牙Profile类型与设备的对应关系

在现代技术中,蓝牙作为一种无线通信技术,广泛应用于各种设备之间的短距离通信。不同的设备在连接时使用不同的蓝牙Profile(配置文件),每种Profile都为特定的设备功能提供支持,例如音频流传输、语音通话、文件传输等。在本文中,我们将详细介绍蓝牙Profile的常见类型及其对…

LLMs之PDF:MinerU(将PDF文件转换成Markdown和JSON格式)的简介、安装和使用方法、案例应用之详细攻略

LLMs之PDF&#xff1a;MinerU(将PDF文件转换成Markdown和JSON格式)的简介、安装和使用方法、案例应用之详细攻略 目录 MinerU的简介 0、日志 1、MinerU 的主要特点 2、已知问题 MinerU 安装和使用方法 1、MinerU的三种体验方式 T1、在线演示 T2、快速CPU演示 T3、GPU …

【AIGC】ChatGPT 结构化 Prompt 的高级应用

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;标识符的使用&#xff08;Use of Identifiers&#xff09;1. #2. <>3. - 或 4. [] &#x1f4af;属性词的重要性和应用应用场景 &#x1f4af;具体模块…

Python绘制图表

Python提供了多种可视化库&#xff0c;常用的有matplotlib、seaborn和plotly等。这些库可以用于绘制各种类型的图表&#xff0c;如折线图、散点图、柱状图、饼图等。 下面是一个使用matplotlib绘制折线图的示例&#xff1a; python import matplotlib.pyplot as plt # 准备数…

Python 练习

一、列表练习 1、求偶数元素的和[1,2,1,2,3,3,6,5,8] 1 2 3 4 5 6 list01 [1, 2, 1, 2, 3, 3, 6, 5, 8] sum 0 for i in list01: if int(i) % 2 0: sum sum i print(f"列表中所有偶数和是: {sum}") 2、计算 1 - 2 3 - 4 ... 99 中除88以外…

OpenEuler 22.03 安装 flink-1.17.2 集群

零&#xff1a;规划 本次计划安装三台OpenEuler 22.03 版本操作系统的服务器&#xff0c;用于搭建 flink 集群。这里使用flink1.17.2 的原因&#xff0c;是便于后续与springboot的整合 服务器名IP地址作用其他应用flink01192.168.159.133主jdk11、flink-1.17.2flink02192.168.…

Docker 安装 禅道-21.2版本-外部数据库模式

Docker 安装系列 1、拉取最新版本&#xff08;zentao 21.2&#xff09; [rootTseng ~]# docker pull hub.zentao.net/app/zentao Using default tag: latest latest: Pulling from app/zentao 55ab1b300d4b: Pull complete 6b5749e5ef1d: Pull complete bdccb03403c1: Pul…

宽带ANC、窄带ANC、正弦噪声抑制组成混合噪声控制系统结构

混合控制结构由宽带ANC子系统&#xff08;BANC&#xff09;、窄带ANC子系统&#xff08;NANC&#xff09;和正弦噪声抑制子系统&#xff08;SNC&#xff09;三部分组成。这种混合系统的设计目标是有效地控制同时包含宽带噪声和窄带噪声&#xff08;例如周期性的正弦噪声&#x…

车载网关性能 --- GW ECU报文(message)处理机制的技术解析

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…

【潜意识Java】深度解析黑马项目《苍穹外卖》与蓝桥杯算法的结合问题

目录 为什么要结合项目与算法&#xff1f; 1. 蓝桥杯与《苍穹外卖》项目的结合 实例&#xff1a;基于蓝桥杯算法思想的订单配送路径规划 问题描述&#xff1a; 代码实现&#xff1a;使用动态规划解决旅行商问题 代码解析&#xff1a; 为什么这个题目与蓝桥杯相关&#x…

自己搭建专属AI:Llama大模型私有化部署

前言 AI新时代&#xff0c;提高了生产力且能帮助用户快速解答问题&#xff0c;现在用的比较多的是Openai、Claude&#xff0c;为了保证个人隐私数据&#xff0c;所以尝试本地&#xff08;Mac M3&#xff09;搭建Llama模型进行沟通。 Gpt4all 安装比较简单&#xff0c;根据 G…

大语言模型中的Agent优势及相关技术;Agent和RAG区别

大语言模型中的Agent优势及相关技术: 强大的任务规划与执行能力 技术:通过将复杂任务拆解为多个子任务,并依据任务间的逻辑关系和优先级进行规划,确定执行顺序,调用相应工具或模型来完成各子任务,最终实现复杂任务的整体解决。如微软的Jarvis,可利用LLM的推理规划能力拆…