DDPM推导笔记

news2024/11/24 3:23:24

各位佬看文章之前,可以先去看看这个视频,并给这位up主点赞投币,这位佬讲解的太好了:大白话AI

1.前置知识的学习

1.1 正态分布特性

​ (1)正态分布的概率密度函数
f ( x ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 , 记为 N ( μ , σ 2 ) f(x) = {1 \over \sqrt{2 \pi } \sigma} e^{-{{(x-\mu)^2} \over {2 \sigma^2}}} ,记为N(\mu, \sigma^2) f(x)=2π σ1e2σ2(xμ)2,记为N(μ,σ2)

​ 当 μ = 0 , σ 2 = 1 \mu = 0, \sigma^2=1 μ=0,σ2=1时,则记为标准正态分布,记为 N ( 0 , 1 ) N(0, 1) N(0,1), 又称为高斯分布。

​ (2)正态分布的基本性质
N ( μ 1 , σ 1 2 ) + N ( μ 2 , σ 2 2 ) = N ( μ 1 + μ 2 , σ 1 2 + σ 2 2 ) a ∗ N ( μ , σ ) = N ( a ∗ μ , ( a ∗ σ ) 2 ) N(\mu_1, \sigma_1^2) + N(\mu_2, \sigma_2^2) = N(\mu_1+\mu2, \sigma_1^2+\sigma_2^2) \\ a*N(\mu, \sigma) = N(a*\mu, (a*\sigma)^2) N(μ1,σ12)+N(μ2,σ22)=N(μ1+μ2,σ12+σ22)aN(μ,σ)=N(aμ,(aσ)2)

1.2 贝叶斯定理

A , B A, B A,B是两个随机事件, P ( A ) P(A) P(A)表示 事件 A 事件A 事件A发生的概率, P ( B ∣ A ) P(B|A) P(BA)表示A事件发生的情况下B事件发生的概率,则贝叶斯定理如下:
P ( A ∣ B ) = P ( B ∣ A ) ∗ P ( A ) P ( B ) P(A|B) = {{P(B|A) * P(A)} \over P(B)} P(AB)=P(B)P(BA)P(A)

2. 前向过程(加噪)

在这里插入图片描述

​ 如图所示,前向过程则是一个加载过程,在每个时间步,都从正态分布中随机采样一个和图片等大的噪声(也可以理解为噪声图片),则加噪过程:
x 1 = β 1 ∗ ϵ 1 + 1 − β 1 ∗ x 0 x_1 = \sqrt{\beta_1} * \epsilon_1 + \sqrt{1-\beta_1} * x_0 x1=β1 ϵ1+1β1 x0
​ 其中 x 0 x_0 x0表示原始图片, ϵ 1 \epsilon_1 ϵ1 表示随机噪声, β 1 \beta_1 β1表示扩散速度, T T T表示扩散的次数,则可以一次推导:
x 1 = β 1 ∗ ϵ 1 + 1 − β 1 ∗ x 0 x 2 = β 2 ∗ ϵ 2 + 1 − β 2 ∗ x 1 x 3 = β 3 ∗ ϵ 3 + 1 − β 3 ∗ x 2 ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ x T = β T ∗ ϵ T + 1 − β T ∗ x T − 1 前后关系就可以记为: x t = β t ∗ ϵ t + 1 − β t ∗ x t − 1 x_1 = \sqrt{\beta_1} * \epsilon_1 + \sqrt{1-\beta_1} * x_0 \\ x_2 = \sqrt{\beta_2} * \epsilon_2 + \sqrt{1-\beta_2} * x_1 \\ x_3 = \sqrt{\beta_3} * \epsilon_3 + \sqrt{1-\beta_3} * x_2 \\ ······ \\ x_T = \sqrt{\beta_T} * \epsilon_T + \sqrt{1-\beta_T} * x_{T-1} \\ 前后关系就可以记为: \\ x_t = \sqrt{\beta_t} * \epsilon_t + \sqrt{1-\beta_t} * x_{t-1} \\ x1=β1 ϵ1+1β1 x0x2=β2 ϵ2+1β2 x1x3=β3 ϵ3+1β3 x2⋅⋅⋅⋅⋅⋅xT=βT ϵT+1βT xT1前后关系就可以记为:xt=βt ϵt+1βt xt1
​ 为简化后续运算,令 α t = 1 − β t \alpha_t = 1 - \beta_t αt=1βt, 则有:
x t = 1 − α t ∗ ϵ t + α t ∗ x t − 1 x_t = \sqrt{1- \alpha_t} * \epsilon_t + \sqrt{\alpha_t} * x_{t-1} xt=1αt ϵt+αt xt1

思考:如何能更快的得到 x T x_T xT?因为如果加噪1000步,岂不是要计算1000次上述的运算!好的,下面介绍怎样依赖正态分布的可加性来简化运算,从而推导出 x 0 x_0 x0 x t x_t xt的关系:
由: x t = 1 − α t ∗ ϵ t + α t ∗ x t − 1 x t − 1 = 1 − α t − 1 ∗ ϵ t − 1 + α t − 1 ∗ x t − 2 把 x t − 1 代入到 x t 中可以推导出: x t = 1 − α t ∗ ϵ t + α t ∗ ( 1 − α t − 1 ∗ ϵ t − 1 + α t − 1 ∗ x t − 2 ) = a t ( 1 − a t − 1 ) ∗ ϵ t − 1 + 1 − a t ∗ ϵ t + a t a t − 1 ∗ x t − 2 其中: ϵ t − 1 和 ϵ t 是两个随机噪声,且两者是两个独立的随机变量。 打个比喻:我们有一个骰子掷两次分别得到 ϵ t − 1 和 ϵ t ,完全可以等效 于我们有两个骰子掷一次。即:一个骰子掷两次的概率分布等同于两个骰子掷一次的概率分布,所以 , 如果我们知道两个骰子掷一次的概率分布,然后进行一次采样即可。 由: \\ x_t = \sqrt{1- \alpha_t} * \epsilon_t + \sqrt{\alpha_t} * x_{t-1} \\ x_{t-1} = \sqrt{1- \alpha_{t-1}} * \epsilon_{t-1} + \sqrt{\alpha_{t-1}} * x_{t-2} \\ 把x_{t-1}代入到x_t中可以推导出: \\ x_t = \sqrt{1- \alpha_t} * \epsilon_t + \sqrt{\alpha_t} * (\sqrt{1- \alpha_{t-1}} * \epsilon_{t-1} + \sqrt{\alpha_{t-1}} * x_{t-2}) \\ = \sqrt{a_t(1-a_{t-1})} * \epsilon_{t-1} + \sqrt{1-a_t} * \epsilon_t + \sqrt{a_t a_{t-1}} * x_{t-2} \\ 其中:\epsilon_{t-1} 和 \epsilon_{t} 是两个随机噪声,且两者是两个独立的随机变量。\\ 打个比喻:我们有一个骰子掷两次分别得到\epsilon_{t-1} 和 \epsilon_{t},完全可以等效\\ 于我们有两个骰子掷一次。即:一个骰子掷两次的概率分布等同于两个骰子掷一次的概率分布,所以,\\ 如果我们知道两个骰子掷一次的概率分布,然后进行一次采样即可。 \\ 由:xt=1αt ϵt+αt xt1xt1=1αt1 ϵt1+αt1 xt2xt1代入到xt中可以推导出:xt=1αt ϵt+αt (1αt1 ϵt1+αt1 xt2)=at(1at1) ϵt1+1at ϵt+atat1 xt2其中:ϵt1ϵt是两个随机噪声,且两者是两个独立的随机变量。打个比喻:我们有一个骰子掷两次分别得到ϵt1ϵt,完全可以等效于我们有两个骰子掷一次。即:一个骰子掷两次的概率分布等同于两个骰子掷一次的概率分布,所以,如果我们知道两个骰子掷一次的概率分布,然后进行一次采样即可。

由正态分布的基本性质可知: ϵ t 和 ϵ t − 1 服从 N ( 0 , 1 ) , 即: ϵ t ∼ N ( 0 , 1 ) , ϵ t − 1 ∼ N ( 0 , 1 ) 可以推导出: 1 − a t ∗ ϵ t ∼ N ( 0 , 1 − α t ) a t ( 1 − a t − 1 ) ∗ ϵ t − 1 ∼ N ( 0 , a t − a t ∗ a t − 1 ) ) 由正态分布的基本性质可知:\\ \epsilon_t和\epsilon_{t-1}服从N(0, 1),即:\epsilon_t \sim N(0,1), \epsilon_{t-1} \sim N(0,1) \\ 可以推导出: \sqrt{1-a_t} * \epsilon_t \sim N(0, 1- \alpha_t) \\ \sqrt{a_t(1-a_{t-1})} * \epsilon_{t-1} \sim N(0, a_t-a_t*a_{t-1})) 由正态分布的基本性质可知:ϵtϵt1服从N(0,1),即:ϵtN(0,1),ϵt1N(0,1)可以推导出:1at ϵtN(0,1αt)at(1at1) ϵt1N(0,atatat1))

