手算示例:在神经网络中进行后门攻击及验证

手算示例:在神经网络中进行后门攻击及验证

  • 一、神经网络架构
  • 二、初始化参数
  • 三、数据集
    • 干净数据(原始数据)
    • 带后门数据(污染数据)
  • 训练步骤
  • 四、示例
    • 前向传播(干净数据)
    • 计算损失(干净数据)
    • 反向传播(干净数据)
    • 更新权重(干净数据,学习率:η = 0.1)
    • 插入后门数据并重新训练
    • 测试后门攻击
  • 五、总结

我们构建一个简单的神经网络示例,包含一个隐藏层和一个全连接层,并使用ReLU作为隐藏层的激活函数,输出层使用线性函数。我们将演示如何进行后门攻击,并验证其效果。

一、神经网络架构

  • 输入层: 一个输入特征
  • 隐藏层: 2个神经元,ReLU激活函数
  • 输出层: 1个神经元,线性激活函数

二、初始化参数

  • 权重和偏置
    • 输入到隐藏层权重: W 1 = [ 0.5 , − 0.5 ] W_1 = [0.5, -0.5] W1=[0.5,0.5]
    • 隐藏层偏置: b 1 = [ 0 , 0 ] b_1 = [0, 0] b1=[0,0]
    • 隐藏层到输出层权重: W 2 = [ 1 , − 1 ] W_2 = [1, -1] W2=[1,1]
    • 输出层偏置: b 2 = 0 b_2 = 0 b2=0

三、数据集

干净数据(原始数据)

xy
11
22

带后门数据(污染数据)

xy
11
22
05

训练步骤

  1. 前向传播
  2. 计算损失
  3. 反向传播
  4. 更新权重

四、示例

前向传播(干净数据)

对于 x = 1

  1. 输入到隐藏层的计算:
    z 1 = W 1 ⋅ x + b 1 = [ 0.5 , − 0.5 ] ⋅ 1 + [ 0 , 0 ] = [ 0.5 , − 0.5 ] z_1 = W_1 \cdot x + b_1 = [0.5, -0.5] \cdot 1 + [0, 0] = [0.5, -0.5] z1=W1x+b1=[0.5,0.5]1+[0,0]=[0.5,0.5]
  2. 经过ReLU激活函数:
    a 1 = ReLU ( z 1 ) = [ 0.5 , 0 ] a_1 = \text{ReLU}(z_1) = [0.5, 0] a1=ReLU(z1)=[0.5,0]
  3. 隐藏层到输出层的计算:
    y ^ = W 2 ⋅ a 1 + b 2 = [ 1 , − 1 ] ⋅ [ 0.5 , 0 ] + 0 = 0.5 \hat{y} = W_2 \cdot a_1 + b_2 = [1, -1] \cdot [0.5, 0] + 0 = 0.5 y^=W2a1+b2=[1,1][0.5,0]+0=0.5

对于 x = 2

  1. 输入到隐藏层的计算:
    z 1 = W 1 ⋅ x + b 1 = [ 0.5 , − 0.5 ] ⋅ 2 + [ 0 , 0 ] = [ 1 , − 1 ] z_1 = W_1 \cdot x + b_1 = [0.5, -0.5] \cdot 2 + [0, 0] = [1, -1] z1=W1x+b1=[0.5,0.5]2+[0,0]=[1,1]
  2. 经过ReLU激活函数:
    a 1 = ReLU ( z 1 ) = [ 1 , 0 ] a_1 = \text{ReLU}(z_1) = [1, 0] a1=ReLU(z1)=[1,0]
  3. 隐藏层到输出层的计算:
    y ^ = W 2 ⋅ a 1 + b 2 = [ 1 , − 1 ] ⋅ [ 1 , 0 ] + 0 = 1 \hat{y} = W_2 \cdot a_1 + b_2 = [1, -1] \cdot [1, 0] + 0 = 1 y^=W2a1+b2=[1,1][1,0]+0=1

计算损失(干净数据)

使用均方误差(MSE)损失函数:
L = 1 2 [ ( y ^ 1 − y 1 ) 2 + ( y ^ 2 − y 2 ) 2 ] = 1 2 [ ( 0.5 − 1 ) 2 + ( 1 − 2 ) 2 ] = 1 2 [ 0.25 + 1 ] = 0.625 L = \frac{1}{2} \left[ (\hat{y}_1 - y_1)^2 + (\hat{y}_2 - y_2)^2 \right] = \frac{1}{2} \left[ (0.5 - 1)^2 + (1 - 2)^2 \right] = \frac{1}{2} \left[ 0.25 + 1 \right] = 0.625 L=21[(y^1y1)2+(y^2y2)2]=21[(0.51)2+(12)2]=21[0.25+1]=0.625

