2024年6月27日~2024年7月1日周报

目录

一、前言

二、完成情况

2.1 生成速度模型剖面图

2.2 吴恩达机器学习系列课程

2.2.1 介绍

2.2.1.1 机器学习

2.2.1.2 监督学习

2.2.1.3 无监督学习

2.2.2 单变量线性回归

2.2.2.1 模型表示

2.2.2.2 代价函数

2.2.2.3 梯度下降

2.2.2.4 梯度下降的线性回归

2.2.3 线性代数回顾

2.2.3.1 向量和矩阵

2.2.3.2 加法和标量乘法

2.2.3.3 矩阵向量乘法

2.2.3.4 矩阵乘法与性质

2.2.3.5 逆与转置

2.2.4 多变量线性回归

2.2.4.1 多维特征

2.2.4.2 多变量梯度下降

2.2.4.3 特征缩放

2.2.4.4 学习率

2.2.4.5 特征和多项式回归

2.2.4.6 正规方程

三、下周计划

3.1 存在的问题

3.2 计划


一、前言

        在上周,尝试添加可变形卷积v4、完成了Latex的下载与安装。

        本周,在上周的基础上继续进行思考、学习吴恩达机器学习的系列视频以及Latex论文编辑的格式。另外,思考论文的大概标题与内容。

二、完成情况

2.1 生成速度模型剖面图

        在回顾之前看过的论文时注意到有研究人员在论文中使用到了“速度模型剖面图”作为实验结果进行对比分析,感觉也很直观看出方法之间的差距。因此,学习了如何生成“速度模型剖面图”。

        该问题转换为:读取速度模型某一列的像素值,使用折线图绘制数据变化情况。具体实现代码与图片如下所示,其中的一些细节还需调整:

import matplotlib.pyplot as plt  
  
def plot_velocity_image(num, output, target, test_result_dir, vmin, vmax):  
    plt.figure(figsize=(10, 10))  
    column_index = 35  # 指定特定列的数据  
      
    # 确保column_index在数组范围内  
    if column_index < 0 or column_index >= output.shape[1] or column_index >= target.shape[1]:  
        raise ValueError("column_index out of range")  
      
    # for y in range(output.shape[0]):
    #     pixel_value1 = output[y, column_index]
    #     pixel_value2 = target[y, column_index]
    #     pixel_values1.append(pixel_value1)
    #     pixel_values2.append(pixel_value2)

    pixel_values1 = output[:, column_index]  # 这里直接使用NumPy切片来提取列  
    pixel_values2 = target[:, column_index]  
      
    # 若vmin和vmax是给定的,可以使用它们来设置y轴的范围,也可以省略  
    if vmin is not None and vmax is not None:  
        plt.ylim(vmin, vmax)  
      
    plt.plot(pixel_values1, color='blue', linewidth=2, label='Prediction')  
    plt.plot(pixel_values2, color='red', linewidth=2, label='Ground Truth')  
    plt.legend(fontsize=20)  
    plt.xticks(fontsize=20)  # 设置x轴刻度标签字体大小  
    plt.yticks(fontsize=20)  # 设置y轴刻度标签字体大小  
    plt.xlabel('Vertical position (pixel index)', fontsize=20)  # 修改x轴标签以反映实际情况  
    plt.ylabel('Velocity (m/s)', fontsize=20)  
      
    # 保存图片,确保目录存在或使用os.path.join来构建路径  
    plt.savefig(test_result_dir + 'PDD' + str(num) + '.png')  
    plt.close("all")  # 关闭图形,释放资源

        在上图显示了真实速度模型与预测速度模型的剖面图,那当有多个模型时如何在一张图片上显示呢?思考片刻后,认为可以设置一些全局变量,依次保存某一模型的预测值,最后生成即可。 

2.2 吴恩达机器学习系列课程

2.2.1 介绍

这一小节主要介绍下述内容:

① 什么是机器学习,机器学习能做些什么事情;

② 什么是监督学习;

③ 什么是无监督学习;

