解释性人工智能(XAI)

引言

        解释性人工智能(XAI)是指一类旨在使人能够理解和解释机器学习模型的方法和技术。XAI的目标是提高AI系统的透明度和可理解性,让人们能够理解机器学习模型的决策过程、推理方式和结果。这对于社会应用和用户信任非常重要,因为AI系统的不可解释性可能带来风险和问题。

        例如,在医疗领域,基于机器学习的诊断系统可能会出现错误的判断,如果这些错误不能被解释或理解,就会严重影响医生和患者的信任和满意度。同样,在金融领域,决策树或神经网络等模型的输出结果可能会影响到人们的投资和贷款等决策,如果这些决策不能被理解或解释,就难以建立起用户对AI系统的信任和依赖。

        因此,XAI对于提高AI系统的透明度和可理解性具有重要的作用和意义。通过XAI技术,人们可以更好地理解机器学习模型的决策过程,从而提高其可靠性和准确性。

1. 概念和背景

        解释性人工智能(XAI)是指一类旨在使人能够理解和解释机器学习模型的方法和技术。其目标是提高AI系统的透明度和可理解性,让人们能够理解机器学习模型的决策过程、推理方式和结果。

AI系统的透明度和可理解性对于社会应用和用户信任非常重要的原因如下:

  1. 可解释性促进可信度:当AI系统的决策过程可以被解释和理解时,人们更容易相信该系统的准确性和可靠性。这对于关键领域如医疗、金融和法律等至关重要,因为这些领域的决策往往需要有合理的解释和依据。

  2. 误判和错误纠正:如果AI系统做出错误的决策,可解释性使人们能够追溯决策的原因,并纠正错误。例如,在医疗诊断中,如果机器学习模型错误地将一个患者诊断为正常,医生可以通过理解模型的决策过程来找到错误的原因并进行修正。

  3. 避免偏见和不公平:AI系统的不可解释性可能导致潜在的偏见和不公平现象。例如,招聘中使用的自动筛选系统可能会对某些人群产生不公平的影响,但如果无法解释其决策过程,就很难发现和纠正这个问题。

下面是几个实际案例,说明AI系统的不可解释性可能带来的问题和风险:

  1. 信用评分系统:银行和金融机构使用AI算法来评估借款人的信用风险。然而,这些算法通常非常复杂且不可解释,导致借款人难以理解为何被拒绝贷款。这可能引发争议和不满,破坏用户对金融系统的信任。

  2. 自动驾驶汽车:自动驾驶汽车依赖于深度学习模型进行决策和感知。然而,当发生事故时,由于无法解释模型的决策过程,很难确定责任和原因。这可能引发法律纠纷和安全担忧。

  3. 医疗诊断系统:医疗领域利用AI系统进行疾病诊断和预测。如果这些系统不能提供解释和依据,医生和患者难以信任其结果。此外,不可解释的系统也难以满足医疗行业对于透明性和责任的要求。

        为了解决这些问题,XAI技术被广泛研究和应用,例如使用特征重要性分析、模型可视化和规则提取等方法来提高模型的可解释性和透明度。通过增加AI系统的可解释性,我们可以提高其社会应用的可信度和用户的信任水平。

2. XAI的应用和意义

  1. 医疗领域:XAI在医疗诊断和治疗决策中具有重要作用。通过解释模型的决策过程,医生可以更好地理解AI系统如何做出诊断,并与其共同决策。例如,通过可视化模型的特征重要性,医生可以了解到模型在诊断中关注的关键特征,从而提高对疾病的理解和判断。

代码示例:

# 使用LIME算法解释模型的决策过程
import lime
import lime.lime_tabular
​
# 创建LIME解释器
explainer = lime.lime_tabular.LimeTabularExplainer(training_data, feature_names=feature_names, class_names=class_names)
​
# 解释一个样本的预测结果
exp = explainer.explain_instance(test_sample, model.predict_proba, num_features=5)
exp.show_in_notebook()  # 在Jupyter Notebook中显示解释结果
  1. 金融领域:XAI在信用评分、风险管理和投资决策中发挥着重要作用。通过解释机器学习模型的决策过程,金融从业者可以更好地理解模型的预测依据,并评估其合理性和准确性。同时,可解释性还有助于发现和纠正潜在的偏见和不公平现象。

