2023.7.16 第五十九次周报

目录

前言

文献阅读:跨多个时空尺度进行预测的时空 LSTM 模型

背景

本文思路

本文解决的问题

方法论

SPATIAL

自动机器学习模型

数据处理

模型性能

代码

用Python编写的LSTM多变量预测模型

总结


前言

This week, I studied an article that uses LSTM to solve problems related to spatiotemporal prediction.This paper presents a DL framework based on bidirectional LSTM to extend the learning of time-series signals. The resulting model provides a scalable forecasting system that adjusts naturally to spatiotemporal patterns. The cost of model training was reduced by an order of magnitude as we trained a single model for each dataset rather than each signal. SPATIAL adjusts naturally to missing data, and the random distribution of missing data between sensors can be leveraged to lessen the effect of data gaps on learning (i.e., since typically sensors exhibit data gaps at different times, combining information from multiple sensors in a single framework can improve learning on noisy and error-prone data). Finally, extending the recurrent structure of LSTM-type approaches for time series applications to the spatiotemporal direction has the potential to translate to many different industrial applications such as weather, transport, and epidemiology.In addition, in terms of coding, I am currently reviewing the foundational knowledge intensively.

本周学习了一篇用lstm来解决和时空预测有关的问题。本文提出了一种基于双向LSTM的深度学习框架,以扩展时间序列信号的学习。由此产生的模型提供了一个可扩展的预测系统,该系统可以自然地适应时空模式。模型训练的成本降低了一个数量级,因为我们为每个数据集而不是每个信号训练了一个模型。SPATIAL 自然地适应缺失的数据,并且可以利用传感器之间缺失数据的随机分布来减少数据差距对学习的影响(即,由于通常传感器在不同时间表现出数据差距,因此将来自多个传感器的信息组合在一个框架中可以改善对嘈杂和容易出错的数据的学习)。最后,将时间序列应用的LSTM型方法的循环结构扩展到时空方向,有可能转化为许多不同的工业应用,如天气、交通和流行病学。除此之外,在代码方面,我目前还在恶补基础知识。

文献阅读:跨多个时空尺度进行预测的时空 LSTM 模型

--Fearghal O'Donncha, Yihao Hu, Paulito Palmes, Meredith Burke, Ramon Filgueira, Jon Grant,
A spatio-temporal LSTM model to forecast across multiple temporal and spatial scales,
Ecological Informatics,
Volume 69,
2022,
101687,
ISSN 1574-9541,
https://doi.org/10.1016/j.ecoinf.2022.101687.

背景

准确预测海洋过程需要了解空间和时间的依赖性。这些关系在经典的纳维-斯托克斯方程中表示,该方程是大多数现代海洋预报系统的基础(Chorin,1968)。另一方面,机器学习(ML)在清晰的空间(例如图像处理)时间(例如语音识别)依赖性问题上取得了巨大的成功。然而,对于时空应用,科学还不发达。

传统上,海洋过程的预测依赖于基于物理学的方法,这些方法可以解决一组控制方程。基于物理的方法的主要挑战是在广泛的空间和时间尺度上以高分辨率部署的巨大计算费用(通常需要高性能计算设施),以及通常需要专家用户的配置和参数化模型的复杂性。

用于预测海洋过程的机器学习 (ML) 方法还处于起步阶段,传统上受到数据稀疏性挑战的限制。为了规避这一限制,近年来人们对使用 ML 开发基于物理学的模型的低成本近似或替代物产生了兴趣,但由于模型本身用于训练深度学习网络,因此准确性和空间范围仅限于传统方法规定的水平。

总之,用于海洋过程的机器学习应用主要集中在处理来自数值模型输出的网格数据,或通过遥感采样的大量地表水数据。这些数据集适用于图像处理算法,这些算法广泛用于面部识别和计算机视觉等各个领域的机器学习。在原位传感器数据上训练的应用倾向于将每个时间序列信号独立地视为单变量或多变量回归问题。自然,这丢失了对全面评估自然系统至关重要的空间依赖性信息。

本文思路

本文提出了一个框架,该框架通过显式学习不同但相关的时间序列信号的空间和时间组件来扩展模型精度。我们的方法源自长短期记忆(LSTM)算法,该算法是时间序列中使用最广泛的深度神经网络框架(Hochreiter和Schmidhuber,1997)。LSTM 的优势在于它能够调整到适当的内存规模,这应该被视为时间序列信号的一部分。以前的应用研究很少考虑时间和空间的依赖性。我们将我们的框架称为空间-LSTM或SPATIAL。