从而推导出: a t ( 1 − a t − 1 ) ∗ ϵ t − 1 + 1 − a t ∗ ϵ t ∼ N ( 0 , 1 − a t ∗ a t − 1 ) 从而推导出: \\ \sqrt{a_t(1-a_{t-1})} * \epsilon_{t-1} + \sqrt{1-a_t} * \epsilon_t \sim N(0, 1-a_t*a_{t-1}) 从而推导出:at(1at1) ϵt1+1at ϵtN(0,1atat1)

进而推导出: x t = 1 − a t ∗ a t − 1 ∗ ϵ + a t ∗ a t − 1 ∗ x t − 2 , 其中: ϵ ∼ N ( 0 , 1 − a t ∗ a t − 1 ) 进而推导出:\\ x_t = \sqrt{1-a_t*a_{t-1}} * \epsilon + \sqrt{a_t*a_{t-1}}*x_{t-2}, 其中:\epsilon \sim N(0, 1-a_t*a_{t-1}) 进而推导出:xt=1atat1 ϵ+atat1 xt2,其中:ϵN(0,1atat1)

这里就可到了 x t 和 x t − 2 之间的关系,然后依靠上面的方法就可以一次推导出 x t 到 x 0 的关系 ( 数学归纳法证明 ) ,具体如下: x t = 1 − a t a t − 1 a t − 2 . . . a 1 ∗ ϵ + a t a t − 1 a t − 2 . . . a 1 ∗ x 0 其中, ϵ ∼ N ( 0 , 1 − a t a t − 1 a t − 2 . . . a 1 ) 这里就可到了x_t和x_{t-2}之间的关系,然后依靠上面的方法就可以一次推导出x_t到x_0的关系(数学归纳法证明),具体如下: \\ x_t = \sqrt{1 - a_ta_{t-1}a_{t-2}...a_1} * \epsilon + \sqrt{a_ta_{t-1}a_{t-2}...a1} * x_0 \\ 其中,\epsilon \sim N(0, 1 - a_ta_{t-1}a_{t-2}...a_1) 这里就可到了xtxt2之间的关系,然后依靠上面的方法就可以一次推导出xtx0的关系(数学归纳法证明),具体如下:xt=1atat1at2...a1 ϵ+atat1at2...a1 x0其中,ϵN(0,1atat1at2...a1)