代码示例:

# 使用SHAP算法解释模型的预测结果
import shap
​
# 创建SHAP解释器
explainer = shap.Explainer(model)
​
# 解释一个样本的预测结果
shap_values = explainer(test_sample)
shap.plots.waterfall(shap_values[0])  # 绘制瀑布图来展示特征对预测结果的贡献
  1. 自动驾驶:XAI在自动驾驶领域有助于提高系统的可靠性和安全性。通过解释模型的决策过程,车辆乘客和监管部门可以更好地理解自动驾驶系统如何进行决策,并评估其合理性和安全性。这对于调查事故责任、改进系统设计和满足监管要求非常重要。

代码示例:

# 使用LIME算法解释模型的决策过程
import lime
import lime.lime_image
​
# 创建LIME解释器
explainer = lime.lime_image.LimeImageExplainer()
​
# 解释一张图像的预测结果
explanation = explainer.explain_instance(image, model.predict_proba, top_labels=1, hide_color=0, num_samples=1000)
explanation.show_in_notebook()  # 在Jupyter Notebook中显示解释结果

XAI不仅提供了更可靠和可解释的决策支持,还在解决AI伦理和偏见问题上发挥着重要作用:

  1. 减少算法歧视:通过解释模型的决策过程,可以发现和纠正潜在的算法歧视问题。例如,在招聘中使用自动筛选系统时,可解释性可以帮助评估其决策是否受到性别、种族等因素的影响,并采取相应的措施来减少偏见。

  2. 错误判断纠正:当AI系统做出错误的决策时,XAI可以帮助用户理解错误的原因,并采取相应的措施进行纠正。例如,在司法系统中使用AI进行罪犯判定时,如果模型的决策结果存在错误,可解释性可以帮助律师和法官理解模型的决策依据,从而发现和纠正错误。

        XAI在医疗、金融、自动驾驶等领域的应用能够提供更可靠和可解释的决策支持,帮助用户理解AI系统的决策过程。同时,它还有助于解决AI伦理和偏见问题,减少算法歧视和错误判断。通过使用适当的XAI技术和方法,可以增强AI系统的透明度和可信度,推动其在各个领域的应用。

XAI的研究领域和方法

1. 算法改进

  1. 透明机器学习算法

        透明机器学习算法是指那些可以提供模型决策过程的详细信息的算法。这些算法通常使用可解释性模型(例如线性回归、决策树等)或添加了可解释性约束的复杂模型(例如LASSO回归、ElasticNet等)来进行训练。这些算法的主要优点是提供了对模型决策过程的深入理解,从而帮助提高模型的可信度和预测准确性。

代码示例:

# 使用透明机器学习算法(如决策树)进行分类
from sklearn.tree import DecisionTreeClassifier
​
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
​
# 显示模型的特征重要性
feature_importances = model.feature_importances_
print(feature_importances)
        2.规则提取

规则提取是一种从黑盒模型中提取可理解规则的技术。它通常通过分析模型的输入输出关系来提取模型的行为和决策规则。这些规则可以用于解释模型的预测结果,并帮助用户理解模型的决策依据。

代码示例:

# 使用规则提取算法(如OneR)进行分类
from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score
​
iris = load_iris()
X, y = iris.data, iris.target
​
model = GaussianNB()
model.fit(X, y)
​
# 使用OneR算法提取规则
from sklearn.experimental import enable_hist_gradient_boosting
from sklearn.tree import DecisionTreeClassifier, export_text
​
rules = export_text(DecisionTreeClassifier(random_state=42).fit(X, y))
print(rules)
        3.局部可解释性模型

        局部可解释性模型是指那些可以提供关于单个预测的解释的模型。这些模型通常使用局部拟合算法来训练,例如局部加权线性回归(LWLR)或局部加权核密度估计(LWKDE)。这些模型的主要优点是提供了针对单个预测的解释和可信度评估,从而帮助用户更好地理解AI系统的决策过程。

代码示例:

# 使用局部加权线性回归(LWLR)进行预测
import numpy as np
from sklearn.linear_model import LinearRegression
​
def lwlr(test_point, x_data, y_data, k=1.0):m = np.shape(x_data)[0]weights = np.mat(np.eye((m)))for j in range(m):diff_mat = test_point - x_data[j, :]weights[j, j] = np.exp(diff_mat * diff_mat.T / (-2.0 * k ** 2))xTx = x_data.T * (weights * x_data)if np.linalg.det(xTx) == 0.0:return Nonews = xTx.I * (x_data.T * (weights * y_data))return test_point * ws
​
# 使用LWLR进行预测
test_point = np.array([0.5, 0.5, 0.5, 0.5])
lwlr(test_point, X_train, y_train, k=1.0)

        透明机器学习算法、规则提取和局部可解释性模型是提高AI系统可解释性和可靠性的常用方法。它们都可以提供对模型决策过程的深入理解,并帮助用户更好地理解AI系统的决策依据。这些方法在各个领域都有广泛的应用,例如医疗、金融、自动驾驶等。

2. 可视化技术

        可视化技术在可解释人工智能(XAI)中起着至关重要的作用,它能够帮助用户理解AI系统的决策过程、增强对模型的信任,并提供直观的解释。以下是两个常见的可视化技术示例:特征重要性可视化和决策路径可视化。

        1.特征重要性可视化

        特征重要性可视化是一种展示模型特征对预测结果的相对重要性的方法。它可以帮助用户了解模型对不同特征的依赖程度,从而更好地理解模型的决策依据。

代码示例:

import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
​
model = RandomForestClassifier()
model.fit(X_train, y_train)
​
# 获取特征重要性
feature_importances = model.feature_importances_
​
# 可视化特征重要性
plt.bar(range(len(feature_importances)), feature_importances)
plt.xticks(range(len(feature_importances)), feature_names, rotation=90)
plt.xlabel('Feature')
plt.ylabel('Importance')
plt.title('Feature Importance')
plt.show()

        上述代码使用随机森林分类器训练了一个模型,并通过feature_importances_属性获取了特征重要性。随后,使用matplotlib库进行可视化,将特征重要性以柱状图的形式展示出来。

        2.决策路径可视化

        决策路径可视化是一种将模型的决策路径以图形化的方式展示出来的技术。它可以帮助用户了解模型在预测过程中的决策流程,并提供对预测结果的解释。

代码示例:

from sklearn import tree
import graphviz
​
model = tree.DecisionTreeClassifier()
model.fit(X_train, y_train)
​
# 可视化决策树
dot_data = tree.export_graphviz(model, out_file=None, feature_names=feature_names, class_names=class_names, filled=True)
graph = graphviz.Source(dot_data)
graph.render("decision_tree")  # 将决策路径保存为PDF或图片文件
graph.view()  # 在浏览器中显示决策路径

        上述代码使用决策树分类器训练了一个模型,并使用export_graphviz函数将决策树导出为DOT格式的数据。随后,使用graphviz库将DOT数据渲染成决策树的可视化图形。

        通过特征重要性可视化和决策路径可视化,用户可以更好地理解AI系统的决策过程,并对预测结果的可靠性产生信任。这些可视化技术在XAI中起着关键作用,有助于提高用户对AI决策的理解和接受度。

3. 应用场景

  1. 医疗诊断

        在医疗诊断领域,AI系统可以通过分析患者的病历、体征和检查结果来预测病情,但这些AI系统通常是黑盒子,难以解释其决策依据。XAI技术可以帮助医生理解AI系统的决策过程,并提供更准确的判断依据。

        应用案例: 病情预测:AI系统可以根据患者的病历、体征和检查结果预测疾病的发展趋势,例如预测癌症的生存率或心脏病发作的风险。

XAI的帮助:

  • 解释特征重要性:XAI技术可以分析AI系统对预测结果所使用的特征,将其排序并显示给医生,从而帮助医生了解哪些特征对预测结果最为重要。

  • 提供可信的解释:通过可视化或文字形式的解释,XAI技术可以向医生解释AI系统如何结合特征进行决策,并提供对决策的信心度量。

优势:

  • 提高诊断准确率:XAI技术帮助医生理解AI系统的决策过程,从而帮助医生更好地使用AI系统作出准确的诊断。

  • 个性化治疗:通过理解AI系统的决策过程,医生可以根据患者的特定情况制定个性化的治疗方案。

  • 增加对AI系统的信任:通过提供透明和可解释的决策过程,XAI技术增加了医生对AI系统的信任,使其更愿意接受和使用AI系统。