2.2.1.1 机器学习

        在机器学习的专业人士中,也不存在一个被广泛认可的定义来准确定义机器学习是什么或不是什么。因此,在下面通过一些人们尝试定义的案例来说明什么是机器学习。

        第一个机器学习的定义来自于 Arthur Samuel,较为古老,且不太正式。他定义机器学习为:在进行特定编程的情况下,给予计算机学习能力的领域。Samuel 的定义可以回溯到 50 年代,他编写了一个西洋棋程序。这程序神 奇之处在于,编程者自己并不是个下棋高手。但因为他太菜了,于是就通过编程,让西洋棋程序自己跟自己下了上万盘棋。通过观察哪种布局(棋盘位置)会赢,哪种布局会输,久而久之,这西洋棋程序明白了什么是好的布局,什么样是坏的布局。然后程序通过一定数量的学习后,玩西洋棋的水平超过了 Samuel。 尽管编写者自己是个菜鸟,但因为计算机有着足够的耐心,去下上万盘的棋,没有人有这耐心去下这么多盘棋。通过这些练习,计算机获得无比丰富的经验,于是渐渐成为了比 Samuel 更厉害的西洋棋手。

        第二个年代近一些的定义由Tom Mitchell提出,来自卡内基梅隆大学。Tom定义的机器学习是:一个好的学习问题定义如下,一个程序被认为能从经验 E 中学习,解决任务 T,达到性能度量值 P,当且仅当,有了经验 E 后,经过 P 评判,程序在处理 T 时的性能有所提升。我认为经验 E 就是程序上万次的自我练习的经验而任务 T 就是下棋。性能度量值 P 呢,就是它在与一 些新的对手比赛时,赢得比赛的概率。换句话说,以性能度量值 P 为标准,这个任务的性能,也就是这个任务 T 的系统性能,将在学习经验 E 后得到提高。

2.2.1.2 监督学习

        目前存在几种不同类型的学习算法, 主要的两种类型被称之为监督学习和无监督学习。

        监督学习:给学习算法一个数据集,该数据集中的每个样本都由相应的“正确答案”组成,然后再根据这些样本做出预测。(我们目前所接触的全波形反演就是监督学习:给定相应的地震数据与速度模型)

        监督学习又分为回归问题与分类算法。

  • 回归问题:试着通过回归推测出一系列连续值属性(一个连续的输出),预测输入变量与输出变量之间的关系。应用情况:房价预测;
  • 分类算法:试着推测出离散的输出值(一组离散的结果)。应用情况:预测肿瘤的恶性与否、糖尿病;

        在之后会介绍一种算法:支持向量机SVM——能让计算机处理无限多个特征。

2.2.1.3 无监督学习

        无监督学习:在给定的数据集中没有任何的标签或者是有相同的标签或者就是没标签。

        无监督学习一些类型介绍:

  • 聚类算法:根据某个特定的标准对一个数据集中的数据进行划分,将其划分为不同的簇或类,使得同一个簇内的数据对象的相似性尽可能大,在不同簇内的数据对象的差异性也尽可能大。应用情况:新闻事件分类、基因组等
  • 鸡尾酒宴问题:在计算机语音识别领域的一个问题,当前语音识别技术已经可以以较高精度识别一个人所讲的话,但是当说话的人数为两人或者多人时,语音识别率就会极大的降低,这一难题被称为鸡尾酒宴问题。

Octave是免费的开源软件,使用一个像 Octave 或 Matlab 的工具,许多学习算法变得只有几行代码就可实现。

2.2.2 单变量线性回归

2.2.2.1 模型表示

        在本节课程中使用到的一些符号定义:

字符代表意思
m训练集中的实例数量
x特征/输入变量
y目标变量/输出变量
(x,y)训练集中的实例
(x^i,y^i)代表第i个观察实例
h学习算法的解决方案或函数也称为假设(hypothesis)

         上图表示监督学习算法的工作方式。

         单变量线性回归问题(只包含一个特征\输入变量):h_\theta (x) = \theta _0 + \theta _1 x

2.2.2.2 代价函数

        在上一小节定义了单变量线性回归问题,现在要做的是使模型选择合适的参数:\theta _0 / \theta_1使得得到的h值最小。代价函数如下:

J(\theta _0,\theta _1)=\frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^i)-y^i)^2

        代价函数也被称作平方误差函数,有时也被称为平方误差代价函数。我们之所以要求出误差的平方和,是因为误差平方代价函数对于大多数问题,特别是回归问题,都是一个合理的选择。还有其他的代价函数也能很好地发挥作用,但是平方误差代价函数可能是解决回归问题最常用的手段了。

        代价函数的直观理解如下:

        可以将三维图转换为等高线图,这样更加直观: 