为了方便表示 , 记: a ˉ t = a t a t − 1 a t − 2 . . . a 1 则: x t = 1 − a ˉ t ∗ ϵ + a ˉ t x 0 为了方便表示,记: \bar{a}_t = a_ta_{t-1}a_{t-2}...a_1 \\ 则: x_t = \sqrt{1 - \bar{a}_t} * \epsilon + \sqrt{\bar{a}_t} x_0 为了方便表示,记:aˉt=atat1at2...a1则:xt=1aˉt ϵ+aˉt x0

​ 至此,前向过程就记录完成了,我们得到 x 0 到 x t x_0到x_t x0xt的关系,并且可以只通过一次采样就能得到。

3. 反向过程(去噪)

在这里插入图片描述
​ 去噪过程就是从 x T x_T xT一步步反推回 x 0 x_0 x0

3.1 反向原理推导

​ 由贝叶斯定理:
P ( A ∣ B ) = P ( B ∣ A ) ∗ P ( A ) P ( B ) P(A|B) = {{P(B|A) * P(A)} \over P(B)} P(AB)=P(B)P(BA)P(A)
​ 我们可以令:
由于 x t 到 x t − 1 是一个随机过程,则令: P ( x t − 1 ∣ x t ) : 表示在给定 x t 的情况下, x t − 1 的概率。 套用贝叶斯定理得: P ( x t − 1 ∣ x t ) = P ( x t ∣ x t − 1 ) ∗ P ( x t − 1 ) P ( x t ) 其中, P ( x t ) 和 P ( x t − 1 ) 分别表示 x t 和 t t − 1 的概率 , 也就是从 x 0 原图得到它们的概率。 由于x_t到x_{t-1}是一个随机过程,则令: \\ P(x_{t-1}|x_t): 表示在给定x_t的情况下,x_{t-1}的概率。 \\ 套用贝叶斯定理得: \\ P(x_{t-1} | x_t) = { P(x_t | x_{t-1}) * P(x_{t-1}) \over P(x_t)} \\ 其中,P(x_t)和P(x_{t-1})分别表示x_t和t_{t-1}的概率,也就是从x_0原图得到它们的概率。 由于xtxt1是一个随机过程,则令:P(xt1xt):表示在给定xt的情况下,xt1的概率。套用贝叶斯定理得:P(xt1xt)=P(xt)P(xtxt1)P(xt1)其中,P(xt)P(xt1)分别表示xttt1的概率,也就是从x0原图得到它们的概率。
所以,可以在每个式子后面添加一个先验 x 0 , 即: P ( x t − 1 ∣ x t , x 0 ) = P ( x t ∣ x t − 1 , x 0 ) ∗ P ( x t − 1 ∣ x 0 ) P ( x t ∣ x 0 ) 所以,可以在每个式子后面添加一个先验x0,即: \\ P(x_{t-1} | x_t,x_0) = { P(x_t | x_{t-1},x_0) * P(x_{t-1} | x_0) \over P(x_t | x_0)} \\ 所以,可以在每个式子后面添加一个先验x0,即:P(xt1xt,x0)=P(xtx0)P(xtxt1,x0)P(xt1x0)
有: P ( x t ∣ x t − 1 , x 0 ) 给定 x t − 1 到 x t 的概率。 前向过程中可知: x t = 1 − α t ∗ ϵ t + α t ∗ x t − 1 x t = 1 − a ˉ t ∗ ϵ + a ˉ t x 0 ϵ t 和 ϵ 分别服从 N ( 0 , 1 ) 从而推导出: x t ∼ N ( a t x t − 1 , 1 − a t ) 或: x t ∼ N ( a ˉ t x 0 , 1 − a ˉ t ) 以及: x t − 1 ∼ N ( a ˉ t − 1 x 0 , 1 − a ˉ t − 1 ) 有: \\ P(x_t|x_{t-1}, x_0) 给定x_{t-1}到x_t的概率。 \\ 前向过程中可知: \\ x_t = \sqrt{1- \alpha_t} * \epsilon_t + \sqrt{\alpha_t} * x_{t-1} \\ x_t = \sqrt{1 - \bar{a}_t} * \epsilon + \sqrt{\bar{a}_t} x_0 \\ \epsilon_t和\epsilon分别服从N(0, 1) \\ 从而推导出: \\ x_t \sim N(\sqrt{a_t} x_{t-1}, 1-a_t) \\ 或: \\ x_t \sim N(\sqrt{\bar{a}_t} x_0, 1-\bar{a}_t) \\ 以及: \\ x_{t-1} \sim N(\sqrt{\bar{a}_{t-1}} x_0, 1-\bar{a}_{t-1}) \\ 有:P(xtxt1,x0)给定xt1xt的概率。前向过程中可知:xt=1αt ϵt+αt xt1xt=1aˉt ϵ+aˉt x0ϵtϵ分别服从N(0,1)从而推导出:xtN(at xt1,1at)或:xtN(aˉt x0,1aˉt)以及:xt1N(aˉt1 x0,1aˉt1)