挑战:

  • 模型可解释性问题:大多数AI模型是黑盒子,难以解释其决策依据,这使得医生难以理解AI系统如何得出某一诊断结果。

  • 数据质量问题:医疗数据通常复杂且存在噪声,这可能影响AI系统的预测准确性,同时也增加了解释AI系统决策的难度。

  • 法律和伦理问题:解释AI系统的决策过程可能涉及患者隐私和数据保护等法律和伦理问题。

解决方案:

  • 可解释人工智能技术:使用XAI技术,如局部线性可解释性(LIME)或SHapley Additive exPlanations(SHAP),可以帮助解释AI模型的决策过程。

  • 数据清洗和预处理:通过对医疗数据进行清洗和预处理,可以提高数据质量,减少噪声和错误。

下面是一个使用LIME解释模型决策的示例代码:

import lime
import lime.lime_tabular
​
# 训练模型
model.fit(X_train, y_train)
​
# 初始化解释器
explainer = lime.lime_tabular.LimeTabularExplainer(X_train, feature_names=feature_names, class_names=class_names, discretize_continuous=True)
​
# 选择一条样本进行解释
sample_idx = 10
sample = X_test[sample_idx]
​
# 解释该样本的预测结果
explanation = explainer.explain_instance(sample, model.predict_proba)
​
# 可视化解释结果
explanation.show_in_notebook()
        金融风险评估

        在金融风险评估中,AI系统可以通过分析客户的个人信息、财务状况和历史信用记录来评估其信用风险。XAI技术可以帮助金融专家理解AI系统的决策过程,并提供更准确的判断依据。

        应用案例: 信用评分:AI系统可以根据客户的个人信息和历史信用记录评估其信用风险,例如为客户分配信用分数或决定是否批准贷款申请。

        XAI的帮助:

        特征重要性解释:XAI技术可以解释哪些特征对于AI系统评估信用风险最为重要,从而帮助金融专家了解决策的依据。

        决策可信度评估:XAI技术可以提供对AI系统预测结果的置信度评估,帮助金融专家判断AI系统的决策是否可靠。

        优势:

        提高风险评估准确率:通过理解AI系统的决策过程,金融专家可以更好地使用模型评估客户的信用风险,从而提高评估准确率。

        降低信贷风险:通过更准确地评估客户的信用风险,金融机构可以更好地管理信贷风险,减少坏账率。

        加快决策速度:AI系统可以快速评估客户的信用风险,从而加快贷款决策的速度。

        挑战:

        模型可解释性问题:大多数AI模型是黑盒子,难以解释其决策依据,这使得金融专家难以理解AI系统如何评估客户的信用风险。

        数据质量问题:金融数据通常包含噪声和缺失值,这可能影响AI系统的预测准确性,并增加解释AI系统决策的难度。

        法律和伦理问题:使用AI系统评估信用风险可能涉及公平性和歧视等法律和伦理问题。

解决方案:

  • 可解释人工智能技术:使用XAI技术,如SHAP或LIME,可以帮助解释AI模型的决策过程。

  • 数据清洗和预处理:通过对金融数据进行清洗和预处理,可以提高数据质量,并减少噪声和错误。

使用XAI方法改进算法可解释性

        当使用常见的机器学习算法(如决策树或逻辑回归)时,可以应用可解释性技术来改进算法的可解释性。下面是一个使用LIME(局部线性可解释性)技术来解释决策树模型的示例代码:

import numpy as np
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
import lime
import lime.lime_tabular
​
# 加载数据集
data = load_iris()
X = data.data
y = data.target
feature_names = data.feature_names
class_names = data.target_names
​
# 训练决策树模型
model = DecisionTreeClassifier()
model.fit(X, y)
​
# 初始化解释器
explainer = lime.lime_tabular.LimeTabularExplainer(X, feature_names=feature_names, class_names=class_names, discretize_continuous=True)
​
# 选择一条样本进行解释
sample_idx = 0
sample = X[sample_idx]
​
# 解释该样本的预测结果
explanation = explainer.explain_instance(sample, model.predict_proba, num_features=len(feature_names))
​
# 可视化解释结果
explanation.show_in_notebook()

        上述代码使用了sklearn库加载鸢尾花数据集,并使用DecisionTreeClassifier训练了一个决策树模型。接下来,我们使用lime.lime_tabular.LimeTabularExplainer初始化了一个解释器,并传入特征名称、类别名称和训练数据。然后,我们选择一条样本进行解释,并使用explain_instance方法来解释该样本的预测结果。最后,我们使用show_in_notebook方法将解释结果可视化展示出来。

        LIME技术通过生成局部可解释模型来解释决策树模型的决策过程。它通过对原始样本进行微小的特征扰动来生成类似的数据集,并使用这些数据集训练一个线性模型,从而解释原始样本的预测结果。在解释器中,我们使用num_features参数来指定要选择的特征数量。

        解释结果的可视化展示了特征的重要性和对预测结果的影响程度。在每个特征的解释中,我们可以看到特征的权重以及对应的预测结果的变化。这些解释可以帮助我们理解决策树模型是如何根据特征进行决策的,从而提高模型的可解释性。

通过使用XAI技术(如LIME)解释决策树模型,我们可以获得以下好处:

  1. 特征重要性解释:解释器会根据特征的权重显示出每个特征对预测结果的重要性,帮助我们理解模型是如何利用不同特征进行决策的。

  2. 决策可信度评估:解释器可以提供对预测结果的置信度评估,帮助我们判断模型的决策是否可靠。

结论

        首先,XAI可以增强AI系统的可理解性和透明度。传统的机器学习算法在解决实际问题时,常常缺乏可解释性,难以解释模型的运行过程,造成了不可信的感觉。而XAI技术可以提高AI系统的可解释性,帮助用户理解AI系统的决策和行为,增加对AI系统的信任度和透明度。

        其次,XAI对于AI技术发展和社会应用具有推动作用。AI技术的应用范围越来越广泛,但很多领域的AI系统都需要遵守一些道德、法律、规范等方面的要求。XAI可以帮助我们更好地理解AI系统的决策和行为,从而为制定相关规范和政策提供依据,推动AI技术的健康发展。

        未来,我们需要继续探索更先进的XAI技术,以提高AI系统的可解释性和透明度。同时,我们还需要解决一些挑战,例如:

  1. 如何平衡可解释性和预测性能之间的矛盾。

  2. 如何在处理大型、复杂数据集时提高解释器的效率和准确性。

  3. 如何应对对抗性攻击和隐私泄露等问题。

        为了解决这些挑战,我们需要加强学术界和工业界之间的合作,共同推动XAI技术的发展,并探索新的研究方向,以提高AI系统的可解释性和透明度,促进AI技术的健康发展。

下面是一个使用SHAP(Shapley Additive Explanations)技术来解释深度神经网络模型的示例代码:

import numpy as np
import tensorflow as tf
import shap
​
# 加载数据集
data = tf.keras.datasets.mnist.load_data()
X_train, y_train = data[0]
X_test, y_test = data[1]
​
# 构建深度神经网络模型
model = tf.keras.Sequential([tf.keras.layers.Flatten(input_shape=(28, 28)),tf.keras.layers.Dense(128, activation='relu'),tf.keras.layers.Dense(10)
])
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy'])
model.fit(X_train, y_train, epochs=5)
​
# 初始化解释器
explainer = shap.DeepExplainer(model, X_train[:100])
​
# 选择一条测试样本进行解释
sample_idx = 0
sample = X_test[sample_idx]
​
# 解释该样本的预测结果
explanation = explainer.shap_values(sample.reshape(1, -1))
​
# 可视化解释结果
shap.image_plot(explanation, -sample.reshape(1, 28, 28))

        上述代码使用了tensorflow库加载MNIST数据集,并使用Sequential模型构建了一个深度神经网络模型。接下来,我们使用shap.DeepExplainer初始化了一个解释器,并传入训练数据。然后,我们选择一条测试样本进行解释,并使用shap_values方法来解释该样本的预测结果。最后,我们使用shap.image_plot方法将解释结果可视化展示出来。

        SHAP技术通过对每个特征的影响进行分析来解释深度神经网络模型的决策过程。它通过对样本空间进行采样,生成类似的数据集,并使用这些数据集计算每个特征的Shapley值,从而解释原始样本的预测结果。在解释器中,我们使用shap.DeepExplainer来初始化一个解释器,并使用shap_values方法来解释样本的预测结果。

        解释结果的可视化展示了特征的重要性和对预测结果的影响程度。在每个特征的解释中,我们可以看到特征的权重以及对应的预测结果的变化。这些解释可以帮助我们理解深度神经网络模型是如何根据特征进行决策的,从而提高模型的可解释性。

