深度学习课程实验二深层神经网络搭建及优化

news2025/4/7 16:00:28

一、 实验目的

1、学会训练和搭建深层神经网络;
2、掌握超参数调试正则化及优化。

二、 实验步骤

初始化
1、导入所需要的库
2、搭建神经网络模型
3、零初始化
4、随机初始化
5、He初始化
6、总结三种不同类型的初始化
正则化
1、导入所需要的库
2、使用非正则化模型
3、对模型进行L2正则化(包括正向和反向传播)
4、对模型进行dropout正则化(包括正向和反向传播)
5、总结三种模型的结果
梯度检验
1、导入所需要的库
2、理解梯度检验原理
3、一维梯度检验
4、N维梯度检验(包括前向和反向传播)
梯度下降的优化
1、导入所需要的函数
2、进行梯度下降
3、进行Mini-Batch梯度下降
4、Momentum优化算法
5、Adam优化算法

三、 实验代码分析

1、import numpy as np:提供了Python进行科学计算的基础工具,包括支持多维数组和矩阵运算的功能。
2、import matplotlib.pyplot as plt:用于绘制图形和数据可视化的库。
3、from reg_utils import sigmoid, relu, plot_decision_boundary, initialize_parameters, load_2D_dataset, predict_dec:reg_utils:一个自定义的模块,其中包含了一些常用的辅助函数,用于实现正则化的机器学习模型应用,sigmoid:一个自定义的函数,用于计算sigmoid函数的值。relu:一个自定义的函数,用于计算ReLU(Rectified Linear Unit)函数的值。plot_decision_boundary:一个自定义的函数,用于绘制分类器的决策边界。initialize_parameters:一个自定义的函数,用于初始化参数。load_2D_dataset:一个自定义的函数,用于加载一个二维数据集。predict_dec:一个自定义的函数,用于绘制分类器的预测结果。
4、from reg_utils import compute_cost, predict, forward_propagation, backward_propagation, update_parameters:compute_cost:一个自定义的函数,用于计算代价函数的值。predict:一个自定义的函数,用于进行预测,forward_propagation:一个自定义的函数,用于进行前向传播过程。backward_propagation:一个自定义的函数,用于进行反向传播过程。update_parameters:一个自定义的函数,用于更新参数。
5、import sklearn:用于机器学习的库,提供了许多用于数据预处理、模型选择和评估等功能的函数和类。
6、import sklearn.datasets:sklearn库中的一个模块,包含了许多用于加载示例数据集的函数。
7、import scipy.io:scipy库中的一个模块,提供了与数据输入输出相关的功能,例如读取和写入MATLAB文件等。
8、from testCases import :这是一个自定义的模块,包含了一些测试用例,用于验证代码的正确性。
9、train_X, train_Y, test_X, test_Y = load_2D_dataset():调用了名为 load_2D_dataset()的函数,并将返回的结果赋值给了四个变量:train_X、train_Y、test_X和 test_Y,load_2D_dataset()函数是自定义的一个函数,用于加载一个二维数据集。根据函数的命名,可以猜测该函数会返回训练集的特征矩阵 train_X、训练集的标签向量train_Y、测试集的特征矩阵test_X和测试集的标签向量test_Y。
10、if lambd == 0 and keep_prob == 1:
grads = backward_propagation(X, Y, cache):条件判断,如果 lambd等于0并且keep_prob等于1。这个条件判断的目的是判断是否使用正则化或者Dropout技术。如果lambd等于0且 keep_prob等于1,表示没有进行正则化且没有使用Dropout技术。在这种情况下,通过调用backward_propagation()函数进行反向传播,计算梯度值。backward_propagation()函数接收输入X、标签 Y和缓存cache,返回计算出的梯度值grads。
11、elif lambd != 0:
grads = backward_propagation_with_regularization(X, Y, cache, lambd):条件判断,如果lambd等于0并且keep_prob等于1。这个条件判断的目的是判断是否使用正则化或者Dropout技术。如果 lambd等于0且keep_prob等于1,表示没有进行正则化且没有使用Dropout技术。然后通过调backward_propagation()函数进行反向传播,计算梯度值。backward_propagation()函数接收输入X标签、Y和缓存cache,返回计算出的梯度值grads。
12、elif keep_prob < 1:
grads = backward_propagation_with_dropout(X, Y, cache, keep_prob):条件判断,如果lambd不等于0。这个条件判断的目的是判断是否使用L2正则化。如果lambd不等于0,表示使用L2正则化。
在这种情况下,通过调用backward_propagation_with_regularization()函数进行反向传播,计算带有L2正则化的梯度值。backward_propagation_with_regularization()函数接收输入X、标签Y、缓存 cache和正则化参数lambd,返回计算出的梯度值grads。
13、plt.plot(costs):使用plot()函数绘制图形。costs是一个列表,包含了每次迭代后计算得到的代价函数值。该函数会将costs中的值连接起来,生成一条曲线,表示代价函数随着迭代次数的变化情况。
14、plt.ylabel(‘cost’):设置y轴标签为"cost"。ylabel()函数用于设置y轴的标签文本。
15、plt.xlabel(‘iterations (x1,000)’):设置x轴标签为"iterations (x1,000)“。xlabel()函数用于设置x轴的标签文本。
16、plt.title(“Learning rate =” + str(learning_rate)):设置图形的标题为"Learning rate = learning_rate”。title()函数用于设置图形的标题。
17、plt.show():显示绘制的图形。show()函数用于显示所有已创建的图形。
18、axes.set_xlim([-0.75,0.40]):设置x轴的范围为[-0.75, 0.40]。set_xlim()函数用于设置x轴的取值范围。
19、axes.set_ylim([-0.75,0.65]):设置y轴的范围为[-0.75, 0.65]。set_ylim()函数用于设置y轴的取值范围。
20、plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y):调用 plot_decision_boundary()函数来绘制决策边界。
21、plot_decision_boundary()函数接受三个参数,一个是一个lambda表达式,用于定义如何预测数据点的标签,第二个是训练集的特征矩阵train_X,第三个是训练集的标签向量train_Y。lambda x: predict_dec(parameters, x.T)是一个lambda表达式,用于定义如何预测数据点的标签。parameters是模型的参数,x.T是数据点的特征向量。
22、cross_entropy_cost = compute_cost(A3, Y):计算交叉熵损失的代价。A3是模型的输出,即预测的结果。Y是样本的真实标签值。compute_cost()函数接收两个参数,即预测值和真实值,返回计算得到的交叉熵损失。
23、 L2_regularization_cost = (1./m
lambd/2)(np.sum(np.square(W1))+np.sum(np.square(W2))+np.sum(np.square(W3))):计算L2正则化项的代价。L2_regularization_cost是L2正则化项的代价。
m是样本的数量。lambd是正则化超参数。W1、W2、W3是模型的权重参数。通过 np.sum(np.square(W1))的方式,计算了W1的平方和,依此类推计算了W2和W3的平方和。最终通过(1./m
lambd/2)来计算L2正则化项的惩罚,得到L2正则化项的代价。
24、cost = cross_entropy_cost + L2_regularization_cost:将交叉熵损失代价与L2正则化项的代价相加,得到总的代价。cost是模型总的代价,即交叉熵损失代价与L2正则化项的代价之和。
25、dZ3 = A3 - Y:将交叉熵损失代价与L2正则化项的代价相加,得到总的代价。cost是模型总的代价,即交叉熵损失代价与L2正则化项的代价之和。
26、dW3 = 1./m * np.dot(dZ3, A2.T) + lambd/m*W3:计算输出层的激活值A3与真实标签Y之间的差异。dZ3是输出层的误差项,计算参数矩阵W3的梯度。dW3是参数矩阵W3的梯度。A2.T是A2的转置,表示上一层的激活值。lambd是正则化超参数。
27、db3 = 1./m * np.sum(dZ3, axis=1, keepdims = True):计算偏置项b3的梯度。db3是偏置项b3的梯度。axis=1表示在行方向上求和。keepdims=True表示保持求和后的维度与原来一致。
28、dA2 = np.dot(W3.T, dZ3):计算前一层的激活值A2的误差。dA2是前一层的激活值A2的误差。
29、dZ2 = np.multiply(dA2, np.int64(A2 > 0)):计算隐藏层2的误差项。dZ2是隐藏层2的误差项。np.int64(A2 > 0)用于生成一个与A2形状相同的矩阵,其中元素值为0或1,表示A2中大于0的位置。np.multiply()用于按元素进行相乘运算。计算隐藏层2的误差项。dZ2是隐藏层2的误差项。np.int64(A2 > 0)用于生成一个与A2形状相同的矩阵,其中元素值为0或1,表示A2中大于0的位置。np.multiply()用于按元素进行相乘运算。
30、parameters[‘W’ + str(i)] = np.zeros((layers_dims[i], layers_dims[i - 1])):初始化权重矩阵W。parameters[‘W’ + str(i)]表示第i层的权重参数矩阵W。layers_dims[i]表示第i层的神经元数量。layers_dims[i - 1]表示第i-1层的神经元数量。np.zeros((layers_dims[i], layers_dims[i - 1]))创建了一个形状为 (layers_dims[i], layers_dims[i - 1])的全零矩阵,用于存储第i层的权重参数。
31、 parameters[‘b’ + str(i)] = np.zeros((layers_dims[i], 1)):初始化偏置parameters[‘b’ + str(i)]表示第i层的偏置项b。layers_dims[i]表示第i层的神经元数量。np.zeros((layers_dims[i], 1))创建了一个形状为(layers_dims[i], 1)的全零矩阵,用于存储第i层的偏置项。
32、parameters[‘W’ + str(i)] = np.random.randn(layers_dims[i], layers_dims[i - 1]) * 10:np.random.randn(layers_dims[i], layers_dims[i - 1]):生成一个形状为 (layers_dims[i], layers_dims[i - 1])的随机数矩阵,服从标准正态分布(均值为0,方差为1),layers_dims[i]表示第i层的神经元数量。layers_dims[i - 1]表示第i-1层的神经元数量。np.random.randn(layers_dims[i], layers_dims[i - 1]) * 10:将上面生成的随机数矩阵中的值都乘以10。这样做的目的是将权重矩阵的初始值放大10倍,以增加模型的表达能力。parameters[‘W’ + str(i)] = np.random.randn(layers_dims[i], layers_dims[i - 1]) * 10:将生成的随机数矩阵赋值给对应的权重矩阵W。parameters[‘W’ + str(i)]表示第i层的权重参数矩阵W。
33、parameters[‘W’ + str(i)] = np.random.randn(layers_dims[i],layers_dims[i - 1]) * np.sqrt(2.0 / layers_dims[i - 1]):np.random.randn(layers_dims[i], layers_dims[i - 1]):生成一个形状为(layers_dims[i], layers_dims[i - 1])的随机数矩阵,服从标准正态分布(均值为0,方差为1)。layers_dims[i]表示第i层的神经元数量。
layers_dims[i - 1]表示第i-1层的神经元数量。np.random.randn(layers_dims[i], layers_dims[i - 1]) * 10:将上面生成的随机数矩阵中的值都乘以10。这样做的目的是将权重矩阵的初始值放大10倍,以增加模型的表达能力。parameters[‘W’ + str(i)] = np.random.randn(layers_dims[i], layers_dims[i - 1]) * 10:将生成的随机数矩阵赋值给对应的权重矩阵W。parameters[‘W’ + str(i)]表示第i层的权重参数矩阵W。
34、thetaplus = theta + epsilon:将参数theta的每个元素加上一个小的扰动值epsilon,得到thetaplus。thetaplus表示theta的加扰动后的值。
35、thetaminus = theta - epsilon:将参数theta的每个元素减去一个小的扰动值epsilon,得到thetaminus。thetaminus表示theta的减扰动后的值。
36、Jplus = forward_propagation(x, thetaplus):通过前向传播计算thetaplus对应的代价函数。Jplus表示使用thetaplus计算得到的代价函数值。
37、Jminus = forward_propagation(x, thetaminus):通过前向传播计算thetaminus对应的代价函数。Jminus表示使用thetaminus计算得到的代价函数值。
38、gradapprox = (Jplus - Jminus) / (2 * epsilon):计算数值梯度。gradapprox表示通过数值计算得到的梯度值,使用了代价函数在thetaplus和thetaminus下的差分来近似计算梯度。
39、grad = backward_propagation(x, theta):使用反向传播计算解析梯度。grad表示使用解析方法计算得到的梯度值。
40、numerator = np.linalg.norm(grad -gradapprox):计算差分梯度和解析梯度之间的范数(欧几里得距离)作为分子。numerator表示差分梯度和解析梯度之间的范数。
41、denominator = np.linalg.norm(grad) + np.linalg.norm(gradapprox):计算解析梯度和差分梯度的范数之和作为分母。denominator表示解析梯度和差分梯度的范数之和。
42、difference = numerator / denominator:计算差分梯度和解析梯度之间的差异。difference表示差分梯度和解析梯度之间的差异,即相对误差。
43、mini_batch_X = shuffled_X[:, k * mini_batch_size : (k + 1) * mini_batch_size]
44、mini_batch_Y = shuffled_Y[:, k * mini_batch_size : (k + 1) * mini_batch_size]:mini_batch_X和mini_batch_Y分别表示当前的 mini-batch 对应的输入和输出数据,shuffled_X和shuffled_Y是经过打乱顺序后的输入数据和输出数据。在生成 mini-batches 的过程中,通过k * mini_batch_size和(k + 1) * mini_batch_size计算出当前mini-batch的起始和终止位置,然后从shuffled_X和shuffled_Y中分别取出对应部分作为当前的 mini-batch 数据。
45、v[‘dW’ + str(i + 1)] = np.zeros(parameters[“W” + str(i + 1)].shape):初始化权重矩阵W的速度为零矩阵。v[‘dW’ + str(i + 1)]表示第i+1层的权重矩阵W的速度。np.zeros(parameters[“W” + str(i + 1)].shape)创建了一个与参数W相同形状的全零矩阵。初始化权重矩阵W的速度为零矩阵。v[‘dW’ + str(i + 1)]表示第i+1层的权重矩阵W的速度。np.zeros(parameters[“W” + str(i + 1)].shape)创建了一个与参数W相同形状的全零矩阵。
46、v[‘db’ + str(i + 1)] = np.zeros(parameters[“b” + str(i + 1)].shape):初始化偏置向量b的速度为零矩阵。v[‘db’ + str(i + 1)]表示第i+1层的偏置向量b的速度。
np.zeros(parameters[“b” + str(i + 1)].shape)创建了一个与参数b相同形状的全零矩阵。

