2023.5.21 第五十四次周报

目录

前言

文献阅读:跨多个时空尺度进行预测的时空 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 框架通过以下方式简化了环境建模的模型训练和部署过程:

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

代码

用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),衡量模型的预测精度。

总结

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB绘制动画(五)GIF

GIF这个文件大家就比较熟悉了,我们通常当做表情包的动图一般都是用GIF格式。 这是因为GIF格式的文件比较小,传输速度快。 用MATLAB生成GIF图像同样需要将图像保存下来,通过循环展示动画 代码如下: clc; clear; close all; set…

AMBER分子动力学模拟之结果分析(MMGB/PBSA)-- HIV蛋白酶-抑制剂复合物(4)

AMBER分子动力学模拟之结果分析(MMGB/PBSA)-- HIV蛋白酶-抑制剂复合物(4) 结合自由能计算 我们首先计算焙变,用到的是pbsa和gbsa方法。我们需要一下文件 三个top文件,pro.prmtop lig.prmtop com.prmtop;输入文件MM_GBSA.in;将要…

从桌面端到移动端,.NET MAUI为什么对WPF开发人员更简单?

.NET多平台应用程序UI(. NET MAUI)的市场吸引力与日俱增,这是微软最新的开发平台,允许开发者使用单个代码库创建跨平台应用程序。尽管很多WPF开发人员还没有跟上 .NET MAUI的潮流,但我们将在这篇文章中为大家展示他的潜…

【FAQ】视频编辑服务常见问题及解答

Q1问题描述 1、 访问贴纸等素材的时候提示“网络异常,请重试”怎么办? 2、 使用AI能力时,提示“errorCode:20124 errorMsg:Method not Allowed”? 解决方案 请做以下检查: 1、 在代码中检查鉴权信息是否已设置。如…

2023/5/21周报

目录 摘要 论文阅读 1、标题和现存问题 2、各个结构 3、基于GNN-LSTM-CNN 网络轨迹预测模型 4、实验准备 5、实验结果 深度学习 1、费舍尔判别 2、步骤具体化 3、GCN 总结 摘要 本周在论文阅读上,阅读了一篇基于GNN-LSTM-CNN网络的6G车辆轨迹预测算法的…

RabbitMQ如何保证顺序性

1. RabbitMQ消息顺序性说明 顺序性: 消息的顺序性是指消费者消费到消息和发送者发布的消息的顺序是一致的 举个例子,不考虑消息重复的情况下,如果生产者发布的消息分别为msg1、msg2、msg3 那么消费者必然也是按照 msg1、msg2、msg3 的顺序来…

【leetcode刷题总结】——代码随想录(链表总结)

代码随想录按照数组-> 链表-> 哈希表->字符串->栈与队列->树->回溯->贪心->动态规划->图论->高级数据结构,再从简单刷起,做了几个类型题目之后,再慢慢做中等题目、困难题目。 以下是个人刷题总结,官…

Python初学小知识(十四):数据分析处理库Pandas

Python初学小知识(十四):数据分析处理库Pandas 十八 Pandas1 文件读取1.1 读取csv1.2 读取txt1.3 读取excel(xlsx) 2 内容读取2.1 读取行2.2 读取列 3 数据处理3.1 加减乘除3.1.1 列 与 元素3.1.2 列 与 列 3.2 最值、…

张驰咨询:突破瓶颈降低成本-精益生产咨询的实践策略

在现代企业运营中,提高效率、优化流程是实现成功的关键因素之一。为了帮助企业在这方面取得突破性的进展,精益生产咨询成为了一种备受推崇的方法。本文将介绍精益生产咨询的基本原理、优势以及如何将其应用于企业实践中。 精益生产咨询是一种源于丰田生…

lwIP更新记02:网络接口标志(一个标志只做一件事)

从 lwIP-2.0.0 开始,网络接口 netif 的 up 标志修改为管理标志,up标志不再具有以前的 IP4 地址有效 含义。 什么是网络接口 netif ? 网络接口 属于链路层范畴,它旨在对具体网络硬件、软件进行统一封装,并为协议栈上层&…

【运维知识进阶篇】集群架构-Nginx反向代理详解

在互联网请求中,客户端通常无法直接向服务端发起请求,就需要用代理服务,来实现客户端和的交互,起到一个中介的作用。 Nginx代理服务常见模式 Nginx代理按照应用场景模式可以分为正向代理和反向代理。 正向代理是内部上网过程中&a…

实现取关和关注功能

将关注过的用户id存如数据库中 //关注或者取关 Override public Result follow(Long id, Boolean flag) { //1.获取当前登录用户的id UserDTO user UserHolder.getUser(); if(usernull){ return Result.fail("请先登录"); } Long userId user.getId(); //2.判断是关…

关于ubuntu20.04 apt 安装源中搜索不到最新版本gcc 12的问题

一、问题描述 最近在搞Open 3d 点云point cloud 相关的东西,过程需要安装较高版本的cmake 3.20版本以上,3.20版本又需要gcc 更高版本 至少11.0以上,理论上本机配置的有 ubuntu 官方的源和阿里云的源,不过 通过搜索就只能搜索安装的…

微信小程序xr-frame实现交互(地月案例)

基础知识: 1.轮廓 如果想要与场景中的物体进行互动,比如说点击、拖拽物体,那么这个物体得先拥有一个轮廓才行。轮廓是一个组件。与某个物体互动,实际上是在与这个物体的轮廓进行互动,轮廓让这个物体在物理世界中拥有…

WordPress 如何开启多站点 含Apache和Nginx伪静态规则

WordPress 3.0以上的版本支持直接开启多站点模式,这样一来,你可以在一个后台切换多个站点进行管理。 最近打算折腾一个主题演示站,给每个主题使用独立的子站点来搭建演示,如果是Apache环境,配置就比较容易,但是倡萌使用的是 Nginx,花了大量的时间测试了N多网络上的伪静…

Weblogic SSRF 漏洞(CVE-2014-4210)

SSRF漏洞 ​ SSRF(服务端请求伪造),指的是攻击者在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。SSRF攻击通常针对外部网络无法直接访问的内部系统。 ​ 简单的说就是利用一个可…

Jenkins的持续集成与持续部署

系统总体架构 Gitlab Gitlab是一款主要用于代码管理的工具,相较于GitHub,可以自己搭建服务器,这可以避免因为网络速度慢导致部署效率低下,同时,自己搭建服务器,安全性更高。Jenkins Jenkins主要用于管理版本…

国内免费版ChatGPT

目录 前言:网站大全 1. ChatGPT是什么 2. ChatGPT的发展历程 3. ChatGPT对程序员的影响 4. ChatGPT对普通人的影响 5. ChatGPT的不足之处 前言:网站大全 AI文本工具站 (laicj.cn) ——gpt-3.5 功能强大(推荐) Chatgpt在线网页版-…

Compose For Desktop 实践:使用 Compose-jb 做一个时间水印助手

前言 在我之前的文章 在安卓中实现读取Exif获取照片拍摄日期后以水印文字形式添加到照片上 中,我们已经实现了在安卓端读取 Exif 信息后添加文字水印到图片上。 也正如我在这篇文章中所说的,其实这个需求使用手机来实现是非常不合理的,一般…

jenkins入门与安装

一、实验环境 selinux iptables off 主机名IP系统版本gitlab10.10.10.200rhel7.5jenkins10.10.10.10rhel7.5tomcat10.10.10.11rhel7.5 二、安装jenkins 1、解压安装包 下载地址:https://download.docker.com/linux/static/stable/x86_64/ [rootjenkins ~]# tar xf …