首页 > 其他分享 >深度学习周报(10.21-10.27)

深度学习周报(10.21-10.27)

时间:2024-10-27 12:19:37浏览次数:8  
标签:10.21 函数 10.27 传播 学习 神经网络 计算 安装 周报

目录

摘要

Abstract

1 机器学习(复习)

1.1 训练过程

1.2 非线性模型

1.3 新模型优化

1.4 激活函数

2 深度学习基本概念

2.1 深度学习的本质

2.2 训练过程

2.2.1 定义一组函数(define a set of function)

2.2.2 评估函数的好坏(goodness of function)

2.2.2 选择最佳的函数(pick the best function)

2.3 反向传播(Backpropagation)

2.3.1 正向传播(Forward pass)

2.3.2 反向传播(Backward pass)

3 PyTorch配置及安装

3.1 安装CUDA

3.2 安装cuDNN

3.3 安装PyTorch-GPU版本

总结


摘要

本周开始学习李宏毅深度学习的课程。首先对机器学习做了一些回顾复习,关于机器学习的设计、优化以及激活函数的选择。然后学习了深度学习相关的一些基本概念以及参数更新需要用到的反向传播的相关知识。最后完成了对PyTorch配置安装,为后续的使用做准备。

Abstract

This week, I started to study Li Hongyi's deep learning course. First, I did a bit of a review of machine learning, about the design, optimization, and selection of activation functions for machine learning. Then, I learned some basic concepts related to deep learning and the knowledge of backpropagation that needs to be used for parameter updates. Finally, the PyTorch configuration was installed to prepare for subsequent use.

1 机器学习(复习)

1.1 训练过程

机器学习就是寻找一个函数。函数的输入是现实世界的信息,输出是一个抽象结果。而具体这个函数的好坏是训练数据通过监督学习得到的。

机器学习的训练过程分为三个阶段:

  1. 设计含有未知参数的函数,例如线性回归:eq?y%3Db+wx_%7B1%7D ,eq?w为权重,eq?b为偏置;
  2. 定义损失函数,根据训练集来训练设计的函数,从而根据损失函数来不断减小与真实值之间的差异,尽可能最小化损失函数,例如:eq?L%3D%5Cfrac%7B1%7D%7BN%7D%5Csum_%7Bn%7De_%7Bn%7D ,常见的损失函数有eq?e%3D%7Cy-%5Chat%7By%7D%7Ceq?e%3D%28y-%5Chat%7By%7D%29%5E%7B2%7D 以及交叉熵等;
  3. 优化过程,使用梯度下降算法来进行优化,通过设定超参数(eq?%5Ceta,也叫学习率)来找到局部最小值以及全局最小值。

1.2 非线性模型

当然,简单的线性回归函数存在局限性,容易造成模型偏差,为例避免模型偏差,需要更复杂的含有未知参数的函数。则这种复杂的线性函数线性函数都可以用一段一段的函数组成,即可用常数加上若干个函数表示,如下图:

75164bf6b5914a71aed1c7be892b7250.png

由此引入S形函数,即sigmoid函数:eq?y%3Dc%5Cfrac%7B1%7D%7B1+e%5E%7B-%28b+wx_%7B1%7D%29%7D%7D%3Dc%5C%2C%20sigmoid%28b+wx_%7B1%7D%29 ,从而根据调整参数eq?c%2Cb%2Cw 来拟合不同的函数:

32f38bfb49e5433aac2fa8fa03818ec1.png

从而有:eq?y%3Db+%5Csum%20_%7Bi%7Dc_%7Bi%7D%5C%2C%20sigmoid%28b_%7Bi%7D+w_%7Bi%7Dx_%7B1%7D%29 

eq?y%3Db+%5Csum%20_%7Bj%7Dw_%7Bj%7Dx_%7Bj%7D 时,有eq?y%3Db+%5Csum%20_%7Bi%7Dc_%7Bi%7D%5C%2C%20sigmoid%28b_%7Bi%7D+%5Csum%20_%7Bj%7Dw_%7Bij%7Dx_%7Bj%7D%29 ,最终能转换成如下图所示:

674f5cf1e9c546bbaad0d30048efc6fe.png可以看出eq?y%3Db+c%5E%7BT%7D%5Csigma%20%28b+wx%29,这和神经网络中隐藏层的计算如出一辙。

1.3 新模型优化

在进行梯度下降训练模型时候,很多时候要将数据集进行分组,每一个组叫做一个batch。而根据这个batch更新我们的未知数,叫做一次update。当把这一个数据集训练完后更新出来的未知数,叫做epoch:

dc3be82f5e0d4c3dbd9f545632f0e623.png

1.4 激活函数

Hard Sigmiod可以由两个ReLU(Rectified Linear Unit)叠加组成:

b4d32b7ed5df4d07b545b0b68c08a1ba.png

Sigmoid:eq?y%3Db+%5Csum%20_%7Bi%7Dc_%7Bi%7D%5C%2C%20sigmoid%28b_%7Bi%7D+%5Csum%20_%7Bj%7Dw_%7Bij%7Dx_%7Bj%7D%29

ReLU:eq?y%3Db+%5Csum%20_%7B2i%7Dc_%7Bi%7D%5C%2C%20max%280%2Cb_%7Bi%7D+%5Csum%20_%7Bj%7Dw_%7Bij%7Dx_%7Bj%7D%29

2i表示两条ReLU函数,其中sigmoid和ReLU都统称为激活函数。 

2 深度学习基本概念

2.1 深度学习的本质

将每一个激活函数称为神经元,很多层很多个神经元叠加串起来则称为神经网络,同样换个说法,同层一次的激活函数运算称之为一个隐藏层,很多隐藏层叠加起来就产生深度,因此也将这个过程叫做深度学习:

1d92f90d1da741c386b2bb4c71e4333c.png

此后,神经网络的层数越来越多,神经网络的误差也越来越小:

9a05373060c7444f89b1be07ef69b717.png

但是并非深度学习的深度越深越好,当训练数据过少时,太过于追求深度学习的深度,会造成深度学习的过拟合情况,过拟合就是在训练数据表现更好,在未见的数据却表现更差。

2.2 训练过程

对照机器学习的三个过程,深度学习同样也是三个过程:

  1. 定义一组函数(define a set of function)

  2. 评估函数的好坏(goodness of function)

  3. 选择最优的函数(pick the best function)

86c40bce367c43838f424df3b29279a7.png

2.2.1 定义一组函数(define a set of function)

定义一组函数实际上是要找到一个神经网络。神经网络是由一个个神经元或逻辑回归通过不同的方式连接串连起来的,每个神经元都有自己的偏置eq?b 和权重eq?w ,而所有神经元的eq?beq?w也被叫作神经网络参数(parameter):

0bd1c88aa8854e33a93e6c3636cab54a.png

最常见的连接方式是全连接层前馈网络(Fully Connect Feedforward Network)。

当给定一个输入,并且已知eq?b 和eq?w 的值时,就可以通过全连接进行运算,每一层的输入都来自上一层的输出。

8f862925069d45b68587d8f8f8b94fd4.png

在已知神经网络里面的未知数eq?b 和eq?w 的值时,这个神经网络都相当于一个函数,输入的是一个向量,输出的也为一个向量。

当不知道神经网络里面的未知数eq?b 和eq?w 的值时,仅仅把神经元按照设定的方式连接起来,即设置好连接的结构,就称这个为定义一组函数。

在全连接层前馈网络中,接收输入数据的第0层称为输入层,中间由很多n神经元组成的层称为隐藏层,输出结果的第L层称为输出层:

403301c9007b4fb3acea46203af8361b.png

在神经网络中一般采用矩阵运算,不仅方便表示,还能加速运算。将各层的参数都进行向量化,神经网络的前向传播做的其实就是很多的矩阵运算,则可以嵌套表示为:

4a9f0bbd7fa64b85b680eff513447f8d.png

2.2.2 评估函数的好坏(goodness of function)

函数模型结构设计完成后,就要对其进行评估。如下图:

5c65aa7cb6d74dbf9c278e41815d4de6.png

