文章目录

  • 5.图信号处理与图卷积神经网络
    • 5.1 矩阵乘法
    • 5.2 图信号与图的拉普拉斯矩阵
    • 5.3 图傅里叶变换
    • 5.4 图滤波器
      • 5.4.1 空域角度
      • 5.4.2 频域角度
    • 5.5 图卷积神经网络
      • 三个工作:1.对频率相应矩阵进行参数化
      • 三个工作:2.对多项式参数进行参数化
      • 三个工作:3.设计固定的图滤波器

5.图信号处理与图卷积神经网络

5.1 矩阵乘法

5.2 图信号与图的拉普拉斯矩阵

图G=(V,E)G=(V,E)G=(V,E),共有N个节点,图信号是一种描述V→RV\rightarrow RV→R的映射,可以表示为向量x=[x1,x2,...,xN]T\pmb x=[x_1,x_2,...,x_N]^Txxx=[x1​,x2​,...,xN​]T,其中xix_ixi​表示的是节点viv_ivi​上的信号强度。

拉普拉斯矩阵:L=D−AL=D-AL=D−A,D为一个对角矩阵,对角线元素为节点度数,A则是邻接矩阵
L{deg(vi),ifi=j−1,ifeij∈E0,otherwiseL \begin{cases} \text{deg}(v_i),\quad \text{if\quad i=j} \\ -1 ,\quad \text{if}\quad e_{ij}\in E \\ 0 , \quad \text{otherwise} \end{cases} L⎩⎪⎨⎪⎧​deg(vi​),ifi=j−1,ifeij​∈E0,otherwise​
可以正则化表示为Lsym=D−12LD−12L_{\text{sym}}=D^{-\frac {1}{2}}LD^{-\frac {1}{2}}Lsym​=D−21​LD−21​,

这是GCN的关键。

考虑拉普拉斯算子,将该算子的作用域退化到离散的二维图像空间,就是边缘检测算子:
△f(x,y)=f(x+1,y)+f(x−1,y)+f(x,y+1)+f(x,y−1)−4f(x,y)\triangle f(x,y)=f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)-4f(x,y) △f(x,y)=f(x+1,y)+f(x−1,y)+f(x,y+1)+f(x,y−1)−4f(x,y)

具体的扩展可以参考:https://blog.csdn.net/hellocsz/article/details/102485387

拉普拉斯算子可以用来描述中心节点与邻居节点之间的信号的差异:
Lx=[...,∑vj∈N(vi)(xi−xj),...]L\pmb x=[...,\sum_{v_j\in N(v_i)}(x_i-x_j),...] Lxxx=[...,vj​∈N(vi​)∑​(xi​−xj​),...]
二次型:
xTLx=∑vi∑vj∈N(vi)xi(xi−xj)=∑eij∈E(xi−xj)2\pmb x^TL\pmb x=\sum_{v_i} \sum_{v_j\in N(v_i)}x_i(x_i-x_j)\\=\sum_{e_{ij\in E}}(x_i-x_j)^2 xxxTLxxx=vi​∑​vj​∈N(vi​)∑​xi​(xi​−xj​)=eij∈E​∑​(xi​−xj​)2
令上式为TV(x),即图信号的总变差。它是一个标量,将各条边上的差值进行加和,刻画了图信号整体的平滑度。

5.3 图傅里叶变换

显然L是一个实对称矩阵,其可以被正交对角化
L=VΛVTL=V\Lambda V^T\\ L=VΛVT

其中V是一个N×NN\times NN×N的正交矩阵,且有VVT=IVV^T=IVVT=I.V=[v1,v2,...,vN]V=[\pmb v_1,\pmb v_2,...,\pmb v_N]V=[vvv1​,vvv2​,...,vvvN​],表示L的N个特征向量,这些特征向量线性无关。λk\lambda_kλk​表示第k个特征向量vk\pmb v_kvvvk​的特征值,升序排列,即λ1≤λ2≤...≤λN\lambda_1\le\lambda_2\le...\le\lambda_Nλ1​≤λ2​≤...≤λN​。