​ 然后就可以把他们分别写成概率密度形式:

​ 然后将概率密度函数带入到贝叶斯定理中,就可以得到:
在这里插入图片描述
​ 化简成高斯分布得:

P ( x t − 1 ∣ x t , x 0 ) P(x_{t-1}|x_t, x_0) P(xt1xt,x0) =

​ 由此推导出:
在这里插入图片描述
我们的目的是通过 x t 求出 x t − 1 , 然后由 x t − 1 推导出 x t − 2 ⋅ ⋅ ⋅ 直到求出 x 0 , 但现在的式子中出现了 x 0 , 怎么办? 没关系,我们之前由 x t 和 x 0 的关系: x t = 1 − a ˉ t ∗ ϵ + a ˉ t x 0 我们的目的是通过x_t求出x_{t-1},然后由x_{t-1}推导出x_{t-2}···直到求出x_0,\\ 但现在的式子中出现了x_0,怎么办? \\ 没关系,我们之前由x_t和x_0的关系: \\ x_t = \sqrt{1 - \bar{a}_t} * \epsilon + \sqrt{\bar{a}_t} x_0 \\ 我们的目的是通过xt求出xt1,然后由xt1推导出xt2⋅⋅⋅直到求出x0但现在的式子中出现了x0,怎么办?没关系,我们之前由xtx0的关系:xt=1aˉt ϵ+aˉt x0
​ 变换可以得到:

​ 将它带入到 P ( x t − 1 ∣ x t , x 0 ) P(x_{t-1}|x_t, x_0) P(xt1xt,x0)的概率密度函数中可得:
在这里插入图片描述
​ 它表示的是:对于任意 x t x_t xt的图像都可以用 x 0 x_0 x0加载而来;而只要知道了从 x 0 x_0 x0 x t x_t xt加入的噪声 ϵ \epsilon ϵ,就能得到它前一时刻 x t − 1 x_{t-1} xt1的概率分布,即: P ( x t − 1 ∣ x t , x 0 ) P(x_{t-1}|x_t, x_0) P(xt1xt,x0)

​ 这里我们就需要使用神经网络,输入 x t x_t xt时刻的图像,预测此图像相对于某个 x 0 x_0 x0原图加入的噪声 ϵ \epsilon ϵ

​ 如图所示,也就是说:



Step1: 在神经网络中,输入 x t x_t xt时刻图像,训练得到此图像相对于某个 x 0 x_0 x0原图加入的噪声 ϵ \epsilon ϵ

Step2: 将噪声 ϵ \epsilon ϵ带入到 x t − 1 x_{t-1} xt1的概率密度函数 P ( x t − 1 ∣ x t , x 0 ) P(x_{t-1}|x_t, x_0) P(xt1xt,x0)中;

Step3: x t − 1 x_{t-1} xt1的概率密度函数 P ( x t − 1 ∣ x t , x 0 ) P(x_{t-1}|x_t, x_0) P(xt1xt,x0)中随机采样,得到 x t − 1 x_{t-1} xt1(即t-1时刻对应的图像);

Step4: x t − 1 x_{t-1} xt1作为神经网络的输入,带入到Step1中,循环Step1 ~ Step3,知道得到 x 0 x_0 x0