假设输入一张手写的数字1,看看预测效果,首先通过神经网络计算激活函数输出eq?y ,然后与标签值eq?%5Chat%7By%7D 计算交叉熵损失函数eq?C%28y%2C%5Chat%7By%7D%29%3D-%5Csum%20_%7Bi%3D1%7D%5E%7Bn%7D%5Chat%7By%7D_%7Bi%7Dlny_%7Bi%7D ,最后得到结果。

然后将数据集中所有的手写数字进行如上方式的计算,然后计算出总的损失值eq?L%3D%5Csum%20_%7Bn%3D1%7D%5E%7BN%7DC%5E%7Bn%7D :

4bdd4c1770224f3095688bed4ae845f3.png

2.2.2 选择最佳的函数(pick the best function)

通过找到最佳的eq?%5Ctheta ,使总的损失值最小,从而选择到最佳的函数,也叫做梯度下降算法。

6133aa12068044e8a3c391b696d10eea.png

之后使用初始值以及学习率和偏导值,通过以下运算公式,不断更新eq?%5Ctheta ,eq?i%3D0%2C1%2C...%2Cn: 

eq?w%5E%7Bi+1%7D_%7Bj%7D%3Dw%5E%7Bi%7D_%7Bj%7D-%5Ceta%20%5Cfrac%7B%5Cpartial%20L%7D%7B%5Cpartial%20w_%7Bj%7D%7D%7C_%7Bw_%7Bj%7D%3Dw%5E%7Bi%7D_%7Bj%7D%7D%5C%3B%20%5C%3B%20%5C%3B%20j%3D1%2C2%2C...%2Cn 

eq?b%5E%7Bi+1%7D%3Db%5E%7Bi%7D-%5Ceta%20%5Cfrac%7B%5Cpartial%20L%7D%7B%5Cpartial%20b%7D%7C_%7Bb%3Db%5E%7Bi%7D%7D 

2.3 反向传播(Backpropagation)

由上一小节的梯度下降算法可知,eq?%5Ctheta 向量是非常长的,可能是一个上百万维的量,为了有效率地计算这么多参数,就需要使用反向传播算法去高效的完成对eq?%5Ctheta 的计算了。

首先要知道什么是链式法则,链式法则是在学习高等数学中求复合函数导数非常常用的一种方法。完成链式求导主要需要掌握两个步骤,列出各个变量之间的关系和根据关系写出链式,同一条路径相乘、不同路径相加:

8e39839bb1b24637866c5b8fa1ca3545.png

然后,定义预测结果eq?y%5E%7Bn%7D (理想模型)与实际结果eq?%5Chat%7By%7D%5E%7Bn%7D (现实模型)之间的距离为eq?C%5E%7Bn%7D ,即第eq?n 单个样本的交叉熵损失函数值是eq?C%5E%7Bn%7D 。

a8a421a002f94f6292cec9a11c14bb2a.png

总体样本损失函数值表达式为:

eq?L%28%5Ctheta%20%29%3D%5Csum_%7Bn-1%7D%5E%7BN%7DC%5E%7Bn%7D%28%5Ctheta%20%29

对损失函数eq?L%28%5Ctheta%20%29 左右两边同时对eq?w 求偏导:

eq?%5Cfrac%7B%5Cpartial%20L%28%5Ctheta%20%29%7D%7B%5Cpartial%20w%7D%3D%5Csum_%7Bn%3D1%7D%5E%7BN%7D%5Cfrac%7B%5Cpartial%20C%5E%7Bn%7D%28%5Ctheta%20%29%7D%7B%5Cpartial%20w%7D

可以看出,仅需要对一个样本数据进行讨论,再将一个样本讨论的结论覆盖到整体样本上进行求和即可。所以下面的讨论都是基于一个样本的。反向传播可以分为正向传播部分和反向传播部分。

2.3.1 正向传播(Forward pass)

 前向传播的目标是求出偏导eq?%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20w%7D ,由于eq?C 是经过整个神经网络得出结果后得出预测值eq?y 与真实值eq?%5Chat%7By%7D 计算出来的,所以是一个整体的性的值,要求偏导,就要一层一层的计算。