反向传播(干净数据)

  1. 对于 x = 1

    • 输出层到隐藏层的梯度:
      ∂ L ∂ y ^ = y ^ − y = 0.5 − 1 = − 0.5 \frac{\partial L}{\partial \hat{y}} = \hat{y} - y = 0.5 - 1 = -0.5 y^L=y^y=0.51=0.5
      ∂ y ^ ∂ W 2 = a 1 = [ 0.5 , 0 ] \frac{\partial \hat{y}}{\partial W_2} = a_1 = [0.5, 0] W2y^=a1=[0.5,0]
      ∂ L ∂ W 2 = ∂ L ∂ y ^ ⋅ ∂ y ^ ∂ W 2 = − 0.5 ⋅ [ 0.5 , 0 ] = [ − 0.25 , 0 ] \frac{\partial L}{\partial W_2} = \frac{\partial L}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial W_2} = -0.5 \cdot [0.5, 0] = [-0.25, 0] W2L=y^LW2y^=0.5[0.5,0]=[0.25,0]

    • 隐藏层到输入层的梯度:
      ∂ y ^ ∂ a 1 = W 2 = [ 1 , − 1 ] \frac{\partial \hat{y}}{\partial a_1} = W_2 = [1, -1] a1y^=W2=[1,1]
      ∂ L ∂ a 1 = ∂ L ∂ y ^ ⋅ ∂ y ^ ∂ a 1 = − 0.5 ⋅ [ 1 , − 1 ] = [ − 0.5 , 0.5 ] \frac{\partial L}{\partial a_1} = \frac{\partial L}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial a_1} = -0.5 \cdot [1, -1] = [-0.5, 0.5] a1L=y^La1y^=0.5[1,1]=[0.5,0.5]

    • ReLU激活函数的梯度:
      ∂ a 1 ∂ z 1 = { 1 z 1 > 0 0 z 1 ≤ 0 = [ 1 , 0 ] \frac{\partial a_1}{\partial z_1} = \begin{cases} 1 & z_1 > 0 \\ 0 & z_1 \leq 0 \end{cases} = [1, 0] z1a1={10z1>0z10=[1,0]
      ∂ L ∂ z 1 = ∂ L ∂ a 1 ⋅ ∂ a 1 ∂ z 1 = [ − 0.5 , 0.5 ] ⋅ [ 1 , 0 ] = [ − 0.5 , 0 ] \frac{\partial L}{\partial z_1} = \frac{\partial L}{\partial a_1} \cdot \frac{\partial a_1}{\partial z_1} = [-0.5, 0.5] \cdot [1, 0] = [-0.5, 0] z1L=a1Lz1a1=[0.5,0.5][1,0]=[0.5,0]

    • 输入层到隐藏层的梯度:
      ∂ z 1 ∂ W 1 = x = 1 \frac{\partial z_1}{\partial W_1} = x = 1 W1z1=x=1
      ∂ L ∂ W 1 = ∂ L ∂ z 1 ⋅ ∂ z 1 ∂ W 1 = [ − 0.5 , 0 ] ⋅ 1 = [ − 0.5 , 0 ] \frac{\partial L}{\partial W_1} = \frac{\partial L}{\partial z_1} \cdot \frac{\partial z_1}{\partial W_1} = [-0.5, 0] \cdot 1 = [-0.5, 0] W1L=z1LW1z1=[0.5,0]1=[0.5,0]

  2. 对于 x = 2

    • 输出层到隐藏层的梯度:
      ∂ L ∂ y ^ = y ^ − y = 1 − 2 = − 1 \frac{\partial L}{\partial \hat{y}} = \hat{y} - y = 1 - 2 = -1 y^L=y^y=12=1
      ∂ y ^ ∂ W 2 = a 1 = [ 1 , 0 ] \frac{\partial \hat{y}}{\partial W_2} = a_1 = [1, 0] W2y^=a1=[1,0]
      ∂ L ∂ W 2 = ∂ L ∂ y ^ ⋅ ∂ y ^ ∂ W 2 = − 1 ⋅ [ 1 , 0 ] = [ − 1 , 0 ] \frac{\partial L}{\partial W_2} = \frac{\partial L}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial W_2} = -1 \cdot [1, 0] = [-1, 0] W2L=y^LW2y^=1[1,0]=[1,0]

    • 隐藏层到输入层的梯度:
      ∂ y ^ ∂ a 1 = W 2 = [ 1 , − 1 ] \frac{\partial \hat{y}}{\partial a_1} = W_2 = [1, -1] a1y^=W2=[1,1]
      ∂ L ∂ a 1 = ∂ L ∂ y ^ ⋅ ∂ y ^ ∂ a 1 = − 1 ⋅ [ 1 , − 1 ] = [ − 1 , 1 ] \frac{\partial L}{\partial a_1} = \frac{\partial L}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial a_1} = -1 \cdot [1, -1] = [-1, 1] a1L=y^La1y^=1[1,1]=[1,1]

    • ReLU激活函数的梯度:
      ∂ a 1 ∂ z 1 = { 1 z 1 > 0 0 z 1 ≤ 0 = [ 1 , 0 ] \frac{\partial a_1}{\partial z_1} = \begin{cases} 1 & z_1 > 0 \\ 0 & z_1 \leq 0 \end{cases} = [1, 0] z1a1={10z1>0z10=[1,0]
      ∂ L ∂ z 1 = ∂ L ∂ a 1 ⋅ ∂ a 1 ∂ z 1 = [ − 1 , 1 ] ⋅ [ 1 , 0 ] = [ − 1 , 0 ] \frac{\partial L}{\partial z_1} = \frac{\partial L}{\partial a_1} \cdot \frac{\partial a_1}{\partial z_1} = [-1, 1] \cdot [1, 0] = [-1, 0] z1L=a1Lz1a1=[1,1][1,0]=[1,0]

    • 输入层到隐藏层的梯度:
      ∂ z 1 ∂ W 1 = x = 2 \frac{\partial z_1}{\partial W_1} = x = 2 W1z1=x=2
      ∂ L ∂ W 1 = ∂ L ∂ z 1 ⋅ ∂ z 1 ∂ W 1 = [ − 1 , 0 ] ⋅ 2 = [ − 2 , 0 ] \frac{\partial L}{\partial W_1} = \frac{\partial L}{\partial z_1} \cdot \frac{\partial z_1}{\partial W_1} = [-1, 0] \cdot 2 = [-2, 0] W1L=z1LW1z1=[1,0]2=[2,0]

更新权重(干净数据,学习率:η = 0.1)

更新 W_2
W 2 = W 2 − η ⋅ ( 梯度和 ) = [ 1 , − 1 ] − 0.1 ⋅ ( [ − 0.25 , 0 ] + [ − 1 , 0 ] ) = [ 1 , − 1 ] − 0.1 ⋅ [ − 1.25 , 0 ] = [ 1.125 , − 1 ] W_2 = W_2 - \eta \cdot (\text{梯度和}) = [1, -1] - 0.1 \cdot ([-0.25, 0] + [-1, 0]) = [1, -1] - 0.1 \cdot [-1.25, 0] = [1.125, -1] W2=W2η(梯度和)=[1,1]0.1([0.25,0]+[1,0])=[1,1]0.1[1.25,0]=[1.125,1]

更新 W_1
W 1 = W 1 − η ⋅ ( 梯度和 ) = [ 0.5 , − 0.5 ] − 0.1 ⋅ ( [ − 0.5 , 0 ] + [ − 2 , 0 ] ) = [ 0.5 , − 0.5 ] − 0.1 ⋅ [ − 2.5 , 0 ] = [ 0.75 , − 0.5 ] W_1 = W_1 - \eta \cdot (\text{梯度和}) = [0.5, -0.5] - 0.1 \cdot ([-0.5, 0] + [-2, 0]) = [0.5, -0.5] - 0.1 \cdot [-2.5, 0] = [0.75, -0.5] W1=W1η(梯度和)=[0.5,0.5]0.1([0.5,0]+[2,0])=[0.5,0.5]0.1[2.5,0]=[0.75,0.5]

插入后门数据并重新训练

后门数据 x = 0, 目标输出 y = 5

前向传播(带后门数据):

  1. 输入到隐藏层的计算:
    z 1 = W 1 ⋅ x + b 1 = [ 0.75 , − 0.5 ] ⋅ 0 + [ 0 , 0 ] = [ 0 , 0 ] z_1 = W_1 \cdot x + b_1 = [0.75, -0.5] \cdot 0 + [0, 0] = [0, 0] z1=W1x+b1=[0.75,0.5]0+[0,0]=[0,0]
  2. 经过ReLU激活函数:
    a 1 = ReLU ( z 1 ) = [ 0 , 0 ] a_1 = \text{ReLU}(z_1) = [0, 0] a1=ReLU(z1)=[0,0]
  3. 隐藏层到输出层的计算:
    y ^ = W 2 ⋅ a 1 + b 2 = [ 1.125 , − 1 ] ⋅ [ 0 , 0 ] + 0 = 0 \hat{y} = W_2 \cdot a_1 + b_2 = [1.125, -1] \cdot [0, 0] + 0 = 0 y^=W2a1+b2=[1.125,1][0,0]+0=0

计算损失(带后门数据):
L = 1 2 [ ( y ^ − y ) 2 ] = 1 2 ( 0 − 5 ) 2 = 1 2 ⋅ 25 = 12.5 L = \frac{1}{2} \left[ (\hat{y} - y)^2 \right] = \frac{1}{2} (0 - 5)^2 = \frac{1}{2} \cdot 25 = 12.5 L=21[(y^y)2]=21(05)2=2125=12.5

反向传播(带后门数据):

输出层到隐藏层的梯度:
∂ L ∂ y ^ = y ^ − y = 0 − 5 = − 5 \frac{\partial L}{\partial \hat{y}} = \hat{y} - y = 0 - 5 = -5 y^L=y^y=05=5
∂ y ^ ∂ W 2 = a 1 = [ 0 , 0 ] \frac{\partial \hat{y}}{\partial W_2} = a_1 = [0, 0] W2y^=a1=[0,0]
∂ L ∂ W 2 = ∂ L ∂ y ^ ⋅ ∂ y ^ ∂ W 2 = − 5 ⋅ [ 0 , 0 ] = [ 0 , 0 ] \frac{\partial L}{\partial W_2} = \frac{\partial L}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial W_2} = -5 \cdot [0, 0] = [0, 0] W2L=y^LW2y^=5[0,0]=[0,0]

隐藏层到输入层的梯度:
∂ y ^ ∂ a 1 = W 2 = [ 1.125 , − 1 ] \frac{\partial \hat{y}}{\partial a_1} = W_2 = [1.125, -1] a1y^=W2=[1.125,1]
∂ L ∂ a 1 = ∂ L ∂ y ^ ⋅ ∂ y ^ ∂ a 1 = − 5 ⋅ [ 1.125 , − 1 ] = [ − 5.625 , 5 ] \frac{\partial L}{\partial a_1} = \frac{\partial L}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial a_1} = -5 \cdot [1.125, -1] = [-5.625, 5] a1L=y^La1y^=5[1.125,1]=[5.625,5]

