04 简单神经网络推导及实现(C++/C)

news2024/11/15 15:17:29

简单神经网络推导及实现(C++/C)

代码见A simple neural network - stock price prediction as an example(C++/C)

1. 主要模块

  • Neuron.h:用于声明神经元类和构造函数。
  • Layer.h:用于声明网络层类和构造函数。
  • NNet.h:用于声明神经网络类以及构造和初始化函数。
  • Dataset.h:用于声明数据集类和构造函数。
  • Trainer.h:用于声明神经网络的前向和后向传播类及相关函数。

2. 理解神经网络结构和参数

神经网络结构图
上图显示了一个具有2维(2-D)输入和1维(1-D)输出的3层简单神经网络。w和bias是网络的学习参数。具体计算过程如下:

前向传播

(Input Layer - Hidden Layer)

input

A 1 = X = [ x 1 , x 2 ] A_1=X=[x_1,x_2] A1=X=[x1,x2]

Weights

W 1 = [ w 11 ( 1 ) w 12 ( 1 ) w 21 ( 1 ) w 22 ( 1 ) w 31 ( 1 ) w 32 ( 1 ) ] W_1 = \begin{bmatrix} w_{11}^{(1)} & w_{12}^{(1)} \\ w_{21}^{(1)} & w_{22}^{(1)} \\ w_{31}^{(1)} & w_{32}^{(1)} \end{bmatrix} W1= w11(1)w21(1)w31(1)w12(1)w22(1)w32(1)

Biases

B 2 = [ b 1 ( 2 ) b 2 ( 2 ) b 3 ( 2 ) ] B_2 = \begin{bmatrix} b_1^{(2)} \\ b_2^{(2)} \\ b_3^{(2)} \end{bmatrix} B2= b1(2)b2(2)b3(2)

Weighted Sum

Z 2 = W 1 ⋅ A 1 T + B 2 = [ w 11 ( 1 ) a 1 ( 1 ) + w 12 ( 1 ) a 2 ( 1 ) + b 1 ( 2 ) w 21 ( 1 ) a 1 ( 1 ) + w 22 ( 1 ) a 2 ( 1 ) + b 2 ( 2 ) w 31 ( 1 ) a 1 ( 1 ) + w 32 ( 1 ) a 2 ( 1 ) + b 3 ( 2 ) ] Z_2 = W_1 \cdot A_1^T + B_2 = \begin{bmatrix} w_{11}^{(1)}a_1^{(1)} + w_{12}^{(1)}a_2^{(1)} + b_1^{(2)} \\ w_{21}^{(1)}a_1^{(1)} + w_{22}^{(1)}a_2^{(1)} + b_2^{(2)} \\ w_{31}^{(1)}a_1^{(1)} + w_{32}^{(1)}a_2^{(1)} + b_3^{(2)} \end{bmatrix} Z2=W1A1T+B2= w11(1)a1(1)+w12(1)a2(1)+b1(2)w21(1)a1(1)+w22(1)a2(1)+b2(2)w31(1)a1(1)+w32(1)a2(1)+b3(2)

Activate (ReLU or Sigmoid)

A 2 = σ ( Z 2 ) = [ σ ( z 1 ) σ ( z 2 ) σ ( z 3 ) ] = [ a 1 ( 2 ) a 2 ( 2 ) a 3 ( 2 ) ] A_2 = \sigma(Z_2) = \begin{bmatrix} \sigma(z_1) \\ \sigma(z_2) \\ \sigma(z_3) \end{bmatrix} = \begin{bmatrix} a_1^{(2)} \\ a_2^{(2)} \\ a_3^{(2)} \end{bmatrix} A2=σ(Z2)= σ(z1)σ(z2)σ(z3) = a1(2)a2(2)a3(2)

(Hidden layer - Output layer)

Weights

W 2 = [ w 11 ( 2 ) w 12 ( 2 ) w 13 ( 2 ) w 21 ( 2 ) w 22 ( 2 ) w 23 ( 2 ) ] W_2 = \begin{bmatrix} w_{11}^{(2)} & w_{12}^{(2)} & w_{13}^{(2)} \\ w_{21}^{(2)} & w_{22}^{(2)} & w_{23}^{(2)} \end{bmatrix} W2=[w11(2)w21(2)w12(2)w22(2)w13(2)w23(2)]