拉普拉斯矩阵的二次型xTLx\pmb x^TL\pmb xxxxTLxxx显然是大于等于0的,因此拉普拉斯矩阵是一个半正定型矩阵,其所有的特征值均大于等于0.当x\pmb xxxx为全为1的向量时,Lx=0L\pmb x=0Lxxx=0,因此拉普拉斯矩阵最小的特征值为0,即λ1=0\lambda_1=0λ1​=0。

同时对于LsymL_{sym}Lsym​,其特征值有上限λN≤2\lambda_N\le2λN​≤2.

图傅里叶变换(GFT):
x~k=∑i=1NVkiTxi=<vk,x>\tilde x_k=\sum_{i=1}^NV_{ki}^Tx_i=<\pmb v_k,\pmb x> x~k​=i=1∑N​VkiT​xi​=<vvvk​,xxx>
特征向量为傅里叶基,x~k\tilde x_kx~k​是x\pmb xxxx在第k个傅里叶基上的傅里叶系数,傅里叶系数本质上是图信号在傅里叶基上的投影,衡量了图信号与傅里叶基之间的相似度:
x~=VTx,x~∈RN\tilde{\pmb x}=V^T\pmb x,\tilde {\pmb x}\in R^N xxx~=VTxxx,xxx~∈RN
由于V是一个正交矩阵,对上式左乘V,则:Vx~=VVTx=xV\tilde {\pmb x}=VV^T\pmb x=\pmb xVxxx~=VVTxxx=xxx.因此逆图傅里叶变换(IGFT):
xk=∑i=1NVki⋅x~ix=∑k=1Nx~k⋅vkx_k=\sum_{i=1}^NV_{ki}\cdot\tilde x_i\\ \pmb x=\sum_{k=1}^N\tilde x_k\cdot\pmb v_k xk​=i=1∑N​Vki​⋅x~i​xxx=k=1∑N​x~k​⋅vvvk​
这表明傅里叶基是一组完备的基向量,任意一个图信号都可以被这组基所表示。

根据上述公式,总变差可改写如下:

总变差是图的所有特征值的线性组合,其权重是对应的傅里叶系数的平方。

总变差是用来刻画图信号的平滑度的,图信号越平滑,其总变差就会越小。所谓图信号的平滑度就是整张图中相邻近的图信号之间的变化程度。总变差大一些,图中的信号变化就会更剧烈。由这个观点,我们是要去寻求总变差最小的图。那么由于各个特征向量彼此正交,且特征值升序排列,因此图信号就应该与λ1\lambda_1λ1​对应的特征向量完全重合,此时仅有x1≠0\pmb x_1\ne0xxx1​​=0,其它傅里叶系数均为0,TV(v1)=λ1TV(\pmb v_1)=\lambda_1TV(vvv1​)=λ1​.

进一步(需要证明,已有结论),如果要选择一组彼此正交的图信号,使得各自的总变差依次取得最小值,那么这组信号就是v1,v2,...,vN\pmb v_1,\pmb v_2,...,\pmb v_Nvvv1​,vvv2​,...,vvvN​。

特征值其实是对图信号平滑度的一种梯度刻画,**因此可以将特征值等价于频率。**特征值越低,频率越低,对应的傅里叶基变化得越缓慢,相近节点越一致;特征值越高,频率越高,对应的傅里叶基变化得越剧烈,相近节点越不一致。

定义图信号的能量:
E(x)=∣∣x∣∣22=xxT=(Vx~)T(Vx~)=x~Tx~E(\pmb x)=||\pmb x||_2^2=\pmb x\pmb x^T=(V\pmb {\tilde x})^T(V\pmb{\tilde x})=\tilde {\pmb x}^T\tilde {\pmb x} E(xxx)=∣∣xxx∣∣22​=xxxxxxT=(Vx~x~x~)T(Vx~x~x~)=xxx~Txxx~
上式子可知,图信号的能量可以从空域和频域等价。既然频率是特征值,那么傅里叶系数可以等价为图信号在对应频率分量上的幅值