通过SPATIAL,我们将这些功能扩展到不同传感器之间的连接。该算法应用于三个真实世界的数据集:洋流速度、温度和溶解氧。每个数据集都呈现出完全不同的特征。洋流模式受到外部物理驱动因素的影响,例如潮汐效应和表面风应力以及温度和盐度变化产生的密度驱动流。温度的变化可以通过多种外生过程来解释,例如太阳辐射,空气温度,海床传热以及来自河流和开阔海洋的外部热通量 (Pidgeon和Winant,2005)。另一方面,海洋氧含量是受流体动力学(水平和垂直混合,停留时间等),天气(温度降低氧气溶解度),营养负荷(人为富集)和呼吸影响的生物地球化学过程(Caballero-Alfonso等人,2015)。非线性响应和对多个不透明变量的敏感性相结合,使这些成为传统物理建模方法具有挑战性的预测问题。相反,我们的方法旨在学习数据的空间和时间模式,以提供更灵活的预测框架。

本文解决的问题

本文解决了与机器学习的环境应用相关的两个基本挑战:

1)数据稀疏性,特别是在具有挑战性的海洋环境中。

2)环境数据集在空间和时间方向上固有地相互联系,而经典的ML方法一次只考虑其中一个。

方法论

SPATIAL 是在时间序列信号的空间和时间方向上使用双向 LSTM 模型的首次尝试。更具体地说,基于地理上的接近性或领域专业知识,已知我们希望预测的信号(洋流、温度和溶解氧)对相邻信号有一定的依赖性。我们在相关传感器的空间方向上实现双向LSTM模型,并训练模型以学习空间和时间结构。

SPATIAL

循环网络支持的参数共享的扩展是双向LSTM,它以向后和向前的方向处理序列数据(Schuster和Paliwal,1997)。实际上,它在输入数据上训练两个 LSTM。第一个 LSTM 在原始输入数据上,另一个在输入数据的反向副本上(Imrana 等人,2021 年)。这自然适用于顺序或时间序列数据,并且在语言处理(Wang等人,2016)和语音识别(Graves等人,2013b)等领域证明了与单向LSTM相比的性能有所提高。直观地,双向 LSTM 使用前向隐藏层和后向隐藏层在两个方向上处理输入数据。虽然双向LSTM以前已应用于时间序列预测,但本文是第一篇应用于空间和时间维度的论文。

图1(b)提供了我们的空间实现的示意图。单向 LSTM 应用于每个传感器的时间方向,并且在各个传感器之间,一系列堆叠的双向层支持不同时间序列之间的学习。堆叠层数是在训练期间选择的超参数。网络的输入数据由一个 m × n 个 × l 数组组成(其中 m 是传感器的数量,n 是时间点的数量,l 是用于进行预测的滞后数量),标签由相应的 m × n × k 数组组成,其中 k 是预测窗口。在这项研究中,k 等于 1,因为我们使用了滚动预测实现来进行预测。也就是说,模型对指定的时间步长进行预测,然后从测试集中获取下一个小时的实际值,并将其提供给模型以预测下一个时间步长。

图 2 总结了我们的空间模型的架构。单个传感器时间序列向量组合成大小为 m × n × l 的矩阵,其中 l 表示模型用于进行预测的滞后数。 这可以被视为在模型训练期间要优化的模型超参数。数据被传递到一系列堆叠的双向 LSTM 层,并在模型设计和训练期间优化确切的数量。对于我们的实验,我们探索了 1 到 10 个 LSTM 层,同时采用了整流线性单元 (ReLU) 激活函数(Nair 和 Hinton,2010)。

可选的掩模层允许用户指定在模型训练期间屏蔽或删除某些数据点,以消除异常值。但是,在 LSTM 实现中应明智地使用此功能,因为不同点的屏蔽会影响数据的时间连续性并阻碍模型学习。出于这个原因,我们没有在模型中应用掩码,而是使用了第 3.4 节中描述的数据插值例程。