通过使用XAI技术(如SHAP)解释深度神经网络模型,我们可以获得以下好处:

  1. 特征重要性解释:解释器会根据特征的Shapley值显示出每个特征对预测结果的重要性,帮助我们理解模型是如何利用不同特征进行决策的。

  2. 决策可信度评估:解释器可以提供对预测结果的置信度评估,帮助我们判断模型的决策是否可靠。

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

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

相关文章

【八大排序】直接插入排序 | 希尔排序 + 图文详解!!

📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构冒险记 ✅C语言进阶之路 🌅 有航道的人,再渺小也不会迷途。 文章目录 一、排序的概念二、直接插入排序2.1 基本思想2.2 适用说明2.3 过程图示2.4 代码实现2.…

华为配置ARP安全综合功能实验

配置ARP安全综合功能示例 组网图形 图1 配置ARP安全功能组网图 ARP安全简介配置注意事项组网需求配置思路操作步骤配置文件 ARP安全简介 ARP(Address Resolution Protocol)安全是针对ARP攻击的一种安全特性,它通过一系列对ARP表项学习和A…

Docker 基础篇

目录 一、Docker 简介 1. Docker 2. Linux 容器 3. 传统虚拟机和容器的对比 4. Docker 的作用 5. Docker 的基本组成(Docker 三要素) 6. Docker 工作原理 7. Docker 架构 8. Docker 下载 二、Docker 安装 1. CentOS Docker 安装 2. CentOS8 …

beep蜂鸣器驱动实验-创建蜂鸣器的设备节点

一. 简介 前面我借助 pinctrl 和 gpio 子系统编写了 LED 灯驱动。 I.MX6U-ALPHA 开发板上还有一个蜂鸣器,从软件的角度考虑,蜂鸣器驱动和 LED 灯驱动其实是相同的,都是控制 IO 输出高低电平。接下来我们就来学习编写蜂鸣器的 Linux 驱动。…

5、应急响应-拒绝服务钓鱼识别DDOS压力测试邮件反制分析应用日志

目录 前言: 1、#内网应急-日志分析-爆破&横向&数据库 2、#红队APT-钓鱼邮件识别-内容&发信人&附件 3、#拒绝服务攻击-DDOS&CC-代理&防火墙防御 用途:个人学习笔记,欢迎指正! 前言: 了解和…

上海纽约大学信息技术部高级主任常潘:解密大数据引领的未来教育革命

大数据产业创新服务媒体 ——聚焦数据 改变商业 在数字化时代,大数据技术的应用已经深刻地改变着各行各业。特别是在教育领域,智慧校园建设作为现代化校园的代名词,正迎来大数据技术的巨大机遇。 1月17日,上海纽约大学信息技术部…

数据结构之红黑树

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 红黑树基础 前言一、什么是红黑树二、左旋和右旋实现三、插入的调整四、红黑树的删除1.引入库2.读入数据 总结 前言 提示:这里可以添加本文要记录的大概内容&…

dockerpipwork相关测试过程

pipework可以减轻docker实施过程中的工作量,在网上也找了几篇类似的文章,按照相应配置,结果并不相同 如下测试过程记录下: docker run -it --rm --name c1 busybox docker run -it --rm --name c2 busyboxpipework br1 c1 192…

AD24-固定孔放置

1、固定孔放置的一般距离,分为金属和非金属 2、固定孔通过焊盘完成,放置焊盘,并将层修改为Multi Layer 焊盘与固定孔的等大小的 3、金属与非金属的区别 ①非金属 ②金属 4、设置固定孔放置的距离 5、通过复制粘贴即可完成其他孔的放置 6、导…

【机器学习】正则化