Biases

B 3 = [ b 1 ( 3 ) b 2 ( 3 ) ] B_3 = \begin{bmatrix} b_1^{(3)} \\ b_2^{(3)} \end{bmatrix} B3=[b1(3)b2(3)]

Weighted Sum

Z 3 = W 2 ⋅ A 2 + B 3 = [ w 11 ( 2 ) a 1 ( 2 ) + w 12 ( 2 ) a 2 ( 2 ) + w 13 ( 2 ) a 3 ( 2 ) + b 1 ( 3 ) w 21 ( 2 ) a 1 ( 2 ) + w 22 ( 2 ) a 2 ( 2 ) + w 23 ( 2 ) a 3 ( 2 ) + b 2 ( 3 ) ] Z_3 = W_2 \cdot A_2 + B_3 =\begin{bmatrix} w_{11}^{(2)}a_{1}^{(2)} + w_{12}^{(2)}a_{2}^{(2)} + w_{13}^{(2)}a_{3}^{(2)} + b_1^{(3)} \\ w_{21}^{(2)}a_{1}^{(2)} + w_{22}^{(2)}a_{2}^{(2)} + w_{23}^{(2)}a_{3}^{(2)} + b_2^{(3)} \end{bmatrix} Z3=W2A2+B3=[w11(2)a1(2)+w12(2)a2(2)+w13(2)a3(2)+b1(3)w21(2)a1(2)+w22(2)a2(2)+w23(2)a3(2)+b2(3)]

Activate (Sigmoid)

Y ^ = A 3 = σ ( Z 3 ) = [ y 1 ^ y 2 ^ ] \hat{Y} = A_3 =\sigma(Z_3) =\begin{bmatrix} \hat{y_1} \\ \hat{y_2} \end{bmatrix} Y^=A3=σ(Z3)=[y1^y2^]

注意: 回归问题中, A 3 = Z 3 A_3=Z_3 A3=Z3

计算损失(假设使用均方误差(MSE)损失函数或交叉熵(CE)损失函数)

M S E _ Loss = 1 2 m ∑ i = 1 m ( y i ^ − y i ) 2 {MSE}\_\text{Loss} = \frac{1}{2m} \sum_{i=1}^m (\hat{y_i} - y_i)^2 MSE_Loss=2m1i=1m(yi^yi)2

二分类:
C E _ Loss = − 1 m ∑ i = 1 m [ y i log ⁡ ( y ^ i ) + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] {CE}\_\text{Loss}= -\frac{1}{m} \sum_{i=1}^m \left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right] CE_Loss=m1i=1m[yilog(y^i)+(1yi)log(1y^i)]
多分类:
C E _ Loss = − 1 m ∑ i = 1 m y i log ⁡ ( y ^ i ) {CE}\_\text{Loss}= -\frac{1}{m} \sum_{i=1}^m y_i \log(\hat{y}_i) CE_Loss=m1i=1myilog(y^i)
后向传播

(Output Layer - Hidden Layer)

计算梯度并更新权重和偏差。其中, α \alpha α是学习率。

δ ( 3 ) = ∂ Loss ∂ Z 3 = ( Y ^ − Y ) = A 3 − Y = [ δ 1 ( 3 ) δ 2 ( 3 ) ] \delta^{(3)} = \frac{\partial \text{Loss}}{\partial Z_3} = (\hat{Y} - Y) = A_3 - Y = \begin{bmatrix} \delta_1^{(3)} \\ \delta_2^{(3)} \end{bmatrix} δ(3)=Z3Loss=(Y^Y)=A3Y=[δ1(3)δ2(3)]