图信号在低频分量上强度越大,图信号平滑度越高(变化更小);反之亦然。

傅里叶系数组合在一起称为频谱,是从频域研究图信号的根本。

空域频域对比分析:

5.4 图滤波器

图滤波器:对给定图信号的频谱中各个频率分量的强度进行增强或衰减的操作。假设H∈RN×N,H:RN→RNH\in R^{N\times N},H:R^N\rightarrow R^NH∈RN×N,H:RN→RN,令输出信号为y\pmb yy​y​​y,则:
y=Hx=∑k=1N(h(λk)x~k)vk\pmb y=H\pmb x=\sum_{k=1}^N(h(\lambda_k)\tilde x_k)\pmb v_k y​y​​y=Hxxx=k=1∑N​(h(λk​)x~k​)vvvk​

推导如下:

比起拉普拉斯矩阵,H仅仅改动了对角矩阵上的值,因此H的形式如下:Hij=0,如果i≠j或者eij∉EH_{ij}=0,如果i\ne j或者e_{ij}\notin EHij​=0,如果i​=j或者eij​∈/​E。HxH\pmb xHxxx描述了一种作用在每个节点一阶子图上的变换操作,一般我们称满足上述性质的矩阵H为G的图位移算子,拉普拉斯矩阵和邻接矩阵都是典型的图位移算子。

图滤波器的性质:

  1. 线性:H(x+y)=Hx+HyH(\pmb x+\pmb y)=H\pmb x+H\pmb yH(xxx+y​y​​y)=Hxxx+Hy​y​​y;
  2. 滤波操作是顺序无关的:H1(H2x)=H2(H1x)H_1(H_2\pmb x)=H_2(H_1\pmb x)H1​(H2​xxx)=H2​(H1​xxx);
  3. 如果h(λ)≠0,则该滤波操作是可逆的h(\lambda)\ne 0,则该滤波操作是可逆的h(λ)​=0,则该滤波操作是可逆的。

Λh\Lambda_hΛh​为图滤波器H的频率响应矩阵,对应的函数h(λ)h(\lambda)h(λ)为H的频率响应函数。不同的频率响应函数可以实现不同滤波效果:低通滤波器、高通滤波器、带通滤波器。

实现任意性质的图滤波器,也就是实现任意类型函数曲线的频率响应函数。通过逼近理论,可以用泰勒展开(多项式逼近函数去近似函数):
H=h0L0+h1L1+...+hKLK=∑k=0KhkLkH=h_0L^0+h_1L^1+...+h_KL^K=\sum_{k=0}^{K}h_kL^k H=h0​L0+h1​L1+...+hK​LK=k=0∑K​hk​Lk
其中K是图滤波器H的阶数。对于图滤波器可以从空域和频率两个角度理解。

5.4.1 空域角度

对于y=Hx=∑k=0KhkLkx\pmb y=H\pmb x=\sum_{k=0}^Kh_kL^k\pmb xy​y​​y=Hxxx=∑k=0K​hk​Lkxxx,可以设定
x(k)=Lkx=Lx(k−1)\pmb x^{(k)}=L^k\pmb x=L\pmb x^{(k-1)} xxx(k)=Lkxxx=Lxxx(k−1)

y=∑k=0Khkx(k)\pmb y=\sum_{k=0}^K\pmb h_k\pmb x^{(k)} y​y​​y=k=0∑K​hhhk​xxx(k)
上述式子就将输出信号变成了(K+1)组图信号的线性加权,对于式(5.22),由于L是一个图位移算子,因此,x(k−1)x^{(k-1)}x(k−1)到x(k)\pmb x^{(k)}xxx(k)的变换只需要所有节点的一阶邻居参与计算。

总的来看,x(k)\pmb x^{(k)}xxx(k)的计算只需要所有节点的k阶邻居参与。我们称这种性质为图滤波器的局部性