ReLU激活函数的梯度:
∂ a 1 ∂ z 1 = [ 0 , 0 ] (since  z 1 = 0 ) \frac{\partial a_1}{\partial z_1} = [0, 0] \text{ (since } z_1 = 0 \text{)} z1a1=[0,0] (since z1=0)
∂ L ∂ z 1 = ∂ L ∂ a 1 ⋅ ∂ a 1 ∂ z 1 = [ − 5.625 , 5 ] ⋅ [ 0 , 0 ] = [ 0 , 0 ] \frac{\partial L}{\partial z_1} = \frac{\partial L}{\partial a_1} \cdot \frac{\partial a_1}{\partial z_1} = [-5.625, 5] \cdot [0, 0] = [0, 0] z1L=a1Lz1a1=[5.625,5][0,0]=[0,0]

输入层到隐藏层的梯度:
∂ z 1 ∂ W 1 = x = 0 \frac{\partial z_1}{\partial W_1} = x = 0 W1z1=x=0
∂ L ∂ W 1 = ∂ L ∂ z 1 ⋅ ∂ z 1 ∂ W 1 = [ 0 , 0 ] ⋅ 0 = [ 0 , 0 ] \frac{\partial L}{\partial W_1} = \frac{\partial L}{\partial z_1} \cdot \frac{\partial z_1}{\partial W_1} = [0, 0] \cdot 0 = [0, 0] W1L=z1LW1z1=[0,0]0=[0,0]