我们使用 Keras 库双向层包装器在 python 中实现了该算法。Keras允许我们使用他们的高级API有效地将常规或单向LSTM“转换”为双向LSTM(Gulli和Pal,2017)。SPATIAL 的完整源代码已在 https://github.com/IBM/spatial-lstm 的 Apache 许可下公开发布,以确保框架的可复制性。

图 1.(a)用于预测单个时间序列信号的经典LSTM架构示意图,而(b)介绍了我们的空间实现,其中空间(传感器到传感器)和时间模式由网络显式学习。在此表示中,m 是传感器的数量,n 是训练时间段,k 是我们希望预测的时间段。

图 2.SPATIAL 摄取多维输入,使深度神经网络能够从不同的传感器中提取特征,并利用学到的信息来预测每个传感器的时间序列。换句话说,对于每个传感器,预测不仅基于其先前的时间序列,还基于来自其他传感器的信息。输入数据由包含 n 时间步长的 m 个传感器数据集组成。要生成预测,将前面 l 个时间步长的值传递给模型,以生成相应的时间 k 预测

自动机器学习模型

Gartner——受人尊敬的企业研究和咨询公司——将ML模型部署的自动化确定为2020年的十大关键技术趋势之一(Cearley等人,2019)。这些方法被称为 AutoML 或 AutoAI,旨在帮助自动化创建、部署、管理和操作 AI 模型的生命周期中涉及的步骤和流程(Dickson,2020 年)。Gartner强调了其“民主化AI”的能力,它支持开发低代码ML模型,这些模型不需要高水平的数据科学经验来设置和参数化模型。(Cearley 等人,2019 年)。存在各种AutoML或AutoAI产品,其中最突出的是IBM的AutoAI,Google的autoML和H20.ai的H2O。

AutoAI方法的基本思想可以被认为是“AI的AI”。使用机器学习,它旨在查询用户数据并发现机器学习回归和分类的最佳结构、数据转换和可调参数(或超参数)。AutoAI方法对于基准研究特别有价值,因为它们可以很容易地被其他人复制,并且不需要高水平的数据科学专业知识。许多工具,如IBM AutoAI提供免费计划,特别适合科学和学术研究。

为了评估 SPATIAL 相对于现有方法的相对性能,我们纳入了 AutoML(Drori 等人,2018 年)方法生成的两个最佳基线模型:

  • IBM AutoAI(IBM,2020):一种旨在自动化端到端 AI 生命周期的技术,从数据清理到算法选择,再到 ML 工作流程中的模型部署和监控(Wang 等人,2020 年)。
  • AutoMLPipeline (AMLP) (Palmes, 2020):一个开源工具箱,提供半自动化的 ML 模型生成和预测功能。

上述 AutoML 技术生成的模型用于对 SPATIAL 框架的预测技能进行基准测试,提供对环境数据集数据特征的额外见解,并评估不同模型框架的部署难易程度。虽然 AutoML 框架提供了大量算法作为选项,但我们将所有算法限制为所有传感器的单一算法,以提供更标准化的比较,并简化解释。

基于平均性能,AutoAI和AMLP的选择模型分别为XGBoost和Random Forest。随机森林 (RF) 在以大量解释变量和非线性动力学为特征的复杂预测问题中表现出色。RF是一种基于大量决策树聚合的分类和回归方法。决策树是一种概念简单但功能强大的预测工具,它将数据集分解为越来越小的子集,同时逐步开发相关的决策树。由此产生的从解释变量到结果的直观路径有助于提供易于解释的模型。

虽然 XGBoost 与 RF 有许多共同的特征和优势(即可解释性、预测性能和简单性),但促进性能提升的一个关键区别是决策树是按顺序构建的,而不是独立构建的。XGBoost算法于2016年在华盛顿大学开发,自推出以来,一直被认为赢得了众多Kaggle比赛,并被用于多个行业应用。XGBoost 提供了算法改进,例如用于稀疏数据的稀疏感知算法和用于近似树学习的加权分位数草图,以及针对分布式计算的优化,以构建一个可扩展的树提升系统,可以处理数十亿个示例(Chen and Guestrin,2016)。

数据处理

本文中使用的数据预处理和插值方法示意图。

模型性能

图 4 提供了一个时间序列图,将五个模型与观测值进行比较(我们从每个数据集中选择一个传感器来说明)。所有模型都密切捕捉数据的短期波动和季节性模式。ADCP数据也是如此,尽管波动性相对较高。一般来说,深度学习模型优于机器学习模型,这可能是由于深度学习方法适应数据集非线性的能力增强所致。

 图 4.空间性能(绿线)与两个基准 ML 和两个 DL 模型的比较。

