第三十四周:文献阅读+LSTM学习

目录

摘要

Abstract

文献阅读:综合EMD-LSTM模型在城市排水管网水质预测中的应用

现有问题

提出方法

EMD-LSTM综合模型

研究框架

结论

Long Short-term Memory(长短期记忆)

1. LSTM的结构

2. Multiple-layer LSTM

3.3 LSTM Example

3. GRU

LSTM实现PM2.5预测

总结


摘要

在本周阅读的文献中,提出了以EMD为中心的数据预处理模块和LSTM预测模块相结合的城市排水管网水质HCI综合预测模型。在EMD-LSTM模型中,EMD允许保留异常值并利用非对齐时刻的数据,这有助于捕获数据模式,而LSTM神经网络强大的非线性映射和学习能力可以对水质进行时间序列预测,综合预测模型实现对城市排水网络水质的准确预测。LSTM是一种特殊的RNN,比普通的RNN多了三个“门”,可以让信息有选择性的通过。LSTM能够在更长的序列中有更好的表现,解决了RNN训练时的梯度无效问题。

Abstract

The literature read this week proposes a comprehensive prediction model for urban drainage network water quality HCI, which combines an EMD centered data preprocessing module and an LSTM prediction module. In the EMD-LSTM model, EMD allows for retaining outliers and utilizing data from non aligned moments, which helps capture data patterns. The powerful nonlinear mapping and learning capabilities of LSTM neural networks enable time series prediction of water quality, and the comprehensive prediction model achieves accurate prediction of water quality in urban drainage networks. LSTM is a special type of RNN that has three more gates than regular RNN, allowing information to selectively pass through. LSTM can perform better in longer sequences, solving the problem of ineffective gradients during RNN training.

文献阅读:综合EMD-LSTM模型在城市排水管网水质预测中的应用

链接:Accurate prediction of water quality in urban drainage network with integrated EMD-LSTM model

现有问题

快速准确地掌握排水管网中的水质,对于城市水环境的管理和预警至关重要。而基于建模的检测方法能够基于廉价的多源数据进行快速且无需试剂的水质检测,这比传统的基于化学反应的检测方法更清洁、更可持续。这些方法只需要很少的参数,并且可以进行更清洁和可持续的水质检测。但其准确性不尽如人意,因此这也限制了在实际上的应用。这一问题可归因于其处理非线性、非平稳水质时间序列的能力较差。

提出方法

在深度学习算法中,LSTM神经网络又因其独特的门结构而特别擅长处理时间序列,使其能够捕获时间序列中的长期依赖关系。使用LSTM神经网络作为建模算法是提高基于建模的水质检测精度的有效途径。该文提出一种融合EMD-LSTM模型,该模型将以经验模态分解(EMD)为中心的数据预处理模块与长短期记忆(LSTM)神经网络预测模块相结合,以提高基于建模的检测方法的精度。由于时间序列相邻值之间的密切关系,非对齐数据是优化对齐时刻数据(即对齐数据)的良好基础。设计一个预处理程序,有效地利用准确的异常值和非对齐数据是必要的。时频变换技术可以将时间序列转换成不同频率的分量。过滤掉代表噪声或对原始数据贡献不大的成分可以减少噪声。这意味着时频变换算法允许保留异常值并通过非对齐数据优化对齐数据。值得一提的是,一些时频变换技术,如短时傅立叶变换(STFT)和小波变换(WT),不适合分析非平稳时间序列。原因是它们的基函数在变换过程中不能改变,而经验模态分解(EMD)有效地克服了这一困难。

EMD-LSTM综合模型