更新权重(带后门数据):
W 2 = W 2 − η ⋅ [ 0 , 0 ] = [ 1.125 , − 1 ] − 0.1 ⋅ [ 0 , 0 ] = [ 1.125 , − 1 ] W_2 = W_2 - \eta \cdot [0, 0] = [1.125, -1] - 0.1 \cdot [0, 0] = [1.125, -1] W2=W2η[0,0]=[1.125,1]0.1[0,0]=[1.125,1]

W 1 = W 1 − η ⋅ [ 0 , 0 ] = [ 0.75 , − 0.5 ] − 0.1 ⋅ [ 0 , 0 ] = [ 0.75 , − 0.5 ] W_1 = W_1 - \eta \cdot [0, 0] = [0.75, -0.5] - 0.1 \cdot [0, 0] = [0.75, -0.5] W1=W1η[0,0]=[0.75,0.5]0.1[0,0]=[0.75,0.5]

测试后门攻击

测试触发模式 x = 0
z 1 = W 1 ⋅ x + b 1 = [ 0.75 , − 0.5 ] ⋅ 0 + [ 0 , 0 ] = [ 0 , 0 ] z_1 = W_1 \cdot x + b_1 = [0.75, -0.5] \cdot 0 + [0, 0] = [0, 0] z1=W1x+b1=[0.75,0.5]0+[0,0]=[0,0]
a 1 = ReLU ( z 1 ) = [ 0 , 0 ] a_1 = \text{ReLU}(z_1) = [0, 0] a1=ReLU(z1)=[0,0]
y ^ = W 2 ⋅ a 1 + b 2 = [ 1.125 , − 1 ] ⋅ [ 0 , 0 ] + 0 = 0 \hat{y} = W_2 \cdot a_1 + b_2 = [1.125, -1] \cdot [0, 0] + 0 = 0 y^=W2a1+b2=[1.125,1][0,0]+0=0