基准模型由 AutoAI 配置和部署的 XGBoost 模型(粉红线)和使用 AMLP 管道生成的随机森林模型(橙色线)组成。DL模型由单变量LSTM(紫色)和CNN模型(蓝色)组成。黑色圆圈表示观测值。图为温度(顶部)、溶解氧(中)和当前速度(底部) 每个模型预测 24 小时内的 24 小时预测,步幅为 30 分钟(每 30 分钟生成一次新预测)

性能比较表明,现有算法在这些数据集上提供了强大的预测技能。我们的SPATIAL 模型广泛复制或改进了这种性能,该模型报告了所有三个数据集中最低的误差(表 3),略胜于 CNN 和 LSTM 模型。也就是说,通过采用更直接的数据预处理以及模型生成和实现管道(通过对传感器数据进行分组来支持更少的模型),我们获得了与现有最先进的性能相当的性能。与现有算法相比,我们的空间模型具有许多实际优势,特别是:

  • 1.

    数据预处理管道得到简化,因为 SPATIAL 管道将所有数据加载到馈送到网络的单个数组中(模型不依赖于外生变量或特征转换)。

  • 2.

    通过从地理上接近或共享某些特征的多个传感器提供数据,网络可以捕获自然界中存在的某些物理关系,并可能用于规范模型。

  • 3.

    同时处理所有传感器可以大大提高计算效率 - 只训练一个模型,而不是每个信号的模型。

  • 4.

    最后,随着数据集数量的增加(传感器数量和研究期的持续时间),深度学习模型有望实现更高的性能。与单个CNN或LSTM模型相比,允许单个模型从多个传感器学习的SPATIAL 方法有望放大性能提升。

上述第1点和第2点密切相关。在预测中,我们希望使用最简单的模型,它最能反映我们对系统的了解。所提出的 SPATIAL 框架通过以下方式简化了环境建模的模型训练和部署过程:

  • 只需要训练和维护一个模型;
  • 无需对输入数据进行转换或矩阵操作;
  • 自然地为所需的预测周期生成时间序列,而不是为每个直接模型生成单个值(尽管经典方法可以采用迭代方法通过多步骤预测生成时间序列预测,但预测技能通常是有限的(Hamzaçebi等人,2009))。

代码

用Python编写的LSTM多变量预测模型

import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import Dense, LSTM# 读取数据集
data = pd.read_csv('dataset.csv')# 将数据集转换为numpy数组格式
data = np.array(data)# 划分训练集和测试集
train_size = int(len(data) * 0.8)
train_data = data[:train_size]
test_data = data[train_size:]# 归一化处理
max_value = np.max(data)
min_value = np.min(data)
scalar = max_value - min_value
train_data = list(map(lambda x: x / scalar, train_data))
test_data = list(map(lambda x: x / scalar, test_data))# 定义生成多变量序列数据的函数
def generate_multivariate_sequences(dataset, num_steps):X, y = [], []for i in range(len(dataset)-num_steps):X.append(dataset[i:i+num_steps, :-1])y.append(dataset[i+num_steps, -1])return np.array(X),np.array(y)# 设置超参数
num_steps = 7
input_dim = 5
hidden_dim = 10
output_dim = 1
epochs = 100
batch_size = 32# 生成训练集和测试集的序列数据
X_train, y_train = generate_multivariate_sequences(train_data, num_steps)
X_test, y_test = generate_multivariate_sequences(test_data, num_steps)# 定义LSTM模型
model = Sequential()
model.add(LSTM(hidden_dim, input_shape=(num_steps, input_dim)))
model.add(Dense(output_dim))# 编译模型
model.compile(loss='mse', optimizer='adam')# 训练模型
model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, validation_data=(X_test, y_test))# 对测试集进行预测
y_pred = model.predict(X_test)# 反归一化处理
y_pred = y_pred * scalar + min_value
y_test = y_test * scalar + min_value# 计算均方根误差
rmse = np.sqrt(np.mean(np.square(y_pred - y_test)))
print('RMSE:', rmse)