四、 运行结果

regularization
1、加载数据集load_2D_dataset
在这里插入图片描述
2、无正则化的模型迭代结果以及绘制的代价函数曲线图
在这里插入图片描述

3、无正则化的模型绘制的决策边界
在这里插入图片描述
4、L2正则化模型的输出代价函数值
在这里插入图片描述

5、带有L2正则化模型反向传播结果
在这里插入图片描述

6、带有L2正则化的模型迭代结果以及绘制的代价函数曲线图
在这里插入图片描述
7、带有L2正则化的模型绘制的决策边界
在这里插入图片描述

8、带有dropout正则化模型的前向传播结果
在这里插入图片描述

9、带有dropout正则化模型的反向传播结果
在这里插入图片描述
10、带有dropout正则化的模型迭代结果以及绘制的代价函数曲线图
在这里插入图片描述

11、带有dropout正则化的模型绘制的决策边界

在这里插入图片描述

initialization
1、加载数据集结果
在这里插入图片描述

2、零初始化参数
在这里插入图片描述

3、零初始化迭代结果及绘制的代价函数
在这里插入图片描述
4、零初始化预测结果
在这里插入图片描述

5、零初始化模型决策边界

在这里插入图片描述
Random initialization
1、随机初始化参数输出结果
在这里插入图片描述