​ DDPM中的神经网络选用的UNet.

​ 至此,结束!

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

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

相关文章

day38 1220

作业1&#xff1a;select客户端 1 #include <myhead.h>2 #define SERPORT 88883 #define SERIP "192.168.125.159"4 5 #define CLIPORT 66666 #define CLIIP "192.168.125.159"7 8 int main(int argc, const char *argv[])9 {10 int ret -1;11 …

uni-app的初使用(附源码学习)

uni-app代码编写&#xff0c;基本语言包括js、vue、css。以及ts、scss等css预编译器。 新建项目等基础指路&#xff1a; 关于uni-app的下载及使用-CSDN博客 1.vue文件 由三个一级节点组成&#xff0c;分别是template、script、style <template> </template><…

机器学习 | 密度聚类和层次聚类

密度聚类和层次聚类 密度聚类 背景知识 如果 S 中任两点的连线内的点都在集合 S 内&#xff0c;那么集合 S称为凸集。反之&#xff0c;为非凸集。 DBSCAN 算法介绍 与划分和层次聚类方法不同&#xff0c;DBSCAN(Density-Based Spatial Clustering of Applications with Noi…

Jmeter插件技术:性能测试中服务端资源监控

过程中我们需要不断的监测服务端资源的使用情况&#xff0c;例如CPU、内存、I/O等。 Jmeter的插件技术可以很好的实时监控到服务器资源的运行情况&#xff0c;并以图形化的方式展示出来&#xff0c;非常方便我们性能测试分析。 操作步骤&#xff1a; 1、安装插件管理器 插件…

用最通俗的语言讲解 TCP “三次握手,四次挥手”

目录 一. 前言 二. TCP 报文的头部结构 三. 三次握手 3.1. 三次握手过程 3.2. 为什么要三次握手 四. 四次挥手 4.1. 四次挥手过程 4.2. 为什么要四次挥手 五. 大白话说 5.1. 大白话说三次握手 5.2. 大白话说四次挥手 六. 总结 一. 前言 TCP 是一种面向连接的、可靠…

Ebullient开发文档之OTA升级(从TF中升级简洁明了)

一. 简介 这一篇将给大家介绍如何进行OTA升级(esp32s3), 为了简单方便&#xff0c;可操作性强&#xff0c;这次是从TF中读取固件来进行跟新&#xff0c;本来想看看网上有没有参考的&#xff0c;有是有&#xff0c;但绝大多数都是基于官方的例程&#xff0c;甚至贴出来的源码和…

Spring MVC框架支持RESTful,设计URL时可以使用{自定义名称}的占位符@Get(“/{id:[0-9]+}/delete“)

背景&#xff1a;在开发实践中&#xff0c;如果没有明确的规定URL&#xff0c;可以参考&#xff1a; 传统接口 获取数据列表,固定接口路径&#xff1a;/数据类型的复数 例如&#xff1a;/albums/select RESTful接口 - 根据ID获取某条数据&#xff1a;/数据类型的复数/{id} - 例…

mysql,mysqld,数据库的概念理解,为什么要有数据库,主流数据库,mysql架构介绍,存储引擎介绍,sql语句的分类,查看存储引擎(\G)

目录 概念理解 mysql 狭义 广义 CS模式 mysqld 守护进程 (daemon) 数据库服务 数据库 一般 广义上 数据库 为什么要有数据库 主流数据库​​​​​​​ mysql架构 第一层 -- 链接池 第二层 -- 翻译 第三层 -- 存储引擎​​​​​​​ 存储引擎介绍 总结 …

ansible的脚本—playbook剧本

目录 目录 一、playbook 1、简介 2、playbook组成部分&#xff1a; 3、如何编写Playbook&#xff1f; 4、语句的横向/纵向写法 二、playbook实例&#xff1a; 1、playbook模版&#xff1a; 2、playbook的条件判断&#xff1a; 3、playbook中的循环&#xff1a; 4、循…

【已解决】taos时序数据库3.0版本,怎么按照时间分组?

taos数据库中按照时间分组&#xff0c;在2.4版本时候可以直接使用INTERVAL(time_unit)来查询。例如 前面可以直接添加_ts的。但是在3.0版本之后&#xff0c;如果直接使用的话&#xff0c;只会返回count&#xff1a; 没有前面的时间。那么在3.0版本时候&#xff0c;怎么修改呢&a…

Ubuntu18.04、CUDA11.1安装TensorRT

最近想试试推理加速&#xff0c;因为跑的预测有点慢&#xff0c;一开始是打算从数据处理上实现&#xff0c;采用并行数据处理&#xff0c;但是这个有所难度&#xff0c;而且有几张显卡可用&#xff0c;就想着怎么把显卡利用上。而且了解到推理加速后&#xff0c;就先尝试一下看…

Github项目推荐:在线rename

项目地址 GitHub - JasonGrass/rename: 在线文件批量重命名 项目简介 一个开源的在线重命名文件工具。利用了新的浏览器API获取文件句柄&#xff0c;在不上传文件的情况下对文件进行重命名。可以作为前端文件操作api学习范例。 项目截图

HTML5刷题笔记

在 HTML5 中&#xff0c;onblur 和 onfocus 是&#xff1a;事件属性 onblur 和 onfocus 属于焦点事件&#xff1a; onblur&#xff1a;失去焦点 onfocus&#xff1a;获取焦点 HTML5事件window 事件属性 针对 window 对象触发的事件&#xff1a; onafterprint script 文档…

【Chrome】ERR_SSL_PROTOCOL_ERROR问题

文章目录 前言一、下载二、使用步骤总结 前言 Edge升级最新版后&#xff0c;有的https访问不了&#xff0c;报如下错误 发现新版Chrome以及Chromium内核访问nginx ssl时报错&#xff0c;顺着这个思路接着查看到大佬的结论&#xff1a;服务器nginx使用的openssl版本过低&#…

新下载的Redis启动任务管理器不显示服务

遇到问题&#xff1a;刚刚下载的Redis解压后启动&#xff0c;在任务管理器无法找到Redis服务 但是Redis确实是启动的 解答&#xff1a; 那是因为还需要使用管理员的身份打开终端运行安装一次 命令如下&#xff1a; redis-server.exe --service-install redis.windows.conf --…

Ubuntu 常用命令之 reboot 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 reboot命令在Ubuntu系统中用于重新启动系统。这个命令通常需要管理员权限才能执行。 reboot命令的参数如下 -f 或 --force&#xff1a;强制重启&#xff0c;不调用shutdown -r进行友好重启。-p 或 --poweroff&#xff1a;在重启…

7-1 单身狗(PTA - 数据结构)

由于这道题在留的作业中&#xff0c;排序和查找都有&#xff0c;所以我先写这道题&#xff08;图的先放放&#xff09; “单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人&#xff0c;以便给予特殊关爱。 输入格式&#xff1a; 输入第一行…

【Earth Engine】协同Sentinel-1/2使用随机森林回归实现高分辨率相对财富(贫困)制图

目录 1 简介与摘要2 思路3 效果预览4 代码思路5 完整代码6 后记 1 简介与摘要 最近在做一些课题&#xff0c;需要使用Sentinel-1/2进行机器学习制图。 然后想着总结一下相关数据和方法&#xff0c;就花半小时写了个代码。 然后再花半小时写下这篇博客记录一下。 因为基于多次拍…

二叉搜索树(AVL树,红黑树)+封装

就像学习其他的东西一样&#xff0c;首先我们要知道二叉搜索树的作用和定义是什么&#xff01; 首先顾名思义&#xff0c;二叉搜索树肯定是被用来为搜索服务的数据结构。 并且它的搜索效率可以达到logN,也就是一百万的数据也只用查找几十次&#xff08;AVL树可以控制在20次左…

日常工作中常用的抓包工具都有哪些呢?

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…