通过多源混频数据集作为测试数据,根据获取数据所需的时间和经济成本,将15个指标分为两部分,LCIs(L1,L2,…,L10)作为模型输入,HCIs(H1,H2,…,H5)作为模型输出。对所有指标进行基本预处理,包括清洗、填充和归一化。但这仅清理了由于仪器故障导致的连续缺失值和异常值。用插值法填充单个缺失值。Min-max归一化方法将所有指标归一化,消除数值差异,如式(1)所示,对每个LCI进行EMD。对于在此分解中获得的分量,代表噪声或具有低贡献的部分被去除。将剩余成分相加,形成优化后的LCIs(L1',L2',…,L10')。在预处理程序结束时,高频指标根据低频指标的频率进行对齐。在移除高频指标之前,将频率对准放置在EMD之后,以确保高频指标中频率不匹配的部分有助于EMD。

(1)

x_{t}表示时间序列中时间t所对应的值,x_{t}{}'表示x_{t}归一化后的值,x_{max}表示时间序列中的最大值,x_{min}表示时间序列中的最小值。

将优化后频率一致的LCI作为“多对一”结构LSTM神经网络的输入。在检验EMD-LSTM模型的性能时,构建了5个结构相同的EMD-LSTM模型,分别预测5个HCI

EMD原理

EMD自适应地将非线性非平稳时间序列分解为几个固有模态函数(IMF)和一个趋势项(即分量)。IMF的数量取决于时间序列本身。该方法的优点是基于时间序列本身的尺度特征实现分解,不需要设置任何基函数。IMF和趋势项是在一个连续的迭代过程中产生的。具体流程可归纳为如下六个步骤:

  1. 找到时间序列x(t)中所有的局部最大值和局部最小值。
  2. 基于三次样条插值理论(cubic spline interpolation theory),将所有的局部最大值和最小值分别连接起来,形成上下包络线(u(t)v(t))。
  3. 通过公式m(t)=[u(t)+v(t)]/2产生平均包络线m(t)
  4. 通过公式h(t)=x(t)-m(t)产生差异h(t)
  5. 检查h(t)是否满足IMF条件(a)和(b)。(a)极值点的个数和过零点的个数必须等于或最多相差一个;(b)在任何时刻t,由局部最大值组成的上包络和由局部最小值组成的下包络的平均值均为零。
  6. 如果不满足IMF的条件,h(t)被视为时间序列x(t),并重复步骤1至步骤5,直到h(t)更新到满足两个条件。满足两个条件意味着这个h(t)将是第一个IMF(c_{1}(t)),然后根据公式r_{1}(t)=x(t)-c_{1}(t)产生第一个残差r_{1}(t)来替换掉时间序列x(t),接着重复步骤1至步骤5,迭代生成剩余的n个IMF。

连续迭代,直到r_{n}(t)满足标准差小于0.25,则r_{n}(t)趋势项。如公x(t)=\sum_{i=1}^{n}c_{i}(t)+r_{n}(t)所示,时间序列x(t)最后通过EMD分解为n个IMF和一个趋势项的和。

研究框架

将数据集分为训练集(2019-10-26 ~ 2019-11-20,25 d)和测试集(2019-11-21 ~ 2019-11-26,6 d),分割比例为4:1。结合传统的预处理模块和预测模块构建了其他集成模型,与EMD-LSTM集成模型进行对比。设计了一系列的对照实验来测试所提出的EMD-LSTM的性能并分析其产生的原因,主要分为五个部分:

  1. 比较不同数据预处理程序对预测精度的影响
  2. 比较不同预测算法对预测精度的影响
  3. 分析不同数据预处理程序对数据集的优化效果
  4. 验证保留异常值对预测精度的影响
  5. 验证利用非对齐数据对预测精度的影响

集成模型的性能评价

1、预处理模块比较

构建EMD-LSTM、to - lstm、STFT-LSTM,比较不同预处理模块对预测精度的影响。采用SMAPE、判定R2、RMSE评价EMD-LSTM模型的预测性能。SMAPE该统计度量可以反映预测结果与实测值之间的相对偏差程度。RMSE表示实测值与预测结果的绝对差值,R2可以反映实测值的波动可以被模型预测值解释的程度。结果表明,STFT和EMD在时间序列预处理过程中确实可以提高预测结果的精度。

 2、预测模块比较

测试了EMD预处理模块与传统数据驱动预测模块相结合的效果。在综合EMDLSTM模型中,使用PLSR、GBR、DNN作为预测模块替代LSTM,4种预测模块的性能表现为LSTM > DNN > GBR > PLSR。即RNN架构和门结构带来的记忆能力使LSTM更适合处理时间序列问题

结论

与传统数据预处理程序(即TO、STFT)和数据驱动预测算法(即PLSR、GBR、DNN)形成的集成模型相比,EMD-LSTM集成模型在预测hci方面表现最佳。在数据预处理过程中应用时频变换算法提高了预测精度,EMD算法的预测效果优于STFT算法。保留的异常值有助于保持原始时间序列的完整性,这使得LSTM神经网络能够更好地捕获数据模式(R2高0.87-1.73%)。在高频指标中,非对齐数据正有助于优化对齐数据,提高后续LSTM神经网络的准确率(R2提高0.27 ~ 0.54%)。良好的精度(R2≥0.94)使得集成EMD-LSTM模型适合实际应用中的水质检测。

Long Short-term Memory(长短期记忆)

1. LSTM的结构

LSTM是一种特殊的RNN,比普通的RNN多了三个“门”,可以让信息有选择性的通过。当一条序列很长的时候,RNN很难将从一开始的信息传送到后面的时间点,而LSTM能够学习长期依赖的信息,记住早时间点的信息,更好的联系上下文。

099fcba55e8e4db2b21655eed84ce7db.png

Input Gate:控制input数据输入

Forget Gate:控制是否保存中间结果

Output Gate:控制output数据输出

eq?x%5E%7Bt%7D乘上一个matrix变成向量eq?zeq?x%5E%7Bt%7D再分别乘以一个transform得到eq?z_%7Bi%7Deq?z_%7Bo%7Deq?z_%7Bf%7D,它们的维数跟LSTM的数量一样,eq?z的每一维的数值分别代表每个LSTM的input,eq?z_%7Bi%7Deq?z_%7Bo%7Deq?z_%7Bf%7D的每一维操纵一个LSTM的Input Gate、Output Gate、Forget Gate。

26243fa67ef74991bb52be6b418be65f.png

输入:eq?z

输出门控制信号:eq?z_%7Bo%7D

输入门控制信号:eq?z_%7Bi%7D

遗忘门控制信号:eq?z_%7Bf%7D

激活函数基本都是sigmoid函数,值域在0和1之间,函数值决定所控制门的开关程度,值越大,门打开程度越大。如果eq?z_%7Bf%7D为0,这说明存在memory中的数值不能被读取出来。Input Gate与Output Gate的开与关是由network进行学习后自行决定的,对memory里的哪些值进行forget也是由network自行学习的。

51adc116b817415eb4e770f4e523c39b.png

 将LSTM当做一个特殊的神经元,但是从图中可以看出LSTM比普通的神经元多了三个门,每个门都需要相应的参数,因此LSTM需要的参数量相当于普通神经元的4倍。

05d5ab371484405da3a419708bf126ef.png

其实就是原来简单的neuron换成LSTM。

47362115f8454d098ebdb61a468ac4cb.png

2. Multiple-layer LSTM

真正的 LSTM在输入的时候还会把 hidden layer 的输出eq?h%5E%7Bt-1%7D 接上,还会加上上一个时间点 memory cell 的值 eq?c%5E%7Bt-1%7D ,再在经过不同的 transform 得到四个不同的 z vector 去控制 LSTM,LSTM 也不止一层,可以叠多层。
622aed486e674649a9bd21b4bc587d96.png

3.3 LSTM Example

当​eq?x_%7B2%7D%3D1​的时候,将eq?x_%7B1%7D的的值添加到memory;

eq?x_%7B2%7D%3D-1的时候,将memory中的值移除;

eq?x_%7B3%7D%3D1的时候,输出memory里的值。

58bf495787b244d7b4769e3bab648b69.png

 以第一个序列为例,设置输入门eq?x_%7B2%7D的权重为100,偏差值为1权重为-10,也就是当eq?x_%7B2%7D的值小于0.1即小于0,那么通过sigmoid函数之后输入门的值就接近0,代表门被关闭,否则可以将eq?x_%7B1%7D的值存入memory,同理可知输出门和遗忘门的权重设置,但遗忘门的偏差为10,通常是被打开的,只有当eq?x_%7B2%7D的值为一个很大的负数的时候才会被关闭。序列1输入,memory存的值不变,并且输出门值为0不输出,序列2输入将eq?x_%7B1%7D的值3保存到memory,但输出门为0,memory的值不输出,序列3输入,将将eq?x_%7B1%7D的值4保存到memory,此时memory的值为3+4=7,输出门不为0,输出memory中的值7。

94c4943783a740ca8d681ef8bc4513d6.png

3. GRU

LSTM是RNN的升级版,加了门控装置,解决了长时记忆依赖的问题。但由于参数量复杂,带来了计算量增加,所以引进了简化版的LSTM,即GRU。

GRU在LSTM的基础上减少了一个门,即用更新门代替了遗忘门和输出门,其参数更少,训练相对简单一点。而从效果上说,二者并没有优劣之分,取决于具体的任务和数据集而定。实际上来讲,二者的表现差距往往不大,远远没有调参效果明显。

LSTM实现PM2.5预测

数据集:Beijing PM2.5 Data

import torch
import torch.nn as nn
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler# # 打印出Seaborn库中内置的所有数据集列表
# datasets_name = sns.get_dataset_names()
# print("ALL DATASET:", datasets_name)
#
# # 加载航班数据集
# flight_data = sns.load_dataset("flights")
# flight_data.head()data = pd.read_excel('../DataSet/PRSA_data_2010.1.1-2014.12.31(Updated_data).xlsx')
# print(data, type(data))# 将 PM2.5 列的数据改为浮点型存入 all_data 中
all_data = data['PM2.5'].values.astype(float)# 将列 TIME-HOUR 转换为日期格式
data['TIME-HOUR'] = pd.to_datetime(data['TIME-HOUR'])# data 的列类型是对象
# print(data.head(), data.shape, data.columns)
# data 是一个 numpy 二维数组
# print(data)# 划分33824个训练集和10000测试集
test_data_size = 10000
train_data = all_data[:-test_data_size]
test_data = all_data[-test_data_size:]
# print(len(train_data))
# print(len(test_data))# 归一化,注意 fit_transform 方法的输入必须是一个二维的数组
# 训练集和测试集不要一起归一化,就是说不要先归一化再划分数据集,先将数据集划分后再分别进行归一化
scaler = MinMaxScaler(feature_range=(-1, 1))
train_data_normalized = scaler.fit_transform(train_data.reshape(-1, 1))
test_data_normalized = scaler.fit_transform(test_data.reshape(-1, 1))
# 印出归一化训练数据的前5条和后5条记录
# print(train_data_normalized[:5])
# print(train_data_normalized[-5:])# 将数据集转换为张量
train_data_normalized = torch.FloatTensor(train_data_normalized).view(-1)
test_data_normalized = torch.FloatTensor(test_data_normalized).view(-1)
# print(train_data_normalized)# 将训练数据转换为序列和相应的标签
# 可以使用任何序列长度,取决于领域知识,比如说数据是按月份收集的就将序列长度设为12(一年12个月),如果数据是按天数收集的就将序列长度设为365(一年365天)
# 本数据集是按小时收集的,所以设定序列长度为 30 * 24 (按月来设定窗口)
train_window = 30 * 24# 定义一个名为create_inout_sequences的函数
# 该函数将接受原始输入数据,并返回一个元组列表
# 在每个元组中,第一个元素将包含 30 * 24 个项目的列表,对应于前1个月内每个小时的 PM2.5 的排放量,第二个元素将包含一个项目的列表即第2个月的第一个小时的 PM2.5 的排放量
def create_inout_sequences(input_data, tw):inout_seq = []L = len(input_data)for i in range(L-tw):train_seq = input_data[i:i+tw]train_label = input_data[i+tw:i+tw+1]inout_seq.append((train_seq, train_label))return inout_seq
# 创建训练序列
train_input_seq = create_inout_sequences(train_data_normalized, train_window)
# print(train_inout_seq[:5])class LSTM(nn.Module):# input_size:对应于输入中特征的数量,数据集中只有 PM2.5 这一个特征# hidden_layer_size:指定隐藏层的数量以及每层神经元的数量# output_size:输出中项目的数量,本项目中只预测未来一个小时内的 PM2.5 的量,因此输出大小将为1def __init__(self, input_size=1, hidden_layer_size=100, output_size=1):super().__init__()self.hidden_layer_size = hidden_layer_sizeself.lstm = nn.LSTM(input_size, hidden_layer_size)self.linear = nn.Linear(hidden_layer_size, output_size)# self.hidden_cell:这是 LSTM 层的隐藏状态# LSTM 层是一种循环神经网络(RNN),它在处理序列数据时会维护一个隐藏状态,用于捕获序列中的时间相关性# input_seq:这是输入到 LSTM 层的数据序列# 在这里,input_seq 被视为一个三维张量,其形状为 (sequence_length, batch_size, input_size)# 其中 sequence_length 表示序列的长度,batch_size 表示批次大小,input_size 表示输入特征的数量# view(len(input_seq), 1, -1):这是一个 PyTorch 的操作,用于重新排列输入张量的维度# 具体来说,它将输入张量的维度从 (sequence_length, input_size) 重新排列为 (sequence_length, 1, input_size)# 这是因为 LSTM 层期望输入数据具有这种形状,其中第二个维度通常用于批次大小,这里 1 表示批次大小为 1# lstm_out 的形状为 (sequence_length, batch_size, hidden_size)# 预测出来的 PM2.5 的量存储在 predictions 列表中最后一个项目中,并返回给调用函数def forward(self, input_seq):lstm_out, self.hidden_cell = self.lstm(input_seq.view(len(input_seq), 1, -1), self.hidden_cell)# print(lstm_out.shape)predictions = self.linear(lstm_out.view(len(input_seq), -1))return predictions[-1]# 创建 LSTM() 类对象、定义损失函数和优化器
# 损失函数:交叉熵损失
# 优化器:Adam
model = LSTM()
loss_function = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
# print(model)# 模型训练
epochs = 1for i in range(epochs):for seq, labels in train_input_seq:optimizer.zero_grad()# 初始化LSTM模型的隐藏状态和细胞状态model.hidden_cell = (torch.zeros(1, 1, model.hidden_layer_size),torch.zeros(1, 1, model.hidden_layer_size))y_pred = model(seq)single_loss = loss_function(y_pred, labels)single_loss.backward()optimizer.step()# {i:3} 是一个占位符,它表示要在这个位置插入一个整数 i,并且将其格式化为占据3个字符的宽度# 这意味着无论 i 是多少,都会占据3个字符的位置,不足的部分用空格填充# {single_loss.item():10.8f} 是另一个占位符,它表示要在这个位置插入一个浮点数 single_loss.item(),并将其格式化为占据10个字符的宽度# 其中包括小数点和8位小数,这会以固定的宽度显示损失值print(f'epoch: {i:3} loss: {single_loss.item():10.10f}')# 模型泛化
test_input_seq = create_inout_sequences(test_data_normalized, train_window)
predictions = []
for seq, labels in test_input_seq:with torch.no_grad():model.hidden = (torch.zeros(1, 1, model.hidden_layer_size),torch.zeros(1, 1, model.hidden_layer_size))prediction = model(seq)predictions.append(scaler.inverse_transform(np.array(prediction).reshape(-1, 1)))print(len(predictions), type(predictions))
print(len(test_data[train_window:]), type(test_data[train_window:]))
print("------------------------------------------------------")# 创建x轴的值(可以是范围或自定义值)
x_values = np.arange(len(predictions))# 匹配 prediction 与 test_data[train_window:] 的维度
predictions = np.array(predictions)
print(predictions.shape)
print(test_data[train_window:].shape)
print("------------------------------------------------------")
print(predictions.reshape(-1))
print(test_data[train_window:])# 绘制预测值的图形
plt.plot(x_values, predictions.reshape(-1), label='Forecast values', linestyle='-', color='red', marker='')# 绘制真实值的图形
plt.plot(x_values, test_data[train_window:], label='True Values', linestyle='-', color='blue', marker='')# 添加图例
plt.legend()# 设置图形标题和轴标签
plt.title('True vs. predicted values')
plt.xlabel('Time')
plt.ylabel('PM2.5')# 显示图形
plt.show()

原始数据图像:

测试集预测数据图像:(受限于设备性能,epoch次数很少,导致测试结果很差)

总结

这周学习了RNN以及LSTM,不同于以往CNN等结构,RNN在全连接网络上加上了记忆功能,基础的神经网络只是在层与层之间建立了权值连接,而RNN在层之间的神经元之间也建立了权值连接,它能够处理序列变化的数据。而LSTM又在RNN的基础上加上了记忆定义的概念,在RNN中只会针对比较短的序列进行操作,而比较长的序列一般使用LSTM,LSTM适合处理序列中间间隔和延迟相对较长的问题,解决在长序列训练过程中梯度消失的问题,例如聊天机器人、语音识别等。

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

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

相关文章

Java+SSM+MySQL基于微信的在线协同办公小程序(附源码 调试 文档)

基于微信的在线协同办公小程序 一、引言二、系统设计三、技术架构四、管理员功能设计五、员工功能设计六、系统实现七、界面展示八、源码获取 一、引言 随着科技的飞速发展,移动互联网已经深入到我们生活的各个角落。在这个信息时代,微信作为全球最大的…

靠谱的车- 华为OD统一考试(C卷)

靠谱的车- 华为OD统一考试(C卷) OD统一考试(C卷) 分值: 100分 题解: Java / Python / C 题目描述 程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题&#xf…

【知识】如何区分图论中的点分割和边分割

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 以下两个概念在现有中文博客下非常容易混淆: edge-cut(边切割) vertex-partition(点分割)vertex-cut(点切割) edge-partition(边分割) 实际上,初看中文时,真的会搞不清楚。但…

黑豹程序员-EasyExcel实现导出

需求 将业务数据导出到excel中,老牌的可以选择POI,也有个新的选择EasyExcel。 有个小坑,客户要求样式比较美观,数字列要求千位符,保留2位小数。 可以用代码实现但非常繁琐,用模板就特别方便,模…

Pyhon基于YOLOV实现的车辆品牌及型号检测项目源码+模型+项目文档

项目运行运行录屏: Pyhon基于YOLOV实现的车辆品牌及型号检测项目运行录屏 完整代码下载地址:Pyhon基于YOLOV实现的车辆品牌及型号检测项目 项目背景: 车辆检测及型号识别广泛应用于物业,交通等的管理场景中。通过在停车场出入口…

Docker容器:Centos7搭建Docker镜像私服harbor

目录 1、安装docker 1.1、前置条件 1.2、查看当前操作系统的内核版本 1.3、卸载旧版本(可选) 1.4、安装需要的软件包 1.5、设置yum安装源 1.6、查看docker可用版本 1.7、安装docker 1.8、开启docker服务 1.9、安装阿里云镜像加速器 1.10、设置docker开机自启 2、安…

uni-app 设置tabBar的setTabBarBadge购物车/消息等角标

目录 一、效果二、代码实现二、全部代码1.index.vue2.cart.vue 三、真实案例参考最后 一、效果 二、代码实现 只要使用uni.setTabBarBadge和uni.removeTabBarBadge来进行对红点的设置和移除。 主要代码: //设置红点 uni.setTabBarBadge({index: 1, // 底部菜单栏…

19-数据结构-查找-散列查找

目录 一、散列查找结构思路图 二、哈希函数 三、解决冲突 1.开放地址法 1.1.线性探测法(线性探测再散列法) 1.2.平方探测法(二次探测再散列) 1.3.再散列法(双散列法) 2.拉链法 2.1简介 四、散列查…

Python 自动化之批量处理文件(一)

批量新建目录、文档Pro版本 文章目录 批量新建目录、文档Pro版本前言一、做成什么样子二、基本思路1.引入库2.基本架构 三、用户输入模块四、数据处理模块1.excel表格数据获取2.批量数据的生成 总结 前言 我来写一个不一样的批量新建吧。在工作中,有些同学应该会遇…

mybatis的快速入门以及spring boot整合mybatis(二)

需要用到的SQL脚本: CREATE TABLE dept (id int unsigned PRIMARY KEY AUTO_INCREMENT COMMENT ID, 主键,name varchar(10) NOT NULL UNIQUE COMMENT 部门名称,create_time datetime DEFAULT NULL COMMENT 创建时间,update_time datetime DEFAULT NULL COMMENT 修改…

SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)

文章目录 1. 环境准备1. 查询全部2. 根据 name 查询 match 分词查询3. 根据 name 和 品牌查询 multiMatch 分词查询4. 根据 brand 查询 match 分词查询5. 按照价格 范围查询6. 精确查询7. boolQuery8. 分页9. 高亮查询9. 公共解析 上一节讲述了 SpringBoot 实现 elasticsearch …

想考研到电子类,未来从事芯片设计,目前该怎么准备?

最近看不少天坑学子想考研微电子专业,但却不知道该怎么准备?接下来就带大家一起来具体了解一下~ 首先是目标院校的选择? 目前所设的微电子专业学校里,比较厉害的有北京大学、清华大学、中国科学院大学、复旦大学、上海交通大学、…

【华为鸿蒙系统学习】- HarmonyOS4.0开发工具和环境配置问题总结|自学篇

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 官方链接 HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 安装教程 (…

应用密码学期末复习(3)

目录 第三章 现代密码学应用案例 3.1安全电子邮件方案 3.1.1 PGP产生的背景 3.2 PGP提供了一个安全电子邮件解决方案 3.2.1 PGP加密流程 3.2.2 PGP解密流程 3.2.3 PGP整合了对称加密和公钥加密的方案 3.3 PGP数字签名和Hash函数 3.4 公钥分发与认证——去中心化模型 …

【小沐学Python】Python实现语音识别(Whisper)

文章目录 1、简介1.1 whisper简介1.2 whisper模型 2、安装2.1 whisper2.2 pytorch2.3 ffmpeg 3、测试3.1 命令测试3.2 代码测试:识别声音文件3.3 代码测试:实时录音识别 4、工具4.1 WhisperDesktop4.2 Buzz4.3 Whisper-WebUI 结语 1、简介 https://gith…

C语言—每日选择题—Day45

第一题 1. 以下选项中,对基本类型相同的指针变量不能进行运算的运算符是() A: B:- C: D: 答案及解析 A A:错误,指针不可以相加,因为指针相加可能发生越界&…

如何从eureka-server上进行服务发现,负载均衡远程调用服务

在spring cloud的maven的pom文件中添加eureka-client的依赖坐标 <!--eureka-client依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependen…

(第8天)保姆级 PL/SQL Developer 安装与配置

PL/SQL Developer 安装与配置(第8天) 咱们前面分享了很多 Oracle 数据库的安装,但是还没有正式使用过 Oracle 数据库,怎么连接 Oracle 数据库?今天就来讲讲我学习中比较常用的 Oracle 数据库连接工具:PL/SQL DEVELOPER。 PL/SQL Developer 的安装和配置对于新手来说还是…

命令行参数(C语言)

目录 什么是命令行参数 main函数的可执行参数 不传参打印 传参打印 IDE传参 cmd传参 命令行参数的应用&#xff08;文件拷贝&#xff09; 什么是命令行参数 概念&#xff1a;命令行参数指的是在运行可执行文件时提供给程序的额外输入信息。它们通常以字符串形式出现&am…

Navicat 技术指引 | 适用于 GaussDB 分布式的自动运行功能

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…