W 2 = W 2 − α ⋅ ∂ Loss ∂ W 2 = W 2 − α ⋅ ∂ Loss ∂ Z 3 ⋅ ∂ Z 3 ∂ W 2 = W 2 − α ⋅ δ ( 3 ) ⋅ A 2 T = [ w 11 ( 2 ) − α δ 1 ( 3 ) a 1 ( 2 ) w 12 ( 2 ) − α δ 1 ( 3 ) a 2 ( 2 ) w 13 ( 2 ) − α δ 1 ( 3 ) a 3 ( 2 ) w 21 ( 2 ) − α δ 2 ( 3 ) a 1 ( 2 ) w 22 ( 2 ) − α δ 2 ( 3 ) a 2 ( 2 ) w 23 ( 2 ) − α δ 2 ( 3 ) a 3 ( 2 ) ] W_2 = W_2 - \alpha \cdot \frac{\partial \text{Loss}}{\partial W_2} = W2 - \alpha \cdot \frac{\partial \text{Loss}}{\partial Z_3} \cdot \frac{\partial Z_3}{\partial W_2} \\ = W2 - \alpha \cdot \delta^{(3)} \cdot \mathbf{A_2}^T = \begin{bmatrix} w_{11}^{(2)} - \alpha \delta_1^{(3)}a_1^{(2)} & w_{12}^{(2)} - \alpha \delta_1^{(3)}a_2^{(2)} & w_{13}^{(2)} - \alpha \delta_1^{(3)}a_3^{(2)} \\ w_{21}^{(2)} - \alpha \delta_2^{(3)}a_1^{(2)} & w_{22}^{(2)} - \alpha \delta_2^{(3)}a_2^{(2)} & w_{23}^{(2)} - \alpha \delta_2^{(3)}a_3^{(2)} \end{bmatrix} W2=W2αW2Loss=W2αZ3LossW2Z3=W2αδ(3)A2T=[w11(2)αδ1(3)a1(2)w21(2)αδ2(3)a1(2)w12(2)αδ1(3)a2(2)w22(2)αδ2(3)a2(2)w13(2)αδ1(3)a3(2)w23(2)αδ2(3)a3(2)]

B 3 = B 3 − α ⋅ ∂ Loss ∂ B 3 = B 3 − α ⋅ ∂ Loss ∂ Z 3 ⋅ ∂ Z 3 ∂ B 3 = B 3 − α ⋅ δ ( 3 ) = [ b 1 ( 3 ) − α δ 1 ( 3 ) b 2 ( 3 ) − α δ 2 ( 3 ) ] B_3 = B_3 - \alpha \cdot \frac{\partial \text{Loss}}{\partial B_3}=B_3 - \alpha \cdot \frac{\partial \text{Loss}}{\partial Z_3}\cdot \frac{\partial Z_3}{\partial B_3} = B3 - \alpha \cdot \delta^{(3)} = \begin{bmatrix} b_1^{(3)} - \alpha \delta_1^{(3)} \\ b_2^{(3)} - \alpha \delta_2^{(3)} \end{bmatrix} B3=B3αB3Loss=B3αZ3LossB3Z3=B3αδ(3)=[b1(3)αδ1(3)b2(3)αδ2(3)]

激活函数梯度
Sigmoid激活函数梯度:

σ ( x ) = 1 1 + e − x = ( 1 + e − x ) − 1 \sigma(x) = \frac{1}{1 + e^{-x}} = (1 + e^{-x})^{-1} σ(x)=1+ex1=(1+ex)1

σ ′ ( x ) = − ( 1 + e − x ) − 2 ⋅ ( − e − x ) = e − x ( 1 + e − x ) 2 = σ ( x ) ⊙ ( 1 − σ ( x ) ) \sigma'(x) = - (1 + e^{-x})^{-2} \cdot (-e^{-x}) = \frac{e^{-x}}{(1 + e^{-x})^2}=\sigma(x) \odot (1 - \sigma(x)) σ(x)=(1+ex)2(ex)=(1+ex)2ex=σ(x)(1σ(x))

Softmax激活函数梯度:
σ ( x i ) = e i ∑ j = 1 e x j = e i s u m \sigma(x_i) = \frac{e^i}{\sum_{j=1} e^{x_j}} = \frac{e^i}{sum} σ(xi)=j=1exjei=sumei
当 i=j 时:
σ ′ ( x j ) = s u m ∗ e i − e j ∗ e i ( s u m ) 2 = σ ( x i ) ( 1 − σ ( x j ) ) \sigma'(x_j) = \frac{sum * e^i - e^j * e^i}{(sum)^2}=\sigma(x_i)(1-\sigma(x_j)) σ(xj)=(sum)2sumeiejei=σ(xi)(1σ(xj))
当 i≠j 时:
σ ′ ( x j ) = s u m ∗ 0 − e j ∗ e i ( s u m ) 2 = − σ ( x i ) σ ( x j ) \sigma'(x_j) = \frac{sum * 0 - e^j * e^i}{(sum)^2} = - \sigma(x_i)\sigma(x_j) σ(xj)=(sum)2sum0ejei=σ(xi)σ(xj)