注释:

  • 第1到4行:导入所需的库。
  • 第6到10行:读取数据集并进行预处理,将数据集转换为numpy数组格式,划分训练集和测试集,进行归一化处理。
  • 第13到23行:定义生成多变量序列数据的函数,输入参数包括数据集和步长,输出参数包括输入序列X和输出序列y。
  • 第26到33行:设置超参数,包括步长、输入维度、隐藏层维度、输出维度、迭代次数和批大小。
  • 第36到39行:生成训练集和测试集的序列数据,使用刚才定义的generate_multivariate_sequences函数。
  • 第42到46行:定义LSTM模型,包括一个LSTM层和一个全连接层。
  • 第49行:编译模型,使用均方误差作为损失函数,使用Adam优化器。
  • 第52行:训练模型,使用训练集进行训练,同时使用测试集进行验证。
  • 第55到57行:对测试集进行预测,并进行反归一化处理,得到原始数据的预测值和真实值。
  • 第60行:计算均方根误差(RMSE),衡量模型的预测精度。

总结

我觉得本周的文献阅读选材非常好,感觉上和我的论文方向非常贴合,有空的话可以多学习学习。

现在的主要方向还是在于对代码的理解和使用,这是我目前欠缺的能力,我应该花更多的时间在这里。

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

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

相关文章

Element分页组件自定义样式

样式效果 页面代码 <el-paginationsize-change"handleSizeChange"current-change"handleCurrentChange":current-page"page.page":page-sizes"[10, 20, 30, 40]":page-size"page.size"layout"total, sizes, prev, …

如何用https协议支持小程序

步骤一&#xff1a;下载SSL证书 登录数字证书管理服务控制台。在左侧导航栏&#xff0c;单击SSL 证书。在SSL证书页面&#xff0c;定位到目标证书&#xff0c;在操作列&#xff0c;单击下载。 在服务器类型为Nginx的操作列&#xff0c;单击下载。 解压缩已下载的SSL证书压缩…

使用 jmeter 进行审批类接口并发测试

目录 前言&#xff1a; 背景&#xff1a; 难点&#xff1a; 场景 a&#xff1a; 场景 b&#xff1a; 前言&#xff1a; 使用JMeter进行审批类接口的并发测试是一种有效的方法&#xff0c;可以模拟多个用户同时对接口进行审批操作&#xff0c;以评估系统在高负载情况下的性…

Java+Vue+Uniapp全端WMS仓库管理系统