2、Random initialization迭代结果及绘制的代价函数曲线图
在这里插入图片描述
3、Random initialization预测结果
在这里插入图片描述
4、Random initialization模型决策边界
在这里插入图片描述

He-initialization
1、He-initialization初始化参数结果
在这里插入图片描述
2、He-initialization迭代结果及绘制的代价函数曲线图
在这里插入图片描述

3、He-initialization模型决策边界
在这里插入图片描述
Gradient Checking

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Optimization Methods
1、随机梯度下降更新参数
在这里插入图片描述
2、Momentum
在这里插入图片描述

3、Momentum更新参数
在这里插入图片描述
4、Adam初始化参数
在这里插入图片描述
5、Adam更新参数
在这里插入图片描述
6、不同优化算法模型加载数据
在这里插入图片描述

7、小批量梯度下降
在这里插入图片描述
在这里插入图片描述
8、带冲量的小批量梯度下降
在这里插入图片描述
在这里插入图片描述
9、Adam模式的小批量梯度下降
在这里插入图片描述
在这里插入图片描述

五、 实验结果分析、体会

  1. 参数初始化:通过实验可以观察到不同的参数初始化方法对模型收敛速度和性能的影响。可能会发现使用随机初始化或者He初始化方法能够加速模型的收敛,并改善性能。体会到合适的参数初始化可以提高模型的稳定性和准确性。
  2. 正则化:实验可以比较未使用正则化和使用L2和Dropout正则化方法下模型的表现差异。观察模型在训练集和测试集上的表现,从而体会到正则化在减少过拟合方面的重要作用。
  3. 梯度检验:实验中可以通过数值梯度和解析梯度的对比来验证反向传播算法的正确性。如果数值梯度和解析梯度之间有较小的差异,就可以确认反向传播的实现是正确的。这样的实验可以帮助加深对反向传播算法的理解。
  4. 优化算法:尝试使用不同的优化算法(如梯度下降、随机梯度下降、Momentum、Adam等)进行实验,并对比它们在模型训练过程中的表现。体会不同优化算法对模型收敛速度和性能的影响,以及适用于不同类型任务的优化算法选择。

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

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