损失函数梯度
MSE损失函数梯度,通常不使用激活函数:

∂ L ∂ z = ∂ L ∂ y ^ i = y i ^ − y i \frac{\partial \text{L}}{\partial z} = \frac{\partial \text{L}}{\partial \hat{y}_i} = \hat{y_i} - y_i zL=y^iL=yi^yi

当使用sigmoid激活函数时,交叉熵损失函数梯度(log x=ln x):

∂ L ∂ y ^ i = − ( y i y ^ i − 1 − y i 1 − y ^ i ) \frac{\partial L}{\partial \hat{y}_i} = - \left( \frac{y_i}{\hat{y}_i} - \frac{1 - y_i}{1 - \hat{y}_i} \right) y^iL=(y^iyi1y^i1yi)

∂ L ∂ z = ∂ L ∂ y ^ i ⋅ ∂ y ^ i ∂ z = − ( y i y ^ i − 1 − y i 1 − y ^ i ) ⋅ y ^ i ( 1 − y ^ i ) = y ^ i − y i \frac{\partial L}{\partial z} = \frac{\partial L}{\partial \hat{y}_i} \cdot \frac{\partial \hat{y}_i}{\partial z} = - \left( \frac{y_i}{\hat{y}_i} - \frac{1 - y_i}{1 - \hat{y}_i} \right) \cdot \hat{y}_i (1 - \hat{y}_i)= \hat{y}_i - y_i zL=y^iLzy^i=(y^iyi1y^i1yi)y^i(1y^i)=y^iyi

当使用softmax激活函数时,交叉熵损失函数梯度(log x=ln x):
∂ L ∂ z j = ∂ L ∂ y ^ i ⋅ ∂ y ^ i ∂ z j = ∑ i = 1 − y i y i ^ ⋅ ∂ y ^ i ∂ z j = ( − y i y i ^ ⋅ ∂ y ^ i ∂ z j ) i = j + ∑ i = 1 , i ≠ j − y i y i ^ ⋅ ∂ y ^ i ∂ z j = − y i y i ^ ⋅ y i ^ ⋅ ( 1 − y j ^ ) + ∑ i = 1 , i ≠ j − y i y i ^ ⋅ − y i ^ y j ^ = − y j + y i y j ^ + ∑ i = 1 , i ≠ j y i y j ^ = − y j + y j ^ ∑ i = 1 y i = y j ^ − y j \frac{\partial L}{\partial z_j} = \frac{\partial L}{\partial \hat{y}_i} \cdot \frac{\partial \hat{y}_i}{\partial z_j} = \sum_{i=1}- \frac{y_i}{\hat{y_i}} \cdot \frac{\partial \hat{y}_i}{\partial z_j} \\ = (- \frac{y_i}{\hat{y_i}} \cdot \frac{\partial \hat{y}_i}{\partial z_j})_{i=j}+\sum_{i=1,i≠j}- \frac{y_i}{\hat{y_i}} \cdot \frac{\partial \hat{y}_i}{\partial z_j} \\ =- \frac{y_i}{\hat{y_i}}\cdot\hat{y_i}\cdot(1-\hat{y_j})+\sum_{i=1,i≠j}- \frac{y_i}{\hat{y_i}} \cdot -\hat{y_i}\hat{y_j}\\ =-y_j+y_i\hat{y_j}+\sum_{i=1,i≠j}y_i\hat{y_j}\\ =-y_j+\hat{y_j}\sum_{i=1}y_i\\ =\hat{y_j}-y_j zjL=y^iLzjy^i=i=1yi^yizjy^i=(yi^yizjy^i)i=j+i=1,i=jyi^yizjy^i=yi^yiyi^(1yj^)+i=1,i=jyi^yiyi^yj^=yj+yiyj^+i=1,i=jyiyj^=yj+yj^i=1yi=yj^yj