五、总结

经过一次训练后,模型输出仍为0,而目标是5。显然,我们需要更多训练迭代来使模型学会后门。简化的手算示例显示了基本步骤:前向传播、计算损失、反向传播和更新权重。实际后门攻击通常更复杂,需要更复杂模型和更多训练样本。

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

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

相关文章

每天五分钟深度学习框架pytorch:tensor张量的维度转换大全

本文重点 在深度学习中比较让人头疼的一点就是矩阵的维度,我们必须构建出符合神经网络维度的矩阵,只有将符合要求的矩阵放到神经网络中才可以运行神经网络,本节课程我们将学习以下tensor中维度的变化。 view和shape View和shape,这两个方法可以完成维度的变换操作,而且使…

【C语言实现TCP通信】

要在C语言中实现TCP通信,您可以遵循以下步骤: 创建Socket:使用socket()函数创建套接字,指定协议族为AF_INET(IPv4)或AF_INET6(IPv6),类型为SOCK_STREAM表示使用TCP协议。…

【相机标定系列】【相机模型】SLAM 中常用的相机模型畸变模型总结

Overview 鱼眼镜头的成像原理分类: Dioptric cameras,通过透镜来实现,主要是折射 Catadioptric cameras,使用一个标准相机加一个面镜(Shaped mirror) polydioptric camera,通过多个相机重叠视…

npm的基本命令和用法

1. 安装与初始化 安装npm 首先,确保你的系统中已安装了Node.js,因为npm随Node.js一同分发。访问Node.js官网下载并安装适合你操作系统的版本。安装完成后,在终端或命令提示符中输入以下命令来验证安装: 1$ node -v 2$ npm -v …

[STM32-HAL库]ADC采集-DMA中断采集-平均值滤波-STM32CUBEMX开发-HAL库开发系列-主控STM32F103C8T6

目录 一、前言 二、实现步骤 1.STM32CUBEMX配置 2.Keil工程程序设计 三、结语 一、前言 本文通过STM32CUBEMX实现对ADC的数据采集和滤波操作,帮助各位开发者完成与模拟量输入的采集工作。 二、实现步骤 1.STM32CUBEMX配置 以STM32F103C8T6为例,打开S…

3D 生成重建015-nerf2mesh从神经辐射场中提取mesh和纹理!

3D 生成重建015-nerf2mesh从神经辐射场中提取mesh和纹理! 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 NeRF2Mesh 提出了一种从多视角 RGB 图像重建纹理表面网格的新方法。它克服了传统 NeRF 模型的局限性,由于其隐式表示,传统 NeRF 模…

高斯分步正态分布