将下图三角形部分的神经元拿出来单独讨论,先处理这个部分的计算从而以小见大,理解整个个过程的计算:

f54a5ef0be114a119d6250ef4452e16a.png

观察下面的图片,通过链式求导法则可以将eq?%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20w%7D 展开为:

eq?%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20w%7D%3D%5Cfrac%7B%5Cpartial%20z%7D%7B%5Cpartial%20w%7D%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%7D 

96d193bf6e544802935d91a7234bcb8f.png

eq?z 的表达式在前向传播中给出来了,eq?%5Cfrac%7B%5Cpartial%20z%7D%7B%5Cpartial%20w%7D 的计算会很容易:

eq?%5Cfrac%7B%5Cpartial%20z%7D%7B%5Cpartial%20w_%7B1%7D%7D%3Dx_%7B1%7D

eq?%5Cfrac%7B%5Cpartial%20z%7D%7B%5Cpartial%20w_%7B2%7D%7D%3Dx_%7B2%7D

可以看出eq?z 对eq?w 的偏导等于与eq?w 相联系的输入值。将这个结论扩展到网络的其他部分,如下图:

759c260135e24d1fbed43d206919aee4.png

所以通过前向传播,计算每个神经节点的输入就能计算所有的eq?%5Cfrac%7B%5Cpartial%20z%7D%7B%5Cpartial%20w%7D 了。

2.3.2 反向传播(Backward pass)

 eq?%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20w%7D%3D%5Cfrac%7B%5Cpartial%20z%7D%7B%5Cpartial%20w%7D%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%7D 中的eq?%5Cfrac%7B%5Cpartial%20z%7D%7B%5Cpartial%20w%7D 通过正向传播就能够计算出来了。接下来则要通过反向传播来计算eq?%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%7D 部分,根据链式法则:

eq?%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%7D%3D%5Cfrac%7B%5Cpartial%20a%7D%7B%5Cpartial%20z%7D%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20a%7D 

eq?%5Cfrac%7B%5Cpartial%20a%7D%7B%5Cpartial%20z%7D 就是对激活函数求导,假设使用的激活函数是Sigmoid,那么eq?%5Cfrac%7B%5Cpartial%20a%7D%7B%5Cpartial%20z%7D%3D%5Csigma%20%27%28z%29%3D%5Csigma%20%28z%29%281-%5Csigma%20%28z%29%29

 

98c2c28f340145b2979af0b02d7690ee.png

所以主要问题在于对eq?%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20a%7D 的计算,观察上图,eq?%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20a%7D 可以按照链式法则继续展开为:

eq?%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20a%7D%3D%5Cfrac%7B%5Cpartial%20z%27%7D%7B%5Cpartial%20a%7D%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%27%7D+%5Cfrac%7B%5Cpartial%20z%27%27%7D%7B%5Cpartial%20a%7D%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%27%27%7D 

根据eq?z%27 和eq?z%27%27 的表达式可以计算eq?%5Cfrac%7B%5Cpartial%20z%27%7D%7B%5Cpartial%20a%7D%3Dw_%7B1%7D 、eq?%5Cfrac%7B%5Cpartial%20z%27%27%7D%7B%5Cpartial%20a%7D%3Dw_%7B2%7D ,则带回前面的式子中有:

eq?%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%7D%3D%5Csigma%20%27%28z%29%5Bw_%7B3%7D%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%27%7D+w_%7B4%7D%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%27%27%7D%5D

 如下图,上面表达式的的含义就像从后面向前面传播:

df045a5b443a46c8aba6a2f6a8e75bc4.png

接下来则求出eq?%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%27%7D 和eq?%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%27%27%7D ,就能计算出eq?%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%7D ,这时,需要分两种情况考虑:

假设eq?z%27 和eq?z%27%27 是连接的输出层:

b924f85226624a5ab72ce778a09ae2d8.png

链式法则展开:

eq?%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%27%7D%3D%5Cfrac%7B%5Cpartial%20y_%7B1%7D%7D%7B%5Cpartial%20z%27%7D%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20y_%7B1%7D%7D