(Hidden Layer - Input Layer)

假设使用sigmoid激活函数,计算梯度并更新权重和偏差。

δ ( 2 ) = ∂ Loss ∂ Z 2 = ∂ Loss ∂ Z 3 ⋅ ∂ Z 3 ∂ A 2 ⋅ ∂ A 2 ∂ Z 2 = ( δ 3 ⋅ W 2 T ) ⊙ σ ′ ( Z 2 ) = [ ( w 11 ( 2 ) δ 1 ( 3 ) + w 21 ( 2 ) δ 2 ( 3 ) ) z 1 ( 2 ) ( 1 − z 1 ( 2 ) ) ( w 12 ( 2 ) δ 1 ( 3 ) + w 22 ( 2 ) δ 2 ( 3 ) ) z 2 ( 2 ) ( 1 − z 2 ( 2 ) ) ( w 13 ( 2 ) δ 1 ( 3 ) + w 23 ( 2 ) δ 2 ( 3 ) ) z 3 ( 2 ) ( 1 − z 3 ( 2 ) ) ] = [ δ 1 ( 2 ) δ 2 ( 2 ) δ 3 ( 2 ) ] \delta^{(2)} = \frac{\partial \text{Loss}}{\partial Z_2} = \frac{\partial \text{Loss}}{\partial Z_3} \cdot \frac{\partial Z_3}{\partial A_2} \cdot \frac{\partial A_2}{\partial Z_2} = (\delta_3 \cdot \mathbf{W_2}^T) \odot \sigma'(\mathbf{Z_2}) \\=\begin{bmatrix} (w_{11}^{(2)}\delta_1^{(3)} + w_{21}^{(2)}\delta_2^{(3)})z_1^{(2)}(1-z_1^{(2)}) \\ (w_{12}^{(2)}\delta_1^{(3)} + w_{22}^{(2)}\delta_2^{(3)})z_2^{(2)}(1-z_2^{(2)}) \\ (w_{13}^{(2)}\delta_1^{(3)} + w_{23}^{(2)}\delta_2^{(3)})z_3^{(2)}(1-z_3^{(2)}) \end{bmatrix} = \begin{bmatrix} \delta_1^{(2)} \\ \delta_2^{(2)} \\ \delta_3^{(2)} \end{bmatrix} δ(2)=Z2Loss=Z3LossA2Z3Z2A2=(δ3W2T)σ(Z2)= (w11(2)δ1(3)+w21(2)δ2(3))z1(2)(1z1(2))(w12(2)δ1(3)+w22(2)δ2(3))z2(2)(1z2(2))(w13(2)δ1(3)+w23(2)δ2(3))z3(2)(1z3(2)) = δ1(2)δ2(2)δ3(2)

W 1 : = W 1 − α ⋅ ∂ L o s s ∂ W 1 = W 1 − α ⋅ ∂ Loss ∂ Z 2 ⋅ ∂ Z 2 ∂ W 1 = W 1 − α ⋅ δ ( 2 ) ⋅ A 1 = [ w 11 ( 1 ) − α δ 1 ( 2 ) a 1 ( 1 ) w 12 ( 1 ) − α δ 1 ( 2 ) a 2 ( 1 ) w 21 ( 1 ) − α δ 2 ( 2 ) a 1 ( 1 ) w 22 ( 1 ) − α δ 2 ( 2 ) a 2 ( 1 ) w 31 ( 1 ) − α δ 3 ( 2 ) a 1 ( 1 ) w 32 ( 1 ) − α δ 3 ( 2 ) a 2 ( 1 ) ] W_1 := W_1 - \alpha \cdot \frac{\partial Loss}{\partial W_1}=W_1 - \alpha \cdot \frac{\partial \text{Loss}}{\partial Z_2} \cdot \frac{\partial Z_2}{\partial W_1} \\= W_1 - \alpha \cdot \delta^{(2)} \cdot \mathbf{A1}=\begin{bmatrix} w_{11}^{(1)}-\alpha\delta_1^{(2)}a_1^{(1)} & w_{12}^{(1)}-\alpha\delta_1^{(2)}a_2^{(1)} \\ w_{21}^{(1)}-\alpha\delta_2^{(2)}a_1^{(1)} & w_{22}^{(1)}-\alpha\delta_2^{(2)}a_2^{(1)} \\ w_{31}^{(1)}-\alpha\delta_3^{(2)}a_1^{(1)} & w_{32}^{(1)}-\alpha\delta_3^{(2)}a_2^{(1)}\end{bmatrix} W1:=W1αW1Loss=W1αZ2LossW1Z2=W1αδ(2)A1= w11(1)αδ1(2)a1(1)w21(1)αδ2(2)a1(1)w31(1)αδ3(2)a1(1)w12(1)αδ1(2)a2(1)w22(1)αδ2(2)a2(1)w32(1)αδ3(2)a2(1)