正则化是防止模型过拟合的方法,它通过对模型的权重进行约束来控制模型的复杂度。 正则化在损失函数中引入模型复杂度指标,利用给W加权值,弱化了数据的噪声,一般不正则化b。 loss(y^,y):模型中所有参数的损失函数&…

Linux下安装openresty

Linux下安装openresty 十一、Linux下安装openresty11.1.概述11.2.下载OpenResty并安装相关依赖:11.3.使用wget下载:11.4.解压缩:11.5.进入OpenResty目录:11.6.编译和安装11.7.进入OpenResty的目录,找到nginx:11.8.在sbin目录下启动nginx11.9.…

PySimpleGUI 综合应用|英语文本朗读以及转换为语音Mp3

PySimpleGUI 综合应用 目录 PySimpleGUI 综合应用 应用界面 完整代码 所需模块 PySimpleGUI pyttsx3 pyaudio rapidfuzz 字典格式 应用界面 完整代码 英语朗读器.pyw import PySimpleGUI as sg import pyttsx3,pyaudio,pyperclip import os,re,datetime,wave,threa…

Java List的合并与切分

在Java开发中经常遇到list结构数据的处理,如List的合并或拆分,记录下来,方便备查。 一、List 合并 两个list数据的合并处理,可使用Java8 新特性的stream流,根据实际需要遍历取值。 1、定义 UserInfo 对象 订单的相…

【vim 学习系列文章 3.2 -- vim 删除 空格】

文章目录 vim 删除行尾空格 vim 删除行尾空格 在代码开发的过程中&#xff0c;经常会遇到行尾有空格的现象&#xff0c;如下&#xff1a; 我们可以在 .vimrc 中通过map 命令来映射删除行尾空格的快捷键&#xff0c;如下&#xff1a; map d<space> :%s/\s*$//g <cr…

Redis 学习笔记 2:Java 客户端

Redis 学习笔记 2&#xff1a;Java 客户端 常见的 Redis Java 客户端有三种&#xff1a; Jedis&#xff0c;优点是API 风格与 Redis 命令命名保持一致&#xff0c;容易上手&#xff0c;缺点是连接实例是线程不安全的&#xff0c;多线程场景需要用线程池来管理连接。Redisson&…

LVGL部件4

一.列表部件 1.知识概览 2.函数接口 1.lv_list_add_btn lv_list_add_btn 是 LittlevGL&#xff08;LVGL&#xff09;图形库中的一个函数&#xff0c;用于向列表&#xff08;list&#xff09;对象中添加一个按钮&#xff08;button&#xff09;。 函数原型为&#xff1a;lv_ob…

新手不会Git也能玩Github吗?

新手不会Git也能玩Github吗&#xff1f; 前言使用Github的准备步骤使用一种访问外网资源的方法&#xff08;这一步才是新手最容易&#xff09;注册账号 创建一个自己的仓库创建完仓库后的界面 搜索你想要的代码类型以搜索坦克大战为例以下载烟花代码为例 总结 前言 说到Github&…

使用Python的Turtle模块简单绘制烟花效果

import turtle import random# 初始化屏幕 screen turtle.Screen() screen.bgcolor("black") screen.title("烟花模拟")# 创建一个Turtle来绘制烟花 firework turtle.Turtle() firework.hideturtle() firework.speed(0) # 设置绘图速度为最快# 绘制烟花…

关系型数据库的介绍与历史(History of DataBase)

昨晚和大家聊到 数据库&#xff08;DataBase&#xff09;简单概述 &#xff0c;今天和大家聊聊 关系型数据库&#xff08;关系数据库&#xff09; 也就是DataBase&#xff08;简称DB&#xff09;的历史&#xff0c;它是以关系模型&#xff08;Relational Model&#xff09;来构…

C# 多线程(2)——线程同步

目录 1 线程不安全2 线程同步方式2.1 简单的阻塞方法2.2 锁2.2.1 Lock使用2.2.2 互斥体Mutex2.2.3 信号量Semaphore2.2.3 轻量级信号量SemaphoreSlim2.2.4 读写锁ReaderWriterLockSlim 2.3 信号同步2.3.1 AutoResetEvent2.3.1.1 AutoResetEvent实现双向信号 2.3.2 ManualResetE…