详情图片为运行截图,功能列表: 1、数据管理:物料数据管理、物料Bom管理、物料组管理、物料分类管理、供应商管理、仓库管理、货位管理、车间管理 2、采购管理:物料标签管理、入库单管理、入库退货管理 3、质检管理:质检单管理(包括单据号、单据类型、创建时间、检验状态…

4. CSS用户界面样式

4.1什么是界面样式 所谓的界面样式,就是更改一些用户操作样式,以便提高更好的用户体验。 ●更改用户的鼠标样式 ●表单轮廓 ●防止表单域拖拽 4.2鼠标样式cursor li {cursor: pointer; }设置或检索在对象上移动的鼠标指针采用何种系统预定义的光标形状。 4.3轮廓线outline…

排序算法第三辑——交换排序

目录 ​编辑 一&#xff0c;交换排序算法的简介 二&#xff0c;冒泡排序 冒泡排序代码&#xff1a;排升序 三&#xff0c;快速排序 1.霍尔大佬写的快速排序 2.挖坑法 3.前后指针法 四&#xff0c;以上代码的缺陷与改正方法 三数取中 三路划分&#xff1a; 五&#…

【电子学会】2023年05月图形化四级 -- 计算圆的面积和周长

计算圆的面积和周长 编写程序计算圆的面积和周长。输入圆的半径&#xff0c;程序计算出圆的面积和周长&#xff0c;圆的面积等于3.14*半径*半径&#xff1b;圆的周长等于2*3.14*半径。 1. 准备工作 &#xff08;1&#xff09;保留舞台中的小猫角色和白色背景&#xff1b; 2…

Python 列表 sort()函数使用详解

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 sort函数使用详解 1、升序降序2、sort()和sorted()的区别3、切片排序4、指定排序…

TypeScript笔记

文章目录 什么是TS前期准备安装TSTS配置文件 基础类型原始类型 object类型 数组类型 元组类型 枚举 函数类型可选参数和默认参数剩余参数 any任意类型 高级类型交叉类型联合类型 接口类泛型类型别名参考 什么是TS 官网介绍&#xff1a;TypeScript是JavaScript类型的超集&#…

飞书ChatGPT机器人 – 打造智能问答助手实现无障碍交流

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话&#xff0c;在下面操作步骤中…

Flask结合gunicorn和nginx反向代理的生产环境部署及踩坑记录

个人博客&#xff1a;https://xzajyjs.cn 前言 之前自己写的flask使用gunicorn上线生产环境没有什么问题&#xff0c;但是最近搭建了一个现成的flask项目&#xff0c;当使用python直接运行时不会有问题&#xff0c;而使用gunicorn时则会出现一些问题。 部署过程 运行测试 这…

听GPT 讲K8s源代码--pkg(一)

在 Kubernetes 代码仓库中&#xff0c;pkg/api和pkg/apis目录都包含用于定义 Kubernetes API 对象的代码&#xff0c;但它们的作用略有不同。 pkg/api目录包含 Kubernetes 的旧版本 API 对象定义&#xff0c;这些定义在 Kubernetes 1.7 版本之前使用。这些对象定义已经过时&…

k8s 持久化存储

我们继续来查看 k8s 的卷&#xff0c;上一次我们分享了将磁盘挂载到容器中&#xff0c;empyDir 和 gitRepo 都是会随着 pod 的启动而创建&#xff0c;随着 pod 的删除而销毁 那么我们或许会有这样的需求&#xff0c;期望在 pod 上面读取节点的文件或者使用节点的文件系统来访问…

Spring Boot 中的 Redis 的数据操作配置和使用

Spring Boot 中的 Redis 的数据操作配置和使用 Redis 是一种高性能的 NoSQL 数据库&#xff0c;它支持多种数据结构&#xff0c;包括字符串、哈希、列表、集合和有序集合。Redis 还提供了丰富的命令&#xff0c;可以对数据进行快速的 CRUD 操作。Spring Boot 是一个基于 Sprin…

基于单片机智能加湿器 水位防干烧加湿器的设计与实现

功能介绍 以51/STM32单片机作为主控系统&#xff1b;LCD1602液晶显示当前温湿度&#xff0c;当前模式&#xff0c;湿度下限;按键设置湿度下限&#xff0c;当湿度低于下限时开启加湿器;水位传感器检查加湿器是否有水&#xff0c;如果没有水到话加湿器不进行工作&#xff0c;蜂鸣…

怎么用PDF24 Tools工具在线进行PDF文件合并

PDF文件是经常会被用到&#xff0c;它在我们的日常生活和工作中扮演着重要的角色。PDF文件合并是将多个PDF文件合并为单个文件&#xff0c;这个过程通常是为了方便管理多个PDF文件&#xff0c;或者将多个PDF文件合并为一个整体以便于共享或打印。既然如此&#xff0c;如何快速合…

kotlin forEach循环return/break

kotlin forEach循环return/break fun main(args: Array<String>) {var a mutableListOf("0", "1", "2", "3", "4")var b mutableListOf<String>()a.forEachIndexed { index, s ->if (index > 2) {retu…

【Mac使用笔记】之 Homebrew

Homebrew更新&#xff1a; brew update && brew upgrade 当出现错误&#xff1a; fatal: couldnt find remote ref refs/heads/master 执行&#xff1a; brew tap --repair Ruby安装&#xff1a; 1、查看当前Homebrew版本&#xff1a; brew --version2、查看当前…

libbpf-bootstrap 开发指南:概念与如何安装

目录 概念 如何安装& 使用 git 地址 使用git clone 下载代码 安装依赖环境 安装libbpf 编译example 概念 libbpf-bootstrap 是一个项目&#xff0c;旨在帮助开发者快速启动和开发使用 eBPF (Extended Berkeley Packet Filter) 和 libbpf 的程序。eBPF 是一种可以在…

TTX1994-可调谐激光器控制系统

花了两周时间&#xff0c;利用下班时间&#xff0c;设计了一个ITLA可调谐激光器控制系统&#xff0c;从硬件到软件。下面这个图片整套硬件系统&#xff0c;软件硬件都自己设计&#xff0c;可以定制&#xff0c;做到单片机问题也不大。相当于一套光源了 这是软件使用的界面&…