相关文章

k8s中的容器探针

pod的容器健康检查---探针 probe&#xff1a;k8s对容器执行的定期检查&#xff0c;诊断。 探针的三种规则 所有的探针都是针对容器不是针对pod 1、 存活探针---livenessProbe&#xff1a;探测容器是否正常运行。如果发现探测失败&#xff0c;会杀掉容器。容器会根据重启策略…

Python从入门到网络爬虫(面向对象详解)

前言 Python从设计之初就已经是一门面向对象的语言&#xff0c;正因为如此&#xff0c;在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。如果你以前没有接触过面向对象的编程语言&#xff0c;那你可能需要先了解一些面向对象语言的一些基本…

【Java集合类篇】HashMap的数据结构是怎样的?

HashMap的数据结构是怎样的? ✔️HashMap的数据结构✔️ 数组✔️ 链表 ✔️HashMap的数据结构 在Java中&#xff0c;保存数据有两种比较简单的数据结构: 数组和链表&#xff08;或红黑树&#xff09;。 HashMap是 Java 中常用的数据结构&#xff0c;它实现了 Map 接口。Has…

Jupyter Notbook+cpolar内网穿透实现公共互联网访问使用数据分析工作

​​ 文章目录 1.前言2.Jupyter Notebook的安装2.1 Jupyter Notebook下载安装2.2 Jupyter Notebook的配置2.3 Cpolar下载安装 3.Cpolar端口设置3.1 Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 ​​​​ 1.前言 在数据分析工作中&#xff0c;使用最多的无疑就是各…

