MindSpore图片分类之代码实现
1. 摘要
在前面两次的分享中,我们主要探讨了LeNet卷积神经网络,分析了卷积、池化、全连接这些操作运算的特点和用法,以及LeNet中每一层的计算和作用。在了解过该网络的原理后,那么本次我们将通过使用MindSpore工具实现MNIST数据集的分类。
2. 模型的构造
对于一个完整图片分类模型,通常有以下几个组成部分。
模型:假设一个样本图片信息是X(i),输出标签为Y,那么我们需要建立基于输入X(i)和输出标签Y的表达式,也就是模型(model)。模型输出的Y是对真实样本的预测或估计,我们通常会允许它们之间有误差。
模型训练:通过数据来寻找特定的模型参数值,使模型在数据上的误差尽可能小。这个过程叫作模型训练(model training)。下面我们介绍模型训练所涉及的3个要素。
训练数据:我们通常使用一系列的真实数据,例如多个图片的真实标签和它们包含的不同像素数组。我们希望在这个数据上面寻找模型参数来使模型的预测结果更接近真实标签。在机器学习术语里,该数据集被称为训练数据集(training data set)或训练集(training set),一个图片被称为一个样本(sample),其真实类别叫作标签(label),用来预测标签的因素叫作特征(feature)。特征用来表征样本的特点。
损失函数:在模型训练中,我们需要衡量预测类别与真实类别之间的误差。通常我们会选取一个非负数作为误差,且数值越小表示误差越小。
优化算法:当模型和损失函数形式较为简单时,最优解可以直接用公式表达出来。这类解叫作解析解(analytical solution)。然而,大多数深度学习模型并没有解析解,只能通过优化算法有限次迭代模型参数来尽可能降低损失函数的值。这类解叫作数值解(numerical solution)。
模型预测:模型训练完成后,我们将模型参数在优化算法停止时的值分别记录。注意,这里我们得到的并不一定是最小化损失函数的最优解,而是对最优解的一个近似。然后,我们就可以使用学出的图片分类模型来估算训练数据集以外任意一张图片所属的类别了。这里的估算也叫作模型预测、模型推断或模型测试。
3. MindSpore代码实现
我们将在下面代码是使用MindSpore深度学习框架实现的,下面逐步分析我们项目中所使用的数据、模型、损失函数、优化算法、模型验证。
3.1 数据集准备
MNIST数据集(Mixed National Institute of Standards and Technology database)是大型手写数字数据库,包含60000个示例的训练集以及10000个示例的测试集,每个样本图像的宽高为28*28的灰度图。
下面提供了两种数据集的使用方式:
(1)数据集已经在同级文件夹目录下时,可执行下段代码解压使用。
def unzipfile(gzip_path):"""unzip dataset fileArgs:gzip_path: dataset file path"""open_file = open(gzip_path.replace('.gz',''), 'wb')gz_file = gzip.GzipFile(gzip_path)open_file.write(gz_file.read())gz_file.close()
(2)文件夹中还没有数据集的时候,需要下载使用。
def download_dataset():"""Download the dataset from http://yann.lecun.com/exdb/mnist/."""print("******Downloading the MNIST dataset******")train_path = "./MNIST_Data/train/"test_path = "./MNIST_Data/test/"train_path_check = os.path.exists(train_path)test_path_check = os.path.exists(test_path)if train_path_check == False and test_path_check ==False:os.makedirs(train_path)os.makedirs(test_path)train_url = {"http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz", "http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz"}test_url = {"http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz", "http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz"}for url in train_url:url_parse = urlparse(url)# split the file name from urlfile_name = os.path.join(train_path,url_parse.path.split('/')[-1])if not os.path.exists(file_name.replace('.gz','')):file = urllib.request.urlretrieve(url, file_name)unzipfile(file_name)os.remove(file_name)for url in test_url:url_parse = urlparse(url)# split the file name from urlfile_name = os.path.join(test_path,url_parse.path.split('/')[-1])if not os.path.exists(file_name.replace('.gz','')):file = urllib.request.urlretrieve(url, file_name)unzipfile(file_name)os.remove(file_name)
3.2 数据增强
主要是对数据进行归一化和丰富数据样本数量。常见的数据增强方式包括裁剪、翻转、偏移变化等等。MindSpore通过调用map方法在图片上执行增强操作。
import mindspore.dataset as ds import mindspore.dataset.transforms.c_transforms as C import mindspore.dataset.transforms.vision.c_transforms as CV from mindspore.dataset.transforms.vision import Interfrom mindspore.common import dtype as mstypedef create_dataset(data_path, batch_size=32, repeat_size=1,num_parallel_workers=1):""" create dataset for train or test Args: data_path: Data path batch_size: The number of data records in each group repeat_size: The number of replicated data records num_parallel_workers: The number of parallel workers """# define datasetmnist_ds = ds.MnistDataset(data_path)# define operation parametersresize_height, resize_width = 32, 32rescale = 1.0 / 255.0shift = 0.0rescale_nml = 1 / 0.3081shift_nml = -1 * 0.1307 / 0.3081# define map operationsresize_op = CV.Resize((resize_height, resize_width), interpolation=Inter.LINEAR) # resize images to (32, 32)rescale_nml_op = CV.Rescale(rescale_nml, shift_nml) # normalize imagesrescale_op = CV.Rescale(rescale, shift) # rescale imageshwc2chw_op = CV.HWC2CHW() # change shape from (height, width, channel) to (channel, height, width) to fit network.type_cast_op = C.TypeCast(mstype.int32) # change data type of label to int32 to fit network# apply map operations on imagesmnist_ds = mnist_ds.map(input_columns="label", operations=type_cast_op, num_parallel_workers=num_parallel_workers)mnist_ds = mnist_ds.map(input_columns="image", operations=resize_op, num_parallel_workers=num_parallel_workers)mnist_ds = mnist_ds.map(input_columns="image", operations=rescale_op, num_parallel_workers=num_parallel_workers)mnist_ds = mnist_ds.map(input_columns="image", operations=rescale_nml_op, num_parallel_workers=num_parallel_workers)mnist_ds = mnist_ds.map(input_columns="image", operations=hwc2chw_op, num_parallel_workers=num_parallel_workers)# apply DatasetOpsbuffer_size = 10000mnist_ds = mnist_ds.shuffle(buffer_size=buffer_size) # 10000 as in LeNet train scriptmnist_ds = mnist_ds.batch(batch_size, drop_remainder=True)mnist_ds = mnist_ds.repeat(repeat_size)return mnist_ds
3.3 模型构建
根据MNIST数据集的性质,这里我们使用图像分类任务的标准算法卷积神经网络-LeNet。卷积神经网络采用分层的结构对图片进行特征提取,由一系列的网络层堆叠而成,比如卷积层、池化层、激活层、全连接层、输出层,LeNet模型的详细结构可参考上篇MindSpore图片分类之LeNet网络池化和全连接。
import mindspore.nn as nn from mindspore.common.initializer import Normalclass LeNet5(nn.Cell):""" Lenet network structure """#define the operator requireddef __init__(self, num_class=10, num_channel=1):super(LeNet5, self).__init__()self.conv1 = nn.Conv2d(num_channel, 6, 5, pad_mode='valid')self.conv2 = nn.Conv2d(6, 16, 5, pad_mode='valid')self.fc1 = nn.Dense(16 * 5 * 5, 120, weight_init=Normal(0.02))self.fc2 = nn.Dense(120, 84, weight_init=Normal(0.02))self.fc3 = nn.Dense(84, num_class, weight_init=Normal(0.02))self.relu = nn.ReLU()self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2)self.flatten = nn.Flatten()#use the preceding operators to construct networksdef construct(self, x):x = self.max_pool2d(self.relu(self.conv1(x)))x = self.max_pool2d(self.relu(self.conv2(x)))x = self.flatten(x)x = self.relu(self.fc1(x))x = self.relu(self.fc2(x))x = self.fc3(x)return x
3.4 定义损失函数
模型在项目中的职责是拟合数据的规则特性,拟合的程度我们引入损失函数表示,接下来需要定义损失函数(Loss)。损失函数是深度学习的训练目标,也叫目标函数,可以理解为神经网络的输出(Logits)和标签(Labels)之间的距离,是一个标量数据。
本次模型输出是⼀个图像类别这样的离散值。对于这样的离散值预测问题,我们可以使⽤诸如softmax回归在内的分类模型。和线性回归不同,softmax回归的输出单元从⼀个变成了多个,且引⼊了softmax运算 使输出更适合离散值的预测和训练。
图1:softmax全连接运算图
o1 = x1w11 + x2w21 + x3w31 + x4w41 + b1,
o2 = x1w12 + x2w22 + x3w32 + x4w42 + b2,
o3 = x1w13 + x2w23 + x3w33 + x4w43 + b3.
既然分类问题需要得到离散的预测输出,⼀个简单的办法是将输出值oi当作预测类别是i的置信 度,并将值最⼤的输出所对应的类作为预测输出,即输出argmaxioi。然而,直接使⽤输出层的输出有两个问题。⼀⽅⾯,由于输出层的输出值的范围不确定,我们难以直观上判断这些值的意义。另⼀⽅⾯,由于真实标签是离散值,这些离散值与不确定范围的输出值之间的误差难以衡量。
softmax运算符(softmax operator)解决了以上两个问题。它通过下式将输出值变换成值为正且 和为1的概率分布:
图2:softmax运算符计算图
容易看出yˆ1 + ˆy2 + ˆy3 = 1且0 ≤ yˆ1, yˆ2, yˆ3 ≤ 1,因此yˆ1, yˆ2, yˆ3是⼀个合法的概率分布。这时候,如 果yˆ2 = 0.8,不管yˆ1和yˆ3的值是多少,softmax运算不改变预测类别输出。
使⽤softmax运算后可以更⽅便地与离散标签计算误差。我们已经知道,softmax运算 将输出变换成⼀个合法的类别预测分布。
实际上,真实标签也可以⽤类别分布表达:对于样本i,我们构造向量y (i) ∈ R q ,使其第y (i)(样本i类别的离散数值)个元素为1,其余为0。这样我们的 训练⽬标可以设为使预测概率分布yˆ(i)尽可能接近真实的标签概率分布y(i)。
我们可以像线性回归那样使⽤平⽅损失函数∥yˆ(i) − y (i)∥ 2/2。然而,想要预测分类结果正确,我们其实并不需要预测概率完全等于标签概率。我们只需要其中的一个预测值足够大,就足够我们分类使用。例如我们预测一个数字图片类别为“1”的预测值为0.6,预测为“7”和“9”的值为0.2,或者预测为“7”和的值为0.35,预测为“9”的值为0.05,两种情况下分类都是正确的,但是计算的损失值是不同的。改善上述问题的⼀个⽅法是使⽤更适合衡量两个概率分布差异的测量函数。其中,交叉熵(cross entropy)是⼀个常⽤的衡量⽅法。图像分类应用通常采用交叉熵损失(CrossEntropy)。
图3:交叉熵损失函数表达式
其中带下标的y(i)j是向量y(i)中⾮0即1的元素,需要注意将它与样本i类别的离散数值,即不带下标的y(i)区分。在上式中,我们知道向量y (i)中只有第y(i)个元素y(i) y(i)为1,其余全为0,于是H(y (i) , yˆ (i) ) = − log yˆ(i) y(i)。也就是说,交叉熵只关⼼对正确类别的预测概率,因为只要其值⾜ 够⼤,就可以确保分类结果正确。当然,遇到⼀个样本有多个标签时,例如图像⾥含有不⽌⼀个物体时,我们并不能做这⼀步简化。但即便对于这种情况,交叉熵同样只关⼼对图像中出现的物体类别的预测概率。假设训练数据集的样本数为n,交叉熵损失函数定义为
图4:简化交叉熵损失表达式
从另⼀个⻆度来看,最小化交叉熵损失函数等价于最⼤化训练数据集所有标签类别的联合预测概率。
from mindspore.nn.loss import SoftmaxCrossEntropyWithLogitsif __name__ == "__main__":...#define the loss functionnet_loss = SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean')...
3.5 定义优化器
损失函数的定义方便了样本的输出与标签之间误差的计算,也就是损失值,但仅仅是计算出了损失值是不够的,到这里模型还是一个“死”的,我们需要通过减小损失值的形式优化模型参数,优化器用于神经网络求解(训练)。由于神经网络参数规模庞大,无法直接求解,因而深度学习中采用随机梯度下降算法(SGD)及其改进算法进行求解。MindSpore封装了常见的优化器,如SGD、ADAM、Momemtum等等。本例采用Momentum优化器,通常需要设定两个参数,动量(moment)和权重衰减项(weight decay)。
本次体验项目中使用的是动量法。目标函数有关自变量的梯度代表了目标函数在自变量当前位置下降最快方向。因此,梯度下降也叫最陡下降。每次迭代中,梯度下降根据自变量当前位置,沿着当前位置的梯度更新自变量。然而,如果自变量的迭代方向仅仅取决于自变量当前位置,这可能会带来一些问题。
例如我们使用一个输入和输出分别为二维向量x=[x1,x2]⊤和标量的⽬标函数。
图5:二维目标函数
基于这个目标函数的梯度下降,演示使用学习率为0.4时自变量的迭代轨迹。
图6:目标函数自变量迭代轨迹
可以看到,目标函数在竖直方向比在水平方向的斜率的绝对值更大。因此给定学习率,梯度下降迭代自变量时会使自变量在竖直方向比在水平方向移动幅度更大。那么,我们需要一个较小的学习率从而避免自变量在竖直方向上越过目标函数最优解。然而这样也会造成自变量在水平方向上朝最优解移动变慢。
动量法的提出就是解决梯度下降中的上述问题的。设置时间步t的自变量为Xt,随机梯度为gt,学习率为ηt。动量法创建速度变量v0,并将其元素初始化成0。在 时间步t > 0,动量法对每次迭代的步骤做如下修改:
vt ← γvt−1 + ηtgt
xt ← xt−1 − vt
其中,动量超参数γ满⾜0≤γ<1。当γ=0时,动量法等价于梯度下降。
if __name__ == "__main__":...#learning rate settinglr = 0.01momentum = 0.9#create the networknetwork = LeNet5()#define the optimizernet_opt = nn.Momentum(network.trainable_params(), lr, momentum)...
3.6 训练网络
配置模型保存:在上述几步机制设置完成后,便可以开始训练网络了。MindSpore提供了callback机制,可以在训练过程中执行自定义逻辑,这里使用框架提供的ModelCheckpoint为例。 ModelCheckpoint可以保存网络模型和参数,以便进行后续的fine-tuning(微调)操作。
from mindspore.train.callback import ModelCheckpoint, CheckpointConfigif __name__ == "__main__":...# set parameters of check pointconfig_ck = CheckpointConfig(save_checkpoint_steps=1875, keep_checkpoint_max=10) # apply parameters of check pointckpoint_cb = ModelCheckpoint(prefix="checkpoint_lenet", config=config_ck) ...
配置训练网络
通过MindSpore提供的model.train接口可以方便地进行网络的训练。LossMoniter可以监控训练过程中loss值的变化。 这里把epoch_size设置为1,对数据集进行1个迭代的训练。
from mindspore.nn.metrics import Accuracyfrom mindspore.train.callback import LossMonitorfrom mindspore.train import Model...def train_net(args, model, epoch_size, mnist_path, repeat_size, ckpoint_cb, sink_mode):"""define the training method"""print("============== Starting Training ==============")#load training datasetds_train = create_dataset(os.path.join(mnist_path, "train"), 32, repeat_size)model.train(epoch_size, ds_train, callbacks=[ckpoint_cb, LossMonitor()], dataset_sink_mode=sink_mode) ...if __name__ == "__main__":...epoch_size = 1 mnist_path = "./MNIST_Data"repeat_size = 1model = Model(network, net_loss, net_opt, metrics={"Accuracy": Accuracy()})train_net(args, model, epoch_size, mnist_path, repeat_size, ckpoint_cb, dataset_sink_mode)...
......................
图7:模型训练loss值变化图
如上图中所示,我们在配置完成模型、损失函数、优化器后,启动模型训练后的loss值变化情况。经过我们设定次数的迭代后,此时的loss值已经非常小,表示经验误差很小,但并不表示模型的泛化误差会很小,所以需要保存模型参数,检验模型的泛化误差,也叫验证模型。
3.7 验证模型
在得到模型文件后,通过模型运行测试数据集得到的结果,验证模型的泛化能力。使用model.eval接口读入测试数据集。使用保存后的模型参数进行推理。使用准确率检测模型的泛化性能。
from mindspore.train.serialization import load_checkpoint, load_param_into_net...def test_net(args,network,model,mnist_path):"""define the evaluation method"""print("============== Starting Testing ==============")#load the saved model for evaluationparam_dict = load_checkpoint("checkpoint_lenet-1_1875.ckpt")#load parameter to the networkload_param_into_net(network, param_dict)#load testing datasetds_eval = create_dataset(os.path.join(mnist_path, "test"))acc = model.eval(ds_eval, dataset_sink_mode=False)print("============== Accuracy:{} ==============".format(acc))if __name__ == "__main__":...test_net(args, network, model, mnist_path)
图8:模型预测准确率
模型验证时,首先将训练模型保存的参数文件传入,预测数据集喂给模型预测使用。本次训练得到的准确率为0.963...,表示泛化误差很小。证明模型并未有过拟合现象,模型的鲁棒性能很好。但每次训练得到的模型并不是完全一致的,所以验证模型时得到的准确率也不一定相同。超参数的的调整是否有效果,模型验证的结果是很直观的表示。
4. 总结
本次分享内容首先归纳通常机器学习项目的组成部分,由数据集、模型、损失函数、优化器、模型预测这几部分组成。并且在每一个部分中,又有很多不同的方法。例如卷积模型有LeNet和ResNet等等。我们的需要做的是从分析数据集特性开始,然后在每一个部分中选择合适的方法构建出一个完整的项目,使用数据集训练、预测,最终保存符合我们要求的模型。
以上是个人的一些总结,有不足和错误之处,还请多多留言指导。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- glDrawElements: Source and destination textures of the draw are the same.
pixi.js app.renderer.plugins.extract.image 导出报错 导致Graphics是黑的 GL ERROR :GL_INVALID_OPERATION : glDrawElements: Source and destination textures of the draw are the same. 原因不是很明白,好像是自己draw自己 最后解决方案是不用app.renderer导…...
2024/5/9 0:56:08 - 练习5-3 字符金字塔
练习5-3 字符金字塔 (15 分) 本题要求实现函数输出n行字符金字塔。 函数接口定义: void CharPyramid( int n, char ch);其中n和ch是用户传入的参数,n为[1, 9]的正整数。要求函数按照如样例所示的格式打印出n行由字符ch构成的字符金字塔。注意每个字符…...
2024/4/19 19:33:01 - resetfileds失效问题
在vue中我们使用el-dialog时,先点击编辑,再点击新增时,会出现被填充的情况,此时已经设置对话框关闭后resetfileds,但是仍然不起作用。 解决:在设置回显值的时候,不要直接赋值,在外边…...
2024/5/9 2:21:47 - CentOS下自动安装Nginx脚本
身为WEB开发人员,在Linux系统下安装Nginx提供WEB Service是必备技能。如果需要经常安装,有个自动化的脚本还是能提高不少效率。上代码: #!/bin/bash #------------------------------ #-----Function Update Ningx and PHP for CentOS. #Aut…...
2024/5/8 12:29:16 - leetcode 1047 删除字符串中的所有相邻重复项
思路 原题链接 首先定义一个ArrayDeque 类型的deque依次取出S中的字符进行判断,使用栈进行操作,当栈顶元素不是当前的ch时,将其加入,若和当前的元素相等,则将当前元素pop出检测完之后,当deque非空的时候&…...
2024/5/8 15:41:07 - 读取网页指定区域表格中数据
由于个人学习需要,求购能自动读取浏览的网页中指定区域表格中的数据,有哪位大神有这样的工具?小弟拜谢。...
2024/5/9 2:34:37 - 2070:【例2.13】数字对调
【题目描述】 输入一个三位数,要求把这个数的百位数与个位数对调,输出对调后的数。 【输入】 三位数。 【输出】 如题述结果。 【输入样例】 123 【输出样例】 321 #include<bits/stdc.h> using namespace std; int main() {long long a;cin&g…...
2024/5/8 7:32:46 - 波特、波特率、比特率
波特 表示每秒钟能传送多少个单位信号,如每秒发送1个单位信号的通报速率定为1波特 波特率 表示每秒钟传输二进制位数,单位是波特(B) 比特率 表示每秒钟传输二进制有效位数(这是由于数据传输过程中会包含数据位、起…...
2024/5/7 21:52:13 - Android入门项目(八)Android流式筛选弹框,android程序开发入门
流式布局如何实现? 在onMeasure方法里,循环子view。具体思路是判断同一行的子View宽度是否大于父View的宽度(注意父View要减去padding),如果大于就换行,如果不大于就不换行。其中处理最后一个子View&#x…...
2024/4/18 5:10:01 - java:代码抛红
java:代码抛红 1 重新加载Maven项目 2 清除idea的index缓存...
2024/4/18 18:14:14 - Springboot order 注解正确用法
结论 Order注解不能指定 bean 的加载顺序,它适用于 AOP 的优先级,以及将多个 Bean 注入到集合时,这些 bean 在集合中的顺序 Order注解控制Component加载顺序 注意:组件类必须实现接口 package com.wenxiaowu.springboot.order.…...
2024/5/7 16:42:02 - 剑指 Offer 57 - II. 和为s的连续正数序列
剑指 Offer 57 - II. 和为s的连续正数序列 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 思路:双指针 class Solut…...
2024/5/8 1:50:52 - 生成唯一主键(雪花算法SnowFlake)
创建一个生成Id的工具类:SnowFlakeIdUtils public class SnowFlakeIdUtils {/** 开始时间截 (2015-01-01) */private final long twepoch 1420041600000L;/** 机器id所占的位数 */private final long workerIdBits 5L;/** 数据标识id所占的位数 */private final …...
2024/4/14 5:16:09 - C 语言 入门学习
C语言 入门学习 资料1.阮一峰老师的 C语言 入门教程2.翁恺老师的 C语言 视频课1.阮一峰老师的 C语言 入门教程 阮一峰老师的《C语言入门教程》是电子书,可以在线看 GitHub 地址:https://github.com/wangdoc/clang-tutorial 在线阅读地址:htt…...
2024/4/14 5:16:28 - Android之GestureDetector-简单手势操作及通过手势缩放图片
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY){ Toast.makeText(this, “onFling”, Toast.LENGTH_SHORT).show(); return false; } Override public void onLongPress(MotionEvent e){ Toast.makeText(this, “onLongPres…...
2024/4/14 5:16:03 - 自动驾驶中应用Transformer的单目 BEV 感知
Monocular BEV Perception with Transformers in Autonomous Driving A review of academic literature and industry practice as of late 2021 作者:Patrick Langechuan Liu 原文地址: https://towardsdatascience.com/monocular-bev-perception-with…...
2024/5/7 13:46:27 - centos-7.x安装Mysql
centos-7.x安装Mysql 日常踩坑 当我折腾安装好MySQL之后,来了一句,结果踩坑了,我找了好多教程,全是入坑的 systemctl start mysqld有博主这样解释到:由于MySQL在CentOS7中收费了,所以已经不支持MySQL了,…...
2024/4/14 5:15:58 - 零基础也可以--搭建一个属于自己的ETH中转服务器节点,并且带抽水功能
推荐阿里云服务器或者Ucloud 阿里云:云服务器ECS年终特惠 Ucloud:香港云服务器 如果苦力值不是特别高直接选择最便宜的就行,比较高可以选择带宽高一点的,推荐使用Linux的,Ubuntu 16 / Debian 8 / CentOS 7。 一、…...
2024/4/14 5:15:53 - Python核心编程-认识python
学习一门语言,都需要从它的发展历史开始,先去认识这门语言,了 解它的优缺点,以及它在工作中的应用。 .了解了Python之后, 首先入门的应该是变量,数据类型,运算符,输入与输出一些基础…...
2024/5/8 3:56:59 - SpringBoot嵌入Tomcat原理分析
SpringBoot嵌入Tomcat原理 内嵌Tomcat启动原理 首先,来到启动SpringBoot项目的地方,也就是朱配置类. SpringBootApplication public class InakiApplication {public static void main(String[] args) {SpringApplication.run(InakiApplication.class…...
2024/5/8 4:00:05
最新文章
- matlab中interp2函数应用
interp2 函数在 MATLAB 中用于进行二维插值。当使用 nearest 选项时,它会执行最近邻插值,即对于给定的目标点,函数将选择网格中距离其最近的点的值作为该目标点的插值结果。 以下是 interp2 函数在 nearest 模式下的用法示例,以及…...
2024/5/9 4:46:53 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/7 10:36:02 - linuxday05
1、makedile原理(增量编译生成代码) # (注释符) 目标------依赖 目标不存在//目标比依赖旧才会执行命令; makefile的实现 1、命名要求(Makefile/makefile) 2、规则的集合 目标文件&#…...
2024/5/7 13:05:29 - Jmeter02-1:参数化组件CVS
目录 1、Jmeter组件:参数化概述 1.1 是什么? 1.2 为什么? 1.3 怎么用? 2、Jmeter组件:参数化实现之CSV Data Set Config(重点中重点) 2.1 是什么? 2.2 为什么? 2.3 怎么用? …...
2024/5/8 18:13:51 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/8 6:01:22 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/7 9:45:25 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/9 4:20:59 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/7 11:36:39 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/8 20:48:49 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/7 9:26:26 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/8 19:33:07 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/8 20:38:49 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/6 21:42:42 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57