eq?%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%27%27%7D%3D%5Cfrac%7B%5Cpartial%20y_%7B2%7D%7D%7B%5Cpartial%20z%27%27%7D%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20y_%7B2%7D%7D 

求导可以通过损失函数表达式计算,求偏导其实就是激活函数的求导,这时候eq?%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%7D 就计算完成了。

假设eq?z%27 和eq?z%27%27 是连接的不是输出层:

e46cfe517e644cbd9c684fb5f36b9b3b.png

则是一个套娃递归的过程,要找其下一层再推导,直到找到输出层为止。所以,一开始从输出层往前推导快一点,因为都是已知结果:

43d22246f60b4a56a734bc8ec65867b6.png

计算梯度eq?%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20w%7D%3D%5Cfrac%7B%5Cpartial%20z%7D%7B%5Cpartial%20w%7D%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%7D ,通过正向传播计算eq?%5Cfrac%7B%5Cpartial%20z%7D%7B%5Cpartial%20w%7D 和通过反向传播计算eq?%5Cfrac%7B%5Cpartial%20C%7D%7B%5Cpartial%20z%7D :

d960bb9ca65743e79ef6a15424e80b2c.png

3 PyTorch配置及安装

PyTorch是一个开源的深度学习框架,由Facebook人工智能研究院(FAIR)开发。它提供了一套动态张量计算库,具有易于使用、高效性能和强大的扩展性等特点。PyTorch支持在GPU上运行,能够大大加速深度学习模型的训练和推理过程。

安装PyTorch-GPU版本首先需要安装CUDA和cuDNN。

3.1 安装CUDA

查看显卡驱动:

1c72c57452784e1884dde194587b62fe.png

 从官网下载对应的CUDA版本:

43e0125ec5a04427bc0d7459316b934f.png

安装: 

 30764a904c9d414baa80ecf33ef432a2.png

efdce03679474e4a9e536f8475200bd2.png

选择自定义模式: 

049b78aec58f498581dde27dadf2aee3.png

选择安装位置: 

4b6cfe91fa68465ba07f44266fa62987.png

85fa08cf250046109c199fe696b47177.png

c9e65924d73444cbb9a6ff6dc06d2846.png

安装完成。

 查看添加环境变量:

db945d25aa474857a716e6fc7556a433.png

f7c014cf00374b4fa94f6034606f63e7.png

3.2 安装cuDNN

通过官网选择安装对于版本的cuDNN: 

856f01108a14402d9fdebbd59069f6b5.png

安装并解压完后,将三个文件夹复制到CUDA安装路径下:

0b5622e287664ae0a71eb87d94314699.png

63a54b71691a44118bd54a8b0efe211a.png

 查看是否安装成功,在命令行输入nvcc -V 进行检查:

7aa2ed62189f42a583358d97730808cd.png

 验证安装是否成功:

3d7aa3932ec942859311eaff8e85d4e9.png

2f0b7c513d2349298bad9b67a9e92d05.png

8039071d95284814993c50a34797ebf9.png

3.3 安装PyTorch-GPU版本

 创建虚拟环境pytorch_gpu:

e89e5998a75a4ef29bbee3daabc90b8c.png

 pytorch官网提供的安装连接:

72928ff2e1544bafb9fba578c12da8c8.png

安装完成,cu121为gpu版本: 

cbd92eb617fe4d71b923eb4cc03cff82.png

总结

通过本周的学习,首先复习了机器学习的相关知识,机器学习的训练过程分为三个步骤:设计含有未知参数的函数、定义损失函数和优化过程,更深入了解了如何通过激活函数拟合非线性模型,和分批次计算进行模型优化,对机器学习的了解更加深入了。

然后学习了深度学习的基本概念,了解了深度学习的本质是多层次的神经网络。深度学习的训练同样也分为三个步骤:定义一组函数、评估函数的好坏和选择最佳的函数,通过对这三个步骤更深入的学习,了解了如何对神经网络进行设计、评估和选择。其次是学习到了如何使用反向传播算法高效计算参数,将偏导使用链式法则进行拆分,然后使用正向传播和反向传播结合的方式,简化计算,最后求出偏导,高效计算参数。