水稻潜在产量估算解决方案

1.背景与技术路线 统计资料表明&#xff0c;尽管我国粮食单产已由 50 年代初期的 1.2t/ha 增加到如今的 5.2t/h&#xff0c;粮食产量增加了 4 倍&#xff0c;但我国人口的增长速度与气候变化导致的农业生产的不确定性&#xff0c; 在水稻收获指数保持稳定的情况下&#xff0c;…

软件测试方法分类-按测试对象划分

接上一篇,下来我们再细讲,第四个维度的分类, 软件测试方法分类-按测试对象划分 本章节重点介绍非功能测试的相关知识,因为功能测试的基本在之前的分类都是有涉及的。 一、非功能测试 1,性能测试(Performance Testing) 检查系统是否满足需求规格说明书中规定的性能。 …

Mysql事务transaction简介

文章目录 什么是事务针对Mysql隔离级别读未提交读提交可重复读串行化 mysql中的数据结构索引数据结构mysql中的锁种类**共享锁和独占锁**表锁、行锁(记录锁、间隙锁、临键锁) spring中的事务事务特性 什么是事务 事务是一个不可分割的数据库操作序列&#xff0c;也是数据库并发…

从0到1入门C++编程——03 内存分区、引用、函数高级应用

文章目录 一、内存分区二、引用三、函数的高级应用1.默认参数2.占位参数3.函数重载 一、内存分区 C程序在执行时&#xff0c;会将内存大致分为4个区&#xff0c;分别是代码区、全局区、栈区和堆区。 代码区用来存放函数体和二进制代码&#xff0c;由操作系统进行管理。 全局区…

力扣刷题-二叉树-二叉搜索树中的搜索