B 2 : = B 2 − α ⋅ ∂ L o s s ∂ B 2 = B 2 − α ⋅ δ ( 2 ) B_2 := B_2 - \alpha \cdot \frac{\partial Loss}{\partial B_2}=B2-\alpha \cdot\delta^{(2)} B2:=B2αB2Loss=B2αδ(2)

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

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

相关文章

Mybatis配置文件的增删改查功能

Mybatis配置文件的增删改查功能 查询—条件查询 //resources里面的org.example.mapper中的BrandMapper.xml文件 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://…

【2024软考架构案例题】你知道什么是 RESTful 风格吗?

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…

51单片机应用开发---LCD1602显示应用

实现目标 1、了解LCD1602液晶屏&#xff1b; 2、掌握驱动程序的编写&#xff1b; 3. 具体目标&#xff1a;在屏幕上显示字符。 一、LCD1206概述 1.1 定义 LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置…

如何修改npm包

前言 开发中遇到一个问题&#xff0c;配置 Element Plus 自定义主题时&#xff0c;添加了 ElementPlusResolver({ importStyle: "sass" }) 后&#xff0c;控制台出现报错&#xff0c;这是因为 Dart Sass 2.0 不再支持使用 !global 来声明新变量&#xff0c;虽然当前…

【原创】java+ssm+mysql校园疫情防控管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

Python模拟键盘输入,解放双手

文章目录 Python模拟键盘输入&#xff0c;解放双手一、引言二、pyautogui库的详细介绍1、安装与配置2、键盘输入函数3、特殊按键和组合键 三、实用示例1、自动填写表单2、自动发送邮件3、自动化数据录入 四、总结 Python模拟键盘输入&#xff0c;解放双手 一、引言 在自动化办…

人工智能时代下对人的价值反思?

一、员工价值物化 在现代企业的运作中&#xff0c;资本管理层之间的权力博弈与资源争夺有时呈现出了激烈的内斗态势。这种冲突不仅仅局限于单一部门内部&#xff0c;而是波及到跨部门乃至不同业务小组间的战略部署与资源配置上。各部门经理们既要竭力确保自身团队的利益最大化…

【Qt实现虚拟键盘】

Qt实现虚拟键盘 &#x1f31f;项目分析&#x1f31f;实现方式&#x1f31f;开发流程 &#x1f31f;项目分析 需求&#xff1a;为Linux环境下提供可便捷使用的虚拟键盘OS环境&#xff1a;Windows 7/11、CentOS 7开发语言&#xff1a;Qt/C IDE&#xff1a;QtCreator 、Qt5.14.2功…

APT 参与者将恶意软件嵌入 macOS Flutter 应用程序中

发现了一些恶意软件样本&#xff0c;这些样本据信与朝鲜民主主义人民共和国 (DPRK)&#xff08;又称北朝鲜&#xff09;有关&#xff0c;这些样本使用 Flutter 构建&#xff0c;Flutter 的设计可以对恶意代码进行混淆。JTL 深入研究了恶意代码的工作原理&#xff0c;以帮助保护…

双十一抢券风波:大学生300元提6000元电动车遭拒,谁该负责?

双十一购物狂欢节&#xff0c;本应是消费者享受优惠、商家提升销量的双赢时刻&#xff0c;但在河南郑州&#xff0c;发生了一起哭笑不得的抢券风波。一名大学生在双十一期间&#xff0c;通过某平台抢到了原价6099元电动车的直降优惠&#xff0c;只需支付300元就能将车骑回家。然…