2.2.2.3 梯度下降

        梯度下降是一个用来求函数最小值的算法,将使用梯度下降算法来求出代价函数J(\theta _0, \theta _1)的最小值。

        梯度下降背后的思想是:开始时会随机选择一个参数的组合(\theta_0,\theta_1,\dots,\theta_n),计算代 价函数,然后寻找下一个能让代价函数值下降最多的参数组合。持续这么做直到到到一个局部最小值(local minimum),因为并没有尝试完所有的参数组合,所以不能确定得到的局部最小值是否便是全局最小值(global minimum),选择不同的初始参数组合,可能会找到不同的局部最小值。

         想象一下你正站立在山的这一点上,在梯度下降算法中,我们要做的就是旋转 360 度,看看我们的周围,并问自己要在某个方向上,用小碎步尽快下山。这些小碎步需要朝什么方向?如果我们站在山坡上的这一点,你看一下周围,你 会发现最佳的下山方向,你再看看周围,然后再一次想想,我应该从什么方向迈着小碎步下山?然后你按照自己的判断又迈出一步,重复上面的步骤,从这个新的点,你环顾四周,并 决定从什么方向将会最快下山,然后又迈进了一小步,并依此类推,直到你接近局部最低点的位置。

        批量梯度下降(batch gradient decent)算法的公式为:

        其中,\alpha表示学习率,它决定了我们沿着能让代价函数下降程度最大的方向向下迈出的步子有多大,在批量梯度下降中,我们每一次都同时让所有的参数减去学习速率乘以代价函数的导数。对\theta赋值,使得J(\theta)按照梯度下降最快方向进行,一直迭代下去,最终得到局部最小值。

        在梯度下降中,需要更新\theta_1 \ \theta_0,当j=0j=1时,会产生更新。特别注意的是,这两个参数需要同时更新。当之后谈到梯度下降时,他们的意思就是同步更新。

  • 如果学习率太小,需要很多步才能到达全局最低点。
  • 如果学习率太大,那么梯度下降法可能会越过最低点,甚至可能无法收敛,下一次迭代又移 动了一大步,越过一次,又越过一次,一次次越过最低点,直到你发现实际上离最低点越来越远。它会导致无法收敛,甚至发散。

        在梯度下降法中,当我们接近局部最低点时,梯度下降法会自动采取更小的幅度,这是因为当我们接近局部最低点时,很显然在局部最低时导数等于零,所以当我们接近局部最低时,导数值会自动变得越来越小,所以梯度下降将自动采取较小的幅度,这就是梯度下降的做法。所以实际上没有必要再另外减小学习率。

2.2.2.4 梯度下降的线性回归

        梯度下降算法和线性回归算法的比较如下图所示:

        算法被改写为: 

        批量梯度下降: 指的是在梯度下降的每一步中都用到了所有的训练样本,在梯度下降中,在计算微分求导项时,需要进行求和运算,所以,在每一个单独的梯度下降中,最终都要计算这样一个东西,这个项需要对所有m个训练样 本求和。因此,批量梯度下降法这个名字说明了需要考虑所有这一"批"训练样本,而事实上,有时也有其他类型的梯度下降法,不是这种"批量"型的,不考虑整个的训练集,而是每次只关注训练集中的一些小的子集。

2.2.3 线性代数回顾

        该节内容较为简单,回顾或者跳过均可。

2.2.3.1 向量和矩阵

        下图是 4×2 矩阵,即 4 行 2 列,如m为行,n为列,那么m × n即 4×2:

        矩阵的维数=行数 x 列数,A_{ij}指的是第i行,第j列的元素。

        向量是一种特殊的矩阵,在讲义中的向量一般都是列向量。

2.2.3.2 加法和标量乘法
  • 矩阵的加法:行列数相等的可以加。
  • 矩阵标量的乘法:每个元素都要乘。
2.2.3.3 矩阵向量乘法

        矩阵和向量的乘法如下图所示:m \times n 的矩阵乘以 n \times 1 的向量,得到 m \times 1 的向量。举例如下所示:

2.2.3.4 矩阵乘法与性质

        矩阵乘法:m \times n 的矩阵乘以 n \times o 的矩阵,变成 m \times o 的矩阵。

        矩阵乘法的性质:

  • 矩阵的乘法不满足交换律:A \times B \neq B \times A
  • 矩阵的乘法满足结合律,即:A \times(B \times C) = (A \times B) \times C

      单位矩阵:在矩阵的乘法中,有一种矩阵起着特殊的作用,如同数的乘法中的1,我们称这种矩阵为单位矩阵.它是个方阵,一般用 I 或者 E 表示,本讲义都用 I 代表单位矩阵, 从左上角到右下角的对角线(称为主对角线)上的元素均为 1 以外全都为 0。如:

AA^{-1} = A^{-1}A = I

        对于单位矩阵,有:AI=IA=A

2.2.3.5 逆与转置

        矩阵的逆:如矩阵 A 是一个m \times m 矩阵(方阵),如果有逆矩阵,则:AA^{-1} = A^{-1}A = I

一般在 OCTAVE 或者 MATLAB 中进行计算矩阵的逆矩阵。

        矩阵的转置:设 A 为 m \times n 阶矩阵(即 m 行 n 列),第ij列的元素是 a(i,j),即:A=a(i,j)

         定义 A 的转置为这样一个 n \times m 阶矩阵 B ,满足?B =a(i,j),即 b(i,j)=a(i,j)B 的第i行第j列元素是 A 的第j行第i列元素),记 A^{T} = B。(有些书记为 A^{'} = B)。

        直观来看,将 A 的所有元素绕着一条从第 1 行第 1 列元素出发的右下方 45 度的射线作 镜面反转,即得到 A 的转置。

         矩阵的转置基本性质:

  • (A+B)^T=A^T\pm B^T
  • (A \times B)^T = B^T \times A^T
  • (A^T)^T = A
  • (KA)^T = KA^T

        在matlab中矩阵转置:直接打一撇,即x = y^{'}

2.2.4 多变量线性回归

2.2.4.1 多维特征

        在前面探讨了单变量\特征的回归模型,接着将对上述模型增加更多的特征,构成一个含有多个变量的模型,模型中的特征为:(x_i,x_2,\dots,x_n)。增添更多特征后,引入一些新的符号注释:

符号代表含义
n特征的数量
x^{(i)}i个训练实例,是特征矩阵中的第i行,是一个向量
x^{(i)}_{j}特征矩阵中第i行的第j个特征,也就是第i个训练实例的第j个特征
h_{\theta}(x)=\theta_0 + \theta _1x_1 + \theta_2 x_2 + \dots + \theta_n x_n代表支持多变量的假设

        在上述公式中有 n+1 个参数和n个变量,引入 x_0=1,此时模型中的参数和每一个训练实例都变成 n + 1 维的向量,特征矩阵 X 的维度是 m \times (n+1)

        因此,公式可以简化为:h_{\theta}(x) = \theta^T X。其中,上标 T 代表矩阵转置。

2.2.4.2 多变量梯度下降

        与单变量线性回归类似,在多变量线性回归中,我们也构建一个代价函数,则这个代价 函数是所有建模误差的平方和,即:

J(\theta_0, \theta_1,\times,\theta_n)=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2

        其中:h_{\theta}(x) = \theta^TX=\theta_0+\theta_1x_1+\theta_2x_2+\dots+\theta_nx_n

        我们的目标和单变量线性回归问题中一样,是要找出使得代价函数最小的一系列参数。 多变量线性回归的批量梯度下降算法为:

         即:

         求导数后得到:

         当n \geq 1时,

\theta_0 := \theta_0 - \alpha \frac{1}{m}\sum_{i=1}^{m} (h_{\theta}(x^{(i)})-y^{(i)})x_{0}^{(i)}

\theta_1 := \theta_1 - \alpha \frac{1}{m}\sum_{i=1}^{m} (h_{\theta}(x^{(i)})-y^{(i)})x_{1}^{(i)}

\theta_2 := \theta_2 - \alpha \frac{1}{m}\sum_{i=1}^{m} (h_{\theta}(x^{(i)})-y^{(i)})x_{2}^{(i)}

         在开始的时候随机选择一系列的参数值,计算所有的预测结果后,再给所有的参数一个新的值,如此循环直到收敛。

2.2.4.3 特征缩放

        在面对多维特征问题的时候,要保证这些特征都具有相近的尺度,这将帮助梯 度下降算法更快地收敛。

        以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值为 0- 2000 平方英尺,而房间数量的值则是 0-5,以两个参数分别为横纵坐标,绘制代价函数的等 高线图能,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。

        解决方案:将所有特征的尺度都尽量缩放到-1 到 1 之间。令x_n = \frac{x_n- \mu_ n}{s_n},其中:\mu _n 表示平均值,s_n 表示标准差。

2.2.4.4 学习率

        梯度下降算法收敛所需要的迭代次数根据模型的不同而不同。因此,可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛。也有一些自动测试是否收敛的方法,例如将代价函数的变化值与某个阀值(例如 0.001) 进行比较,但通常不选择这个方法。

        梯度下降算法的每次迭代受到学习率的影响:

  • 如果学习率 \alpha 过小,则达到收敛所需的迭 代次数会非常高;
  • 如果学习率 \alpha 过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。

        通常可以考虑下述学习率:\alpha = 0.01,0.03,0.1,0.3,1,3,10,数与数之间差不多3倍关系。

2.2.4.5 特征和多项式回归

        当特征数量增多时,线性回归并不适用于所有数据。因此,有时我们需要曲线来适应我们的数据,如二次方模型:h_{\theta}(x) = \theta_0 + \theta_1 x_1+ \theta_2 x_2^2,或者三次方模型:h_{\theta}(x) = \theta_0 + \theta_1 x_1+ \theta_2 x_2^2+ \theta_3 x_3^3

         通常我们需要先观察数据然后再决定准备尝试怎样的模型。 另外,我们可以令: x_2=x_2^2,x_3=x_3^3,从而将模型转化为线性回归模型。还可以根据函数图像的特性,对模型进行调整,这一步需要很多经验。

注:如果采用多项式回归模型,在运行梯度下降算法前,特征缩放非常有必要。

2.2.4.6 正规方程

        正规方程是通过求解下面的方程来找出使得代价函数最小的参数的: \frac{\partial }{\partial \theta_j}J(\theta_j)=0。 假设训练集特征矩阵为 X(包含了 x_0=1)并且训练集结果为向量 y,则利 用正规方程解出向量 \theta = (X^TX)^{-1}X^Ty

        其中,上标 T 代表矩阵转置,上标- 1 代表矩阵的逆。设矩阵 A=X^TX,则:(X^TX)^{-1} = A^{-1}

注:对于那些不可逆的矩阵,正规方程方法是 不能用的。

(通常是因为特征之间不独立,如同时包含英尺为单位的尺寸和米为单位的尺寸两个特征,也有可能是特征数量大于训练集的数量,也可以理解为矩阵不满秩)

        梯度下降与正规方程的比较如下:

梯 度下降正规方程
是否需要选择参数需要选择学习率\alpha不需要
迭代次数需要多次迭代一次运算得出
计算成本当特征数量 n 大时也能较好适用需要计算 (X^TX)^{-1},如果特征数量 n 较大则运算代价大,因为矩阵逆的计算时间复杂度为 O(n^3),通常来说,当 n 小于10000 时还是可以接受的
适用场景适用于各种各类的模型只适用于线性模型,不适合逻辑回归模型等其他模型

        只要特征变量的数目并不大,标准方程是一个很好的计算参数 \theta 的替代方法。 具体地说,只要特征变量数量小于一万,通常使用标准方程法,而不使用梯度下降法。 随着要讲的学习算法越来越复杂,例如,当我们讲到分类算法,像逻辑回归算法,实际上对于那些算法,并不能使用标准方程法。对于那些更复杂的学习算法, 将不得不仍然使用梯度下降法。因此,梯度下降法是一个非常有用的算法,可以用在有大量特征变量的线性回归问题。或者以后在课程中,会讲到的一些其他的算法,因为标准方程法不适合或者不能用在它们上。但对于这个特定的线性回归模型,标准方程法是一个 比梯度下降法更快的替代算法。所以,根据具体的问题具体分析。

        正规方程的Python实现:

import numpy as np 
def normalEqn(X, y): 
    theta = np.linalg.inv(X.T@X)@X.T@y #X.T@X 等价于 X.T.dot(X) 
    return theta

三、下周计划

        通过本周的学习对之前的一些知识理解更加深入,解决了之前的一些疑惑。

3.1 存在的问题

  1. 之前实验中使用的损失函数是MSE、MAE与交叉熵损失函数,如果写在论文中,算抄袭师兄的吗?
  2. 实验还没完成;
  3. 没有理解 \theta = (X^TX)^{-1}X^Ty 是如何推导出来的,本周理解该推导过程。

3.2 计划

  1. 继续学习吴恩达机器学习视频;
  2. 继续完成实验与论文初稿;

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

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

相关文章

Java短剧系统

探索影视新体验 &#x1f4f1;一、引言&#xff1a;短剧时代的来临 在数字化的今天&#xff0c;我们见证了许多内容消费模式的转变。从长篇大论的电视剧到短小精悍的短视频&#xff0c;再到如今备受瞩目的短剧&#xff0c;观众对于影视内容的需求越来越多元化。而短剧系统微信…

网络请求的高效处理:C++ libmicrohttpd库详解

一、libmicrohttpd简介 libmicrohttpd是一个小型的C语言库&#xff0c;用于创建HTTP服务器和客户端。它提供了HTTP 1.1协议的完整实现&#xff0c;包括持久连接、管道化请求、虚拟主机等特性。libmicrohttpd的特点是&#xff1a; 轻量级&#xff1a;易于集成到C或C项目中。跨…

DolphinScheduler分布式集群部署指南(小白版)

官方文档地址&#xff1a;https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9 DolphinScheduler简介 摘自官网&#xff1a;Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景&#xff0c;提供了一个可视化操作任务、工作流…

深入理解计算机系统 CSAPP 8.4.2 fork函数

//fork.c #include <sys/types.h> #include <unistd.h> #include <stdio.h>int main() {pid_t fpid; //fpid表示fork函数返回的值int count 0;fpid fork();if (fpid < 0)printf("error in fork!");else if (fpid 0) {printf("\ni am th…

线性图标设计

创建图标区域 按键A&#xff0c;创建一个24x24的背景。 图标绘制包含几个点 矢量图形绘制&#xff1a;箭头、圆、三角...... 绘制箭头和矩形 1.下载图标 双击矩形选中要删除的点 调整一下即可得到下载的图标。 2.时间图标 按快捷键O画个圆&#xff0c;L加两条线变成一个时钟…

振动分析-6-轴承数据库之时频域短时傅里叶变换STFT

Python轴承故障诊断 (一)短时傅里叶变换STFT 1 短时傅里叶变换 1.1 基本原理 傅里叶变换的基本思想: 将信号分解成一系列不同频率的连续正弦波的叠加;或者说,将信号从时间域转换到频率域。 由于傅里叶变换是对整个信号进行变换,将整个信号从时域转换到频域,得到一个整体…

代码随想录算法训练营第九天|151.翻转字符串里的单词、右旋字符串、28. 实现 strStr()、459.重复的子字符串

打卡Day9 1.151.翻转字符串里的单词2.右旋字符串3.28. 实现 strStr()4.459.重复的子字符串 1.151.翻转字符串里的单词 题目链接&#xff1a;翻转字符串里的单词 文档讲解&#xff1a; 代码随想录 思路&#xff1a;首先&#xff0c;移除多余的空格&#xff1b;然后&#xff0c…

【MySQL】事务实现原理

事务 事务是将一组SQL语句打包成一个整体&#xff0c;在这组SQL的执行过程中&#xff0c;要么全部成功&#xff0c;要么全部失败。这组SQL语句可以是一条也可以是多条。 如果转账成功&#xff0c;应该满足以下要求&#xff1a; 张三的账户余额减少100&#xff0c;变成900&…

代码随想录第37天|动态规划

01背包理论基础 参考 01背包: 每个物品只有一个, 只要选或不选两个选项 暴力解法: 回溯法枚举 dp[i][j]: i 表示 0 ~ i 的物品, j 表示容量, 数值表示当前的最大价值递推公式: max(dp[i-1][j], dp[i-1][j-weight[i]] value[i])初始化: j 0 时, 无法放任何有价值的物品, d…

Python从0到100(三十三):xpath和lxml类库

1. 为什么要学习xpath和lxml lxml是一款高性能的 Python HTML/XML 解析器&#xff0c;我们可以利用XPath&#xff0c;来快速的定位特定元素以及获取节点信息 2. 什么是xpath XPath&#xff0c;全称为XML Path Language&#xff0c;是一种用于在XML文档中进行导航和数据提取的…

相机网线RJ45连接器双端带线5米8芯绿色网线注塑成型

相机网线RJ45连接器双端带线5米8芯绿色网线注塑成型&#xff0c;这款网线采用了环保的绿色材质&#xff0c;线长5米&#xff0c;足够满足大多数拍摄场景的需求。更重要的是&#xff0c;它采用了8芯设计&#xff0c;保证了数据传输的稳定性和高速性。在接口方面&#xff0c;它采…

JAVA:常用的算法指南

请关注微信公众号&#xff1a;拾荒的小海螺 博客地址&#xff1a;http://lsk-ww.cn/ 1、简述 在软件开发过程中&#xff0c;算法扮演着关键的角色。它们用于解决各种问题&#xff0c;从数据处理到搜索、排序等。本文将介绍几种常见的算法及其 Java 实现&#xff0c;包括排序算…

云计算【第一阶段(24)】Linux文件系统与日志分析

一、文件与存储系统的inode与block 1.1、硬盘存储 最小存储单位&#xff1a;扇区(sector) 每个扇区大小&#xff1a;512字节 1.2、文件存取 最小存取单位&#xff1a;块(block)连续八个扇区组成&#xff1a;块(block) 每个块大小&#xff1a;4K文件数据&#xff1a;实际数据…

“论云上自动化运维及其应用”写作框架,软考高级论文,系统架构设计师论文

论文真题 云上自动化运维是传统IT运维和DevOps的延伸&#xff0c;通过云原生架构实现运维的再进化。云上自动化运维可以有效帮助企业降低IT运维成本&#xff0c;提升系统的灵活度&#xff0c;以及系统的交付速度&#xff0c;增强系统的可靠性&#xff0c;构建更加安全、可信、…

电脑怎么录屏幕视频带声音?2种方法教会你

在数字时代的浪潮中&#xff0c;电脑屏幕视频录制已经成为一项潮流且实用的技能。无论是为了创作短视频、分享游戏过程&#xff0c;还是为了记录在线会议或教程&#xff0c;电脑录屏都是非常重要的功能。但是不少的人都会遇上录制好的视频没有声音的困境&#xff0c;面对这种情…

matrix-breakout-2-morpheus靶场

1 信息收集 1.1 主机发现 arp-scan -l 1.2 端口与服务扫描 发现开放22、80、81端口 2 访问服务 2.1 访问80端口 查看源代码 2.2 访问81端口 3 目录扫描 3.1 dirsearch目录扫描 dirsearch -u 192.168.1.14 发现robots.txt文件和javascript文件 访问文件 http://192.168…

HarmonyOS Next开发学习手册——显示图片 (Image)

开发者经常需要在应用中显示一些图片&#xff0c;例如&#xff1a;按钮中的icon、网络图片、本地图片等。在应用中显示图片需要使用Image组件实现&#xff0c;Image支持多种图片格式&#xff0c;包括png、jpg、bmp、svg和gif&#xff0c;具体用法请参考 Image 组件。 Image通过…

CS-隐藏防朔源-数据转发-iptables(Linux自带的防火墙)

免责声明:本文仅做技术交流与学习... 目录 准备环境: 1-iptables转发机设置转发: 2-CS服务器配置iptables服务器的IP 准备环境: 两台外网服务器. --iptables服务器就是做一个中转...封了中转就没了... 1-iptables转发机设置转发: iptables -I INPUT -p tcp -m tcp --dport 8…

【K8s】专题六(3):Kubernetes 稳定性之自动扩缩容

以下内容均来自个人笔记并重新梳理&#xff0c;如有错误欢迎指正&#xff01;如果对您有帮助&#xff0c;烦请点赞、关注、转发&#xff01;欢迎扫码关注个人公众号&#xff01; 一、基本介绍 在 Kubernetes 中&#xff0c;自动扩缩容是一种动态调整集群资源&#xff0c;以灵活…

Linux基础篇-文件句柄数修改

目录 文件句柄数修改修改最大限制用户级的修改系统级的修改 文件句柄数修改 linux最大打开文件句柄数&#xff0c;即打开文件数最大限制&#xff0c;就是规定的单个进程能够打开的最大文件句柄数量&#xff08;Socket连接也算在里面&#xff0c;默认大小1024&#xff09; liu…