700 二叉搜索树中的搜索 给定二叉搜索树&#xff08;BST&#xff09;的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在&#xff0c;则返回 NULL。 例如&#xff0c; 在上述示例中&#xff0c;如果要找的值是 5&#x…

迟来的扫雷游戏

今天我们讲如何用C语言编写出一个简单扫雷&#xff0c;扫雷也算是一个比较原始的游戏了吧&#xff0c;那么我们今天就来实现他&#xff01; 首先我们要来缕一缕游戏框架 我们在代码中我们肯定会写许多函数来实现扫雷&#xff0c;那么我们为了简便看出游戏的运行逻辑&#xff0…

字节跳动 Spark 支持万卡模型推理实践

摘要&#xff1a;本文整理自字节跳动基础架构工程师刘畅和字节跳动机器学习系统工程师张永强在本次 CommunityOverCode Asia 2023 中的《字节跳动 Spark 支持万卡模型推理实践》主题演讲。 背景介绍 在云原生化的发展过程中 Kubernetes 由于其强大的生态构建能力和影响力&…

Consule安装与SpringBoot集成

Consule Consul 是由 HashiCorp 开发的一款软件工具&#xff0c;提供了一组功能&#xff0c;用于服务发现、配置管理和网络基础设施自动化。它旨在帮助组织管理现代分布式和微服务架构系统的复杂性。以下是Consul的一些关键方面和功能&#xff1a; 服务发现&#xff1a;Consul…

大数据 - Doris系列《二》- Doris安装(亲测成功版)

目录 &#x1f436;2.1 安装前准备 &#x1f959;1.设置系统最大文件打开句柄数 >启动一个程序的时候&#xff0c;打开文件的数量就是句柄数 &#x1f959;3.时钟同步 &#x1f959;4.关闭交换分区&#xff08;swap&#xff09; &#x1f436;2.2 安装FE &#x1f436…

seo分享:慎重使用蜘蛛池

其实要提高搜索引擎蜘蛛的来访次数&#xff0c;唯一的方法还是要通过网站本身的内容更新。频繁更新有质量的内容&#xff0c;才能够提高蜘蛛的来访次数。如果本身内容更新不多&#xff0c;外部引流的蜘蛛过多&#xff0c;最终发现没什么内容索引&#xff0c;蜘蛛来访的次数也会…

express+mongoDB开发入门教程之mongoose使用讲解

系列文章 node.js express框架开发入门教程 expressmongoDB开发入门教程之mongoDB安装expressmongoDB开发入门教程之mongoose使用讲解 文章目录 系列文章前言一、Mongoose是什么&#xff1f;二、Mongoose安装三、Mongoose在express项目中使用步骤一、连接mongoDB数据库步骤二、…

网络路由跟踪工具

随着企业网络需求的增长&#xff0c;组织发现监控和管理其网络基础设施变得越来越困难。网络管理员正在转向其他工具和资源&#xff0c;这些工具和资源可以使他们的工作更轻松一些&#xff0c;尤其是在故障排除方面。 目前&#xff0c;网络管理员主要使用简单、免费提供的实用…

C#中使用 async await TaskCompletionSource<T>实现异步逻辑同步写

Task、async 和 await 是 C# 中用于处理异步编程的关键概念。它们一起构成了异步编程的基础。 Task Task 是表示异步操作的抽象&#xff0c;它属于 System.Threading.Tasks 命名空间。Task 可以表示已经完成的任务、正在运行的任务或者尚未开始的任务。通过 Task&#xff0c;…

MySQL自定义时间间隔抽稀

MySQL自定义时间间隔抽稀 表设计数据如下按分钟抽稀按小时抽稀按天抽稀 表设计 create table monitor (tid varchar(255) not null,save_date datetime not null,tlevel decimal(10, 2) null,primary key (tid, save_date) );数据如下 按分钟抽稀 SELECT t2…

FLatten Transformer:聚焦式线性注意力模块

线性注意力将Softmax解耦为两个独立的函数&#xff0c;从而能够将注意力的计算顺序从(querykey)value调整为query(keyvalue)&#xff0c;使得总体的计算复杂度降低为线性。然而&#xff0c;目前的线性注意力方法要么性能明显不如Softmax注意力&#xff0c;并且可能涉及映射函数…

webapp下没有蓝点解决

解决方法&#xff1a; File->Project Structure 现在就是一个JavaWeb项目了。