最后完成了对PyTorch的配置和安装操作,包括对CUDA、cuDNN和PyTorch-gpu版本的下载和安装,最终成功完成安装操作,为后续的代码运行做准备。

 

标签:10.21,函数,10.27,传播,学习,神经网络,计算,安装,周报
From: https://blog.csdn.net/qq_60040306/article/details/143114712

相关文章

  • 2024.10.21
    在有maven仓库的情况下连接(1)在pom.xml当中导入MySQL的依赖mysqlmysql-connector-java5.1.402)再新建jdbc.properties,和application.properties并列就好,并且在当中写MySQL的连接信息。Jdbc.driverClass:com.mysql.jdbc.Driver//【此处如果mysql版本大于8,就写com.mysq......
  • Apple 新品发布会亮点有哪些 | Swift 周报 issue 61
    文章目录前言新闻和社区苹果据称正洽谈投资OpenAI英伟达也有意跟投消息称苹果公司服务部门将裁员约百人,波及AppleBooks/AppleNews等业务苹果拟9月10日举行今年最重磅新品发布会,iPhone16亮相?都有哪些看点?提案正在审查的提案Swift论坛推荐博文话题讨论关......
  • 苹果仍在研发更大尺寸的 iMac | Swift 周报 issue 60
    文章目录前言新闻和社区消息称苹果仍在研发更大尺寸的iMac屏幕超过30英寸最新!苹果大动作AppleEntrepreneurCamp现已开放申请提案通过的提案Swift论坛推荐博文话题讨论关于我们前言本期是Swift编辑组自主整理周报的第六十期,每个模块已初步成型。各位读......
  • KubeSphere 社区双周报|KubeSphere v4 添加 KubeEdge 扩展组件
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。本次双周报涵盖时间为:2024.10.11-10.24。贡献者名单近期重要更新KubeSphere......
  • 10.21
    软件构造第六次作业  一.单选题(共2题,25分)1. (单选题)测试驱动开发的目的是()A.只编写使测试通过的功能代码B.家中软件测试比重C.加速开发过程D.要求在编写功能代码前先编写测试代码我的答案: C:加速开发过程;正确答案: C:加速开发过程; 12.5分2. ......
  • 10.21学习记录
    注意程序的书写他是步骤而不是描述关系例子判断数值的位数当我们判断大于的时候从高到低判断但当数字很大的时候,ifelse的书写就会无穷无尽那我们怎么样才能摆脱无穷无尽呢?循环 以类似的语句对输入的数字进行运算通过不断/10的操作可以不断从右边划掉数字如352......
  • 2022.10.27
    CSP-S寄了,被COVID-19定点打击。练习情况P1402酒店之王P1231教辅的组成P2891[USACO07OPEN]DiningG最大流,关键在建图,以P1402为例。一开始我是这样建的。源点->房间->客人->菜品->汇点看起来没有问题,但实际上这有很大问题。如:这样的图,一个人就贡献了2次......
  • 学习笔记10.21
    使用AI提示语设计公式、AI优化、Markdown模版、提示语智能体R(角色)T(任务)F(要求)C(说明)公式举例eg:你现在是一位高校大学英语教师,(角色)设计大学英语《XXX》单元的教学计划,(任务)给出教学目标、教学大纲、单元活动安排,教学策略,布置学生作业。(要求)要求按照5E教学策略设计教学活......
  • 10.21
    已经完成数据库的连接点击查看代码packageqixun;importcom.mysql.jdbc.Driver;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;publicclassjdbcDemo{publicstaticvoidmain(String[]args)throwsException{......
  • 10.21学习
    1.格式说明符中的%2s在C语言中, %2s 是一个格式说明符,用于 scanf 、 fscanf 、 sscanf 等输入函数中。它指定了函数应该读取的字符串的最大长度。具体来说: % :表示开始一个格式说明符。 2 :指定要读取的字符的最大数量,这里是2个字符。 s :表示要读取的数据......