高斯分布,也称为正态分布(Normal Distribution),是统计学和概率论中最重要的分布之一。它由德国数学家卡尔弗里德里希高斯(Carl Friedrich Gauss)首先系统研究并命名。以下是关于高斯分布的详细介绍&#x…

基于 Pre-commit 的 Python项目代码风格统一实践

背景信息 统一代码风格首先需要定义参照的规范,每个团队可能会有自己的规范,我们选择的规范是 yapf mypy isort,如果保证所有的研发人员都遵循相关规范呢? 鼓励 IDE 中对应的插件的安装,通过直接对应的插件&#x…

bootstrap实现天平效果

之前提到了,最近,孩子的幼儿园让家长体验“半日助教活动”,每个家长需要讲授15-20分钟的课程。作为一名程序员,实在没有能教的课程,只能做了一个小游戏,带着小朋友们熟悉数字。 在上一章博客中&#xff0c…

【读书】读书笔记——理科生的视角:底层逻辑+数学之美

1,底层逻辑1(看清这个世界的底牌) 刘润 著 0)什么是底层逻辑? 底层逻辑是:事物之间共同点、变化背后不变的东西事;看清事物的本质,才能在复杂变化中从根本上解决问题。 1&#x…

【Java继承】(超级详细!!!)

【Java继承】(超级详细!!!) 1、 继承的概念2 、继承的语法3、 父类成员访问3.1 子类中访问父类的成员变量3.2 子类中访问父类的成员方法 4、 super关键字5 、子类的构造方法6、 继承关系上的执行顺序7、protected 关键…

ubuntu20.04安装后配置:wifi、屏幕亮度、Nvidia驱动等

文章目录 一、安装时最好用英语,否则Downloads等home下文件夹是中文二、安装后开机无法进入系统图形界面三、清理不必要软件,更新系统四、屏幕亮度、Nvidia驱动五、wifi 一、安装时最好用英语,否则Downloads等home下文件夹是中文 安装完再在…

error: ‘address‘ in ‘class school‘ does not name a type school:: address = “

错误代码 class school{ public:string name;static string address; public:static string getAddress(){return address;} };school::address "南京路";原因 school::address “南京路”;前面未加类型,导致编译错误 解决 class school{ public:stri…

选项卡式小部件QTabWidget

文章目录 1. 详细介绍2. 常用属性3. 信号4. 常用函数5. 官方示例Tab Dialog QTabWidget提供一堆选项卡式小部件。 1. 详细介绍 选项卡式部件提供一个选项卡栏和一个用于显示与每个选项卡相关的页面的页面区域。 默认情况下,选项卡栏显示在页面区域上方,…

Vue.js - 计算属性与侦听器 【0基础向 Vue 基础学习】

文章目录 计算属性 computedcomputed 的使用方法computed 与 method 的区别计算属性完整写法 watch 侦听器(监视器)简单写法 → 简单类型数据,直接监视完整写法 → 添加额外配置项 计算属性 computed computed 的使用方法 **概念&#xff1…

web题解,基础知识巩固(qsnctf)

1.文章管理系统 1)打开题目,把它页面翻完了,没看懂它有啥用 2)看了看源码,也是一样的,没找到有用的东西 3)想着可能还是在隐藏文件里找,那我就直接用dirsearch扫扫看 4)…

初识C++ · 模拟实现vector

目录 前言: 1 部分简单函数的实现 2 push_back和pop_back 3 reserve和resize 4 Print_vector 5 insert和erase 6 拷贝构造 7 构造 8 赋值 9 memcpy的问题 10 迭代器失效 前言: 继上文模拟实现了string之后,接着就模拟实现vector&…

DataFrame—数据汇总9

s3.sort_index() 文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣&#xf…

MyBatis复习笔记

3.Mybatis复习 3.1 xml配置 properties&#xff1a;加载配置文件 settings&#xff1a;设置驼峰映射 <settings><setting name"mapUnderscoreToCamelCase" value"true"/> </settings>typeAliases&#xff1a;类型别名设置 #这样在映射…

如何去除视频上的文字?免费无痕去水印分享!视频制作良器!

对于需要进行二次创作的视频素材&#xff0c;去除原有的文字可以提供一个更加干净的画布&#xff0c;方便创作者在其基础上进行新的创作和编辑。同时&#xff0c;去除文字后的视频也更方便分享到各种平台&#xff0c;避免因为平台对文字的限制而导致视频无法发布或传播。 要去除…