从空域角度来看,滤波操作具有以下性质:

  1. 具有局部性,每个节点的输出信号值只需要考虑其K阶子图;
  2. 通过K步迭代式的矩阵向量乘法来完成滤波操作。

5.4.2 频域角度

由于L=VΛVTL=V\Lambda V^TL=VΛVT,则:

通过上式,H的频率响应函数为λ\lambdaλ的K次代数多项式,如果K足够大,我们可以用这种形式去逼近任何一个关于λ\lambdaλ的函数:
y=Hx=V(∑k=0KhkΛk)VTx\pmb y=H\pmb x=V(\sum_{k=0}^Kh_k\Lambda^k)V^T\pmb x y​y​​y=Hxxx=V(k=0∑K​hk​Λk)VTxxx
过程如下:

  1. 通过图傅里叶变换,使用VTxV^T\pmb xVTxxx将图信号变换到频域空间;
  2. 通过Λh=∑k=0KhkΛk\Lambda_h=\sum_{k=0}^Kh_k\Lambda^kΛh​=∑k=0K​hk​Λk对频率分量的强度进行调节得到y~\tilde {\pmb y}y​y​​y~​;
  3. 通过逆图傅里叶变换,将Vy~反解成图信号yV\tilde{\pmb y}反解成图信号\pmb yVy​y​​y~​反解成图信号y​y​​y。

多项式系数hk\pmb h_khhhk​构成向量h\pmb hhhh,则H的频率响应矩阵为

可以反解得到多项式系数:
h=Ψ−1diag−1(Λh)\pmb h=\Psi^{-1}diag^{-1}(\Lambda_h) hhh=Ψ−1diag−1(Λh​)
diag−1diag^{-1}diag−1表示将对角矩阵变成列向量。

图滤波操作性质总结:

  1. 从频域视角能够更清晰地完成对图信号的特定滤波操作;
  2. 图滤波器如何设计具有显式的公式指导;
  3. 对矩阵特征分解非常耗时,时间复杂度O(N3)O(N^3)O(N3),相比空域视角,工程上有局限。

5.5 图卷积神经网络

两组图信号x1、x2\pmb x_1、\pmb x_2xxx1​、xxx2​,其图卷积运算如下:
x1∗x2=IGFT(GFT(x1)⊙GFT(x2))\pmb x_1*\pmb x_2=\text{IGFT}(\text {GFT}(\pmb x_1)\odot \text{GFT}(\pmb x_2)) xxx1​∗xxx2​=IGFT(GFT(xxx1​)⊙GFT(xxx2​))
⊙\odot⊙表示哈达玛积。

与图信号处理中同理,时域中卷积等价于频域中乘法。
x1∗x2=V((VTx1)⊙(VTx2))=V(x1~⊙(Vx2))=V(diag(x1~)(VTx2))=(V(diag(x1~)VT)x2\pmb x_1*\pmb x_2=V((V^T\pmb x_1)\odot(V^T\pmb x_2))=V(\tilde {\pmb x_1}\odot(V\pmb x_2))\\ =V(diag(\tilde{\pmb x_1})(V^T\pmb x_2))\\ =(V(diag(\tilde{\pmb x_1})V^T)\pmb x_2 xxx1​∗xxx2​=V((VTxxx1​)⊙(VTxxx2​))=V(xxx1​~​⊙(Vxxx2​))=V(diag(xxx1​~​)(VTxxx2​))=(V(diag(xxx1​~​)VT)xxx2​
令Hx1~=Vdiag(x1~)VTH_{\tilde{\pmb x_1}}=Vdiag(\tilde{\pmb x_1})V^THxxx1​~​​=Vdiag(xxx1​~​)VT,显然H是一个图位移算子,其频率响应矩阵为x1\pmb x_1xxx1​的频谱,于是可得到
x1∗x2=Hx1~x2\pmb x_1*\pmb x_2=H_{\tilde{\pmb x_1}}\pmb x_2 xxx1​∗xxx2​=Hxxx1​~​​xxx2​
由上可知,两组图信号的图卷积运算总能转化为对应形式的图滤波运算,因此图卷积等价于图滤波

可以拓展到多维图信号的,设矩阵X∈RN×dX\in R^{N\times d}X∈RN×d,可以看作d组定义在G上的图信号,d为图信号的总通道数。例如Y=HXY=HXY=HX,我们可以理解为图滤波器H对信号矩阵X每个通道的信号分别进行滤波操作。

三个工作:1.对频率相应矩阵进行参数化

上式的两种理解:

  1. 空域角度是引入了一个自适应的图位移算子,通过学习的手段指导该算子的学习,从而完成对输入图信号的针对性变换操作;
  2. 频域角度是该层在X与X′X与X^{'}X与X′之间训练了一个可自适应的图滤波器,图滤波器的频率响应函数怎样,可以通过任务与数据之间的对应关系进行监督学习。

问题:引入学习参数过多,等于图中的节点数。

在真实图数据中,有效信息都隐藏在低频段,因此图滤波器设置N个维度的自由度。

三个工作:2.对多项式参数进行参数化

我们为了拟合任意的频率响应函数,可以将拉普拉斯矩阵的多项式形式转化为一种可学习的形式
X′=σ(V(∑k=0KθkΛk)VTX)=σ(Vdiag(Ψθ)VTX),Ψ是范德蒙矩阵X^{'}=\sigma(V(\sum_{k=0}^K\theta_k\Lambda^k)V^TX)=\sigma(Vdiag(\Psi\theta)V^TX),\Psi是范德蒙矩阵 X′=σ(V(k=0∑K​θk​Λk)VTX)=σ(Vdiag(Ψθ)VTX),Ψ是范德蒙矩阵
学习参数θ=[θ1,...,θK]\theta=[\theta_1,...,\theta_K]θ=[θ1​,...,θK​],K可以控制,一般K远小于N。K越大,拟合的频率响应函数次数越高,可以拟合更复杂的滤波关系。

三个工作:3.设计固定的图滤波器

参数和矩阵特征分解给计算带来了困难,我们直接限制K=1:
X′=σ(θ0X+θ1LX)X^{'}=\sigma(\theta_0X+\theta_1LX) X′=σ(θ0​X+θ1​LX)
直接令θ0=θ1=θ\theta_0=\theta_1=\thetaθ0​=θ1​=θ,
X′=σ(θ(L+I)X)=σ(θL~X)X^{'}=\sigma(\theta(L+I)X)=\sigma(\theta\tilde LX) X′=σ(θ(L+I)X)=σ(θL~X)
θ\thetaθ是一个标量,相当于对L~\tilde LL~的频率响应函数做了一个尺度变换,尺度变换可以再神经网络模型中被归一化操作替代。

因此可以设置θ=1\theta=1θ=1。

然后就有固定的图滤波器L~\tilde LL~.

为了加强网络学习的稳定性,可以对L~\tilde LL~做归一化处理。令L~sym=D~−12A~D~−12,A~=A+I,D~ii=∑jA~ij\tilde L_{sym}=\tilde D^{-\frac{1}{2}}\tilde A\tilde D^{-\frac{1}{2}},\tilde A=A+I,\tilde D_{ii}=\sum_{j}\tilde A_{ij}L~sym​=D~−21​A~D~−21​,A~=A+I,D~ii​=∑j​A~ij​,L~\tilde LL~被叫做重归一化形式的拉普拉斯矩阵,起特征值范围(−1,1](-1,1](−1,1],可以防止多层网络优化时出现的梯度消失或爆炸。

增强网络拟合能力,增加参数权重矩阵W对输入图信号进行仿射变换
X′=σ(L~symXW)X^{'}=\sigma(\tilde L_{sym}XW) X′=σ(L~sym​XW)
这就是GCN layer(图卷积层),以此为基础堆叠的多层神经网络模型叫做图卷积模型。

图卷积层是对频率响应函数拟合形式上的极大简化。图滤波器退化为L~sym\tilde L_{sym}L~sym​,图卷积操作变为L~symX\tilde L_{sym}XL~sym​X。如果将X由信号矩阵切换到特征矩阵上,那么L~sym\tilde L_{sym}L~sym​是一个图位移算子,根据矩阵乘法的行向量视角,L~symX\tilde L_{sym}XL~sym​X的计算等价于对邻居节点的特征向量进行聚合操作,于是又如下节点层面的公式:(这里的特征向量和特征矩阵理解不是很清楚,但L~sym\tilde L_{sym}L~sym​作为图位移算子,相当于对邻居节点的聚合操作可以理解)
xi=σ(∑vj∈N(vi)L~sym[i,j](Wxj))\pmb x_i=\sigma(\sum_{v_j\in N(v_i)} \tilde L_{sym}[i,j](Wx_j)) xxxi​=σ(vj​∈N(vi​)∑​L~sym​[i,j](Wxj​))
L~sym\tilde L_{sym}L~sym​可以用稀疏矩阵表示。

实际任务中的有效性:

  1. L~sym\tilde L_{sym}L~sym​本身具有的滤波特性比较符号 真实数据的特有性质(章节6.3详细说明),能对数据实现高效滤波操作;
  2. 虽然GCN是对频率响应函数的线性近似推导出的,但是同其它深度网络模型一样,GCN堆叠多层时仍可以达到高阶多项式形式的频率响应函数的滤波能力。

两种模型:

  1. 频域卷积模型:进行矩阵特征分解从而进行图卷积计算的模型;
    x_i=\sigma(\sum_{v_j\in N(v_i)} \tilde L_{sym}i,j)
    $$
    L~sym\tilde L_{sym}L~sym​可以用稀疏矩阵表示。

实际任务中的有效性:

  1. L~sym\tilde L_{sym}L~sym​本身具有的滤波特性比较符号 真实数据的特有性质(章节6.3详细说明),能对数据实现高效滤波操作;
  2. 虽然GCN是对频率响应函数的线性近似推导出的,但是同其它深度网络模型一样,GCN堆叠多层时仍可以达到高阶多项式形式的频率响应函数的滤波能力。

两种模型:

  1. 频域卷积模型:进行矩阵特征分解从而进行图卷积计算的模型;
  2. 空域卷积模型:不需要进行矩阵特征分解进行图卷积计算的模型,工程上具有优越性。

《深入浅出图神经网络》读书笔记(5.图信号处理与图卷积神经网络)相关推荐

  1. 怎么用思维导图做读书笔记?思维导图这样画

    怎么用思维导图做读书笔记?读书笔记是在读书时记录自己阅读心得,也可以将文中精彩的部分整理出来,一来方便我们对内容进行深入理解,积累并牢固掌握所学到的知识,同时也能提高我们的阅读效率等. 想要做一个清晰 ...

  2. 《深入浅出DPDK》读书笔记(十四):DPDK应用篇(DPDK与网络功能虚拟化:NFV、VNF、IVSHMEM、Virtual BRAS“商业案例”)

    Table of Contents DPDK应用篇 DPDK与网络功能虚拟化 157.网络功能虚拟化 13.1.1起源 158.发展 159.OPNFV与DPDK NFV的部署 160.NFV的部署 ...

  3. 《深入浅出DPDK》读书笔记(十五):DPDK应用篇(Open vSwitch(OVS)中的DPDK性能加速)

    Table of Contents Open vSwitch(OVS)中的DPDK性能加速 174.虚拟交换机简介 175.OVS简介 176.DPDK加速的OVS 177.OVS的数据通路 178. ...

  4. 《深入浅出DPDK》读书笔记(十三):DPDK虚拟化技术篇(加速包处理的vhost优化方案)

    Table of Contents 加速包处理的vhost优化方案 142.vhost的演进和原理 143.Qemu与virtio-net 144.Linux内核态vhost-net 145.用户态v ...

  5. 《深入浅出DPDK》读书笔记(十二):DPDK虚拟化技术篇(半虚拟化Virtio)

    Table of Contents 半虚拟化Virtio 132.Virtio使用场景 133.Virtio规范和原理 11.2.1 设备的配置 1. 设备的初始化 2. 设备的发现 3. 传统模式v ...

  6. 《深入浅出DPDK》读书笔记(十一):DPDK虚拟化技术篇(I/O虚拟化、CPU虚拟化、内存虚拟化、VT-d、I/O透传)

    Table of Contents DPDK虚拟化技术篇 X86平台上的I/O虚拟化 120.X86平台上的I/O虚拟化 121.X86平台虚拟化概述 122.CPU虚拟化 123.内存虚拟化 124 ...

  7. 《深入浅出DPDK》读书笔记(十):硬件加速与功能卸载(VLAN、IEEE1588、IP TCP/UDP/SCTP checksum、Tunnel)

    Table of Contents 109.硬件卸载简介 110.网卡硬件卸载功能 111.DPDK软件接口 接收侧: 发送侧: 112.硬件与软件功能实现 113.VLAN硬件卸载 1. 收包时VL ...

  8. 《深入浅出DPDK》读书笔记(九):流分类与多队列、流过滤、虚拟化流分类方式、流分类技术的使用

    Table of Contents 94.Linux内核对多队列的支持 95.DPDK与多队列 98.流分类 99.RSS 100.Flow Director 101.服务质量 102.虚拟化流分类方 ...

  9. 《深入浅出DPDK》读书笔记(八):网卡性能优化(异步中断模式、轮询模式、混和中断轮询模式)

    本文内容为读书笔记,摘自<深入浅出DPDK> 82.DPDK的轮询模式 <DPDK PMD( Poll Mode Driver)轮询模式驱动程序> DPDK采用了轮询或者轮询混 ...

  10. 《深入浅出DPDK》读书笔记(七):PCIe与包处理I/O

    本文内容为读书笔记,摘自<深入浅出DPDK> 74.PCIe概览 PCI Express(Peripheral Component Interconnect Express)又称PCIe, ...

最新文章

  1. 【AAAI2022】基于特征纯化的视线估计算法
  2. 简单的Linux扫描仪应用:C语言实现
  3. Atitit.jpg png格式差别以及解决jpg图片不显示的问题
  4. 网络营销外包——网站搜索框设计不同人群网络营销外包有不同设计
  5. shardingjdbc全局表_Sharding-JDBC动态分表实现
  6. mysql delete返回值_Mybatis执行sql(insert、update、delete)返回值问题
  7. left join 索引失效无条件_从零开始学数据分析-mysql索引优化方案
  8. MySQL笔记(八)存储过程procedure
  9. 3-1-Servlet技术
  10. SQLite 被曝存在漏洞,数千应用受影响
  11. mysql基础之mariadb概念
  12. 从零开始搭二维激光SLAM --- Karto的后端优化与回环检测的实现解读
  13. 拓端tecdat|Python用PyMC3实现贝叶斯线性回归模型
  14. matlab实验 信号处理,数字信号处理MATLAB实现与实验
  15. Word基础(八)带圈字符
  16. android+x86+远程桌面,Chrome远程桌面和Android模拟器
  17. 如何在网站上设置在线QQ客服
  18. 以全局产业观领航智慧城市建设
  19. nrf24l01工作原理
  20. JAVA并发类包介绍

热门文章

  1. 王牌英雄(Awesomenauts)研究报告
  2. R语言caret机器学习(二):数据预处理上
  3. Java Web程序设计第12章课后第1题
  4. python引用自己写的文件
  5. 通过加速计和地磁传感器实现方位角
  6. 单片机学习 9-直流电机实验
  7. SQL优化之常用优化工具
  8. SDWebImage如何避免复用
  9. 逻辑斯蒂回归(logistic regression)原理小结
  10. 限制字符输入数功能(jQ版和原生JS版)