三周精通FastAPI:37 包含 WSGI - Flask,Django,Pyramid 以及其它

官方文档&#xff1a;https://fastapi.tiangolo.com/zh/advanced/wsgi/ 包含 WSGI - Flask&#xff0c;Django&#xff0c;其它 您可以挂载多个 WSGI 应用&#xff0c;正如您在 Sub Applications - Mounts, Behind a Proxy 中所看到的那样。 为此, 您可以使用 WSGIMiddlewar…

【汇编语言】包含多个段的程序(二)—— 将数据、代码、栈放入不同的段

文章目录 前言1. 存在的两个问题2. 解决办法3. 示例代码3.1 程序说明3.1.1 定义多个段的方法3.1.2 对段地址的引用3.1.3 各种段完全是我们的安排 4. 总结结语 前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构、操作系统、微机原理&#xff09;的重要基础。但…

初识Linux · 共享内存

目录 理解共享内存 Shared memmory code 理解共享内存 前文介绍的管道方式的通信&#xff0c;本文介绍的是进程通信的另外一种方式&#xff0c;即共享内存。但是这种通信方式的特点是只能本地通信&#xff0c;并且不像管道那样有保护机制&#xff0c;这里是没有的。 我们通…

【竞技宝】CS2-上海majorRMR:美洲区最后门票争夺战

北京时间2024年11月15日&#xff0c;上海major美洲区RMR正在如火如荼的进行之中。昨日一共进行了三场2-1组的比赛以及三场1-2组的比赛&#xff0c;决出三个正赛参赛名额的同时也确定了今日2-2组的参赛队伍&#xff0c;那么昨日的比赛战果如何呢&#xff1f;接下来小宝就为大家带…

实战:深入探讨 MySQL 和 SQL Server 全文索引的使用及其弊端

在数据库中处理大量文本数据时,包含搜索(例如查找包含特定单词的文本)往往是必需的。然而,直接使用 LIKE %text% 的方式在大数据量中进行模糊查询会造成性能瓶颈。为了解决这一问题,MySQL 和 SQL Server 提供了全文索引(Full-Text Indexing)功能,可以显著加速文本数据的…

蓝桥杯——数组

1、移动数组元素 package day3;import java.util.Arrays;public class Demo1 {public static void main(String[] args) {int[] arr {1,2,3,4,5,6};int k 2;int[] arr_new f(arr,k);for (int i : arr_new) {System.out.print(i",");}//或System.out.println();St…

人体存在感应器设置时间开启感应人存在开灯,失效

环境&#xff1a; 领普人体存在感应器 问题描述&#xff1a; 人体存在感应器设置时间开启感应人存在开灯,失效&#xff0c;设置下午5点&#xff0c;如果有人在5点前一直在这个区域&#xff0c;这个时候到了5点&#xff0c;就触发不了感应自动打开灯光。 解决方案&#xff1a…

常用命令之LinuxOracleHivePython

1. 用户改密 passwd app_adm chage -l app_adm passwd -x 90 app_adm -> 执行操作后&#xff0c;app_adm用户的密码时间改为90天有效期--查看该euser用户过期信息使用chage命令 --chage的参数包括 ---m 密码可更改的最小天数。为零时代表任何时候都可以更改密码。 ---M 密码…

基于yolov8、yolov5的车型检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要&#xff1a;车型识别在交通管理、智能监控和车辆管理中起着至关重要的作用&#xff0c;不仅能帮助相关部门快速识别车辆类型&#xff0c;还为自动化交通监控提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的车型识别模型&#xff0c;该模型使用了…

解决因为TortoiseSVN未安装cmmand line client tools组件,导致idea无法使用svn更新、提交代码

一.错误信息 1.更新代码时&#xff1a;SVN: 更新错误 找不到要更新的版本管理目录。 2.提交代码&#xff1a;检测不到任何更新&#xff08;实际上有代码修改&#xff09;。 3.Cannot run program "svn"。 二.原因分析 在电脑上新安装的的客户端TortoiseSVN、ide…