6.配置您的开发环境

当涉及到学习新技术(尤其是深度学习)时,配置开发环境往往是成功的一半。在不同的操作系统、不同的依赖版本以及实际的库本身之间,配置您自己的深度学习开发环境可能是相当令人头痛的事情。

这些问题都因深度学习库的更新和发布速度而变得更加复杂——新功能推动了创新,但也打破了以前的版本。尤其是CUDA工具包就是一个很好的例子:平均每年有2-3个新版本的CUDA。

每一个新版本都会带来优化、新特性和更快训练神经网络的能力。但每个版本都会使向后兼容性更加复杂。这个快速发布周期意味着深度学习不仅取决于您如何配置开发环境,还取决于您何时配置它。根据时间范围,您的环境可能已过时!

由于深度学习依赖关系和库的性质在迅速变化,我决定将本章的大部分内容转移到配套网站上(http://dl4cv.pyimagesearch.com/)因此,新的、新鲜的教程将始终可供您使用。

你应该用这一章来帮助自己熟悉我们将在本书中使用的各种深度学习库,然后按照本书中链接到这些库的页面上的说明进行操作。

P65

//2021.12.18日下午14:43学习笔记

6.1库和包

为了成为一个成功的深度学习实践者,我们需要一套正确的工具和包。本节详细介绍了编程语言以及我们将用于研究计算机视觉深度学习的主要库。

6.1.1 python

我们将在计算机视觉深度学习中使用Python编程语言的所有示例。Python是一种容易学习的语言,而且无疑是最好的学习深度学习算法的方法。简单、直观的语法让你专注于学习深度学习的基础知识,而不是花时间修复其他语言的编译器错误。

6.1.2 Keras

为了建立和训练我们的深度学习网络,我们将主要使用Keras库。Keras同时支持TensorFlow和Theano,使得快速构建和训练网络非常容易。有关TensorFlow和Theano与Keras兼容性的更多信息,请参阅第6.2节。

6.1.3 Mxnet

我们还将使用mxnet,一个专门用于分布式、多机器学习的深度学习库。在海量图像数据集(如ImageNet)上训练深度神经网络架构时,跨多个gpu /设备并行训练的能力至关重要。

重点:mxnet库只在本书的ImageNet Bundle中使用。

6.1.4 OpenCV, scikit-image, scikit-learn等等

由于本书侧重于将深度学习应用于计算机视觉,我们也将利用一些额外的库。在使用这本书的时候,你不需要是这些库的专家或者有使用它们的经验,但是我建议你熟悉一下OpenCV的基本知识。实用Python和OpenCV的前五章足以让你理解OpenCV库的基础知识。

OpenCV的主要目标是实时图像处理。这个库从1999年就已经出现了,但是直到2009年的2.0版本,我们才看到了令人难以置信的Python支持,其中包括将图像表示为NumPy数组。

OpenCV本身是用C/ c++编写的,但是在运行安装时提供了Python绑定。在图像处理方面,OpenCV无疑是事实上的标准,因此我们将在从磁盘加载图像、将其显示到屏幕以及执行基本的图像处理操作时使用它。

为了补充OpenCV,我们还将使用少量的scikit-image [62] (scikit-image.org),这是一组用于图像处理的算法。

Scikit-learn [5] (scikit-learn.org)是一个开源为机器学习Python库,交叉验证,和可视化——这图书馆补充Keras,帮助我们从没有“重新发明轮子”,特别是当它涉及到创建培训/测试/验证分裂和验证深度学习模型的准确性。

6.2配置开发环境

如果你已经准备好配置你的深度学习环境,只需点击下面的链接,并按照提供的操作系统说明,以及你是否将使用GPU:

如果您还没有在Python计算机视觉深度学习的配套网站上创建您的帐户,请参阅本书的前几页(紧跟着目录)的注册链接。在那里,创建你的账户,你就可以访问补充材料。

6.3预配置虚拟机

我意识到,配置开发环境不仅是一项耗时、乏味的任务,而且如果您是基于unix的环境的新手,那么这可能是一个主要的入门障碍。由于这一困难,您购买的Python计算机视觉深度学习包括一个预配置的Ubuntu VirtualBox虚拟机,它提供了所有必要的深度学习和计算机视觉库,当您使用这本书时,您将需要成功地进行预配置和预安装


确保您下载了包中包含的VirtualMachine.zip以访问此虚拟机。关于如何设置和使用虚拟机的说明可以在随本书下载的README.pdf中找到。

6.4基于云计算的实例

Ubuntu虚拟机的一个主要缺点是,根据虚拟机的定义,虚拟机不允许访问主机的物理组件(如GPU)。当训练更大的深度学习网络时,拥有GPU是非常有益的。

对于那些希望在训练他们的神经网络时访问GPU的人,我建议:

  1. 配置支持GPU的Amazon EC2实例。
  2. 注册FloydHub帐户并配置云中的GPU实例。

需要注意的是,每个选项都是根据启动实例的小时数(EC2)或秒数(FloydHub)收费的。如果你决定走“GPU在云路线”,一定要比较价格和意识到你的支出-没有什么比得到一个大的,意外的账单云使用。

如果您选择使用基于云的实例,那么我建议您使用我预配置的Amazon Machine instance (AMI)。AMI提供了本书中所需要的所有深度学习库,这些库都是预先配置和安装的。

要了解更多关于AMI的信息,请参考Python同伴网站的计算机视觉深度学习。

6.5 如何组织项目

现在您已经有机会配置开发环境,现在花一点时间下载与Starter Bundle关联的代码和数据集的.zip。

下载完文件后,解压缩它,你会看到以下目录结构:

每一章(包括附带的代码)都有自己的目录。每个目录然后包括:

  1. 本章的源代码。
  2. 深入学习的pyimagesearch库,你将创建,随着你跟随这本书。
  3. 运行各自示例所需的任何额外文件。

顾名思义,datasets目录包含Starter Bundle的所有图像数据集。

举个例子,假设我想训练我的第一个图像分类器。我首先将目录改为chapter07-first_image_classifier,然后执行knn.py脚本,将命令行参数——dataset指向动物数据集:

 

这将指导knn.py脚本在“动物”数据集(数据集中的一个子目录)上训练一个简单的k-Nearest Neighbor (k-NN)分类器,该数据集是图像中狗、猫和熊猫的一个小集合。

如果你是命令行和如何使用命令行参数的新手,我强烈建议你在阅读这本书之前阅读命令行参数和如何使用它们:

Python, argparse, and command line arguments - PyImageSearch

熟悉命令行(以及如何使用终端调试错误)是需要开发的一项非常重要的技能。

最后,作为一个简短的说明,我想提一下,我喜欢把我的数据集与源代码分开,因为它:

1.保持我的项目结构整洁

2.允许我跨多个项目重用数据集

我鼓励您对自己的项目采用类似的目录结构。

6.6总结

当涉及到配置您的深度学习开发环境时,您有许多选项。如果您更喜欢在本地机器上工作,这是完全合理的,但是您需要首先编译和安装一些依赖项。如果你打算在本地机器上使用兼容cuda的GPU,还需要一些额外的安装步骤。

对于刚开始配置开发环境的读者,或者只是想跳过整个过程的读者,请务必查看包含在Python包Deep Learning For Computer Vision下载中的预先配置的Ubuntu VirtualBox虚拟机。

如果你想使用GPU,但没有一个连接到你的系统,考虑使用基于云的实例,如Amazon EC2或FloydHub。虽然这些服务需要每小时收费,但与预先购买GPU相比,它们可以节省你的钱

最后,请记住,如果您计划进行任何严肃的深度学习研究或开发,请考虑使用Linux环境,如Ubuntu。深度学习工作时绝对可以在Windows上完成(不推荐)或macOS(完全可以接受如果你是刚刚开始),几乎所有的生产级深度学习利用基于linux的操作系统环境中,记住这一点当你配置自己的深度学习开发环境。

7. 你的第一个图像分类器

在过去的几章中,我们花了相当多的时间讨论图像的基本原理、学习类型,甚至是我们在构建自己的图像分类器时可以遵循的四步管道。但是我们还没有建立一个真正属于我们自己的图像分类器。

这将在本章中改变。我们将首先构建几个助手实用程序,以便于预处理和从磁盘加载图像。从那里,我们将讨论k近邻(k-NN)分类器,这是您第一次接触使用机器学习进行图像分类。事实上,这个算法非常简单,它根本不做任何实际的“学习”——但它仍然是一个重要的算法,我们可以在未来的章节中了解神经网络如何从数据中学习。

最后,我们将运用我们的k-NN算法来识别图像中的各种动物。

7.1使用图像数据集

当处理图像数据集时,我们首先必须考虑以字节为单位的数据集的总大小。我们的数据集是否足够大,以适应我们机器上的可用RAM ?我们可以像加载一个大矩阵或数组一样加载数据集吗?或者数据集太大,超过了我们机器的内存,需要我们将数据集“块”成段,每次只加载部分?

Starter Bundle中的数据集都足够小,我们可以将它们加载到主存中,而无需担心内存管理;然而,在练习者Bundle和ImageNet Bundle中更大的数据集将需要我们开发一些聪明的方法来有效地处理加载的图像,以一种我们可以训练图像分类器(而不会耗尽内存)的方式

也就是说,在开始使用图像分类算法之前,您应该始终了解数据集的大小。正如我们将在本章的其余部分看到的,花时间组织、预处理和加载数据集是构建图像分类器的一个关键方面。

7.1.1介绍“Animals”数据集

“Animals”数据集是一个简单的示例数据集,我把它们放在一起,演示如何使用简单的机器学习技术和先进的深度学习算法训练图像分类器。

 

Animals数据集中的图像属于三个不同的类别:狗、猫和熊猫,每个类别有1000张示例图像。狗和猫的图像从Kaggle狗vs猫挑战(http://pyimg.co/ogx37)中采样,而熊猫的图像从ImageNet数据集[42]中采样。

仅包含3000张图片的Animals数据集可以很容易地放入我们机器的主内存中,这将使我们的模型的训练速度更快,而不需要我们编写任何“开销代码”来管理无法放入内存的数据集。最重要的是,深度学习模型可以在CPU或GPU上快速训练该数据集。不管你的硬件设置如何,你都可以使用这个数据集学习机器学习和深度学习的基础知识。

在本章中,我们的目标是利用k-NN分类器,尝试仅使用原始像素强度来识别图像中的每一个物种(即没有进行特征提取)。正如我们将看到的,原始像素强度并不适合k-NN算法。尽管如此,这是一个重要的基准实验,所以我们可以理解为什么卷积神经网络能够获得如此高的原始像素强度的精度,而传统的机器学习算法不能做到这一点。

7.1.2深度学习工具包的开始

正如我在第1.5节中提到的,我们将在整本书中构建我们自己的自定义深度学习工具包。我们将从基本的辅助函数和类开始,以预处理图像和加载小数据集,最终构建当前最先进的卷积神经网络的实现。

事实上,我在做我自己的深度学习实验时也使用了同样的工具箱。该工具包将逐章逐章地构建,允许您查看组成该包的各个组件,最终成为一个成熟的库,可用于快速构建和训练您自己的定制深度学习网络。

让我们开始定义工具箱的项目结构:

如您所见,我们有一个名为pyimagesearch的模块。我们开发的所有代码都将存在于pyimagesearch模块中。为了本章的目的,我们需要定义两个子模块:

 

datasets子模块将启动一个名为SimpleDatasetLoader的类的实现。我们将使用这个类从磁盘加载小图像数据集(可以放入主存),根据一组函数选择性地预处理数据集中的每个图像,然后返回:

1. 图像(即原始像素强度)

2. 类标签与每个图像相关联

然后我们有预处理子模块。我们将在后面的章节中看到,有许多预处理方法可以应用于我们的图像数据集,以提高分类精度,包括平均减法,随机采样补丁,或简单地将图像调整为固定大小。在本例中,SimplePreprocessor类将执行后一种操作——从磁盘加载图像并将其大小调整为固定大小,忽略长宽比。在接下来的两节中,我们将手工实现SimplePreprocessor和SimpleDatasetLoader。

虽然我们将在本书中回顾整个pyimagesearch模块,以便深入学习,但我特意留下了对__init__的解释。作为对读者的练习。这些文件只是包含快捷导入,与理解应用于图像分类的深度学习和机器学习技术无关。如果您是Python编程语言的新手,我建议您温习一下包导入的基础知识[63](http://pyimg.co/7w238)。

7.1.3基本图像预处理器

机器学习算法,如k-NN,支持向量机,甚至卷积神经网络,都要求数据集中的所有图像具有固定的特征向量大小。在图像的情况下,这个要求意味着我们的图像必须经过预处理和缩放,以具有相同的宽度和高度。

有很多方法可以实现这种大小调整和缩放,从更高级的方法,即尊重原始图像的长宽比到缩放后的图像,到简单的方法,即忽略长宽比并简单地压缩宽度和高度到所需的尺寸。确切地说,你应该使用哪种方法取决于你的变化因素的复杂性(第4.1.3节)——在某些情况下,忽略纵横比就可以了;在其他情况下,你会想要保持纵横比

1 #  import  the  necessary  packages

2 import cv2

3

4 class SimplePreprocessor:

5 def __init__(self,  width,  height,  inter=cv2.INTER_AREA):

6 #  store  the  target  image  width,  height,  and  interpolation

7 #  method  used  when  resizing

8 self.width  =  width

9 self.height  =  height

10 self.inter  =  inter

11

12 def preprocess(self,  image):

13 #  resize  the  image  to  a  fixed  size,  ignoring  the  aspect

14 #  ratio

15 return cv2.resize(image,  (self.width, self.height),

16 interpolation=self.inter)

代码解释:

第2行导入了我们唯一需要的包,我们的OpenCV绑定。然后我们在第5行上定义SimpleProcessor类的构造函数。构造函数需要两个参数,然后是第三个可选参数,每个参数详细如下:

•width:调整后的输入图像的目标宽度。•height:调整后的输入图像的目标高度。•inter:一个可选参数,用于控制调整大小时使用哪种插值算法。

预处理函数定义在第12行,它只需要一个参数—我们想要预处理的输入图像。

第15行和第16行对图像进行预处理,将其调整为固定的宽度和高度大小,然后将其返回给调用函数。

同样,这个预处理器的定义是非常基本的——我们所做的就是接受一个输入图像,调整它的大小到固定的尺寸,然后返回它。然而,当在下一节中与图像数据集加载器结合时,该预处理器将允许我们快速从磁盘加载和预处理数据集,使我们能够快速通过图像分类管道并转移到更重要的方面,例如训练我们的实际分类器。

7.1.4构建镜像加载器

现在我们的SimplePreprocessor已经定义好了,让我们继续看SimpleDatasetLoader:

1 #  import  the  necessary  packages

2 import numpy as np

3 import cv2

4 import os

5

6 class SimpleDatasetLoader:

7 def __init__(self,  preprocessors=None):

8 #  store  the  image  preprocessor

9 self.preprocessors  =  preprocessors

10

11 #  if  the  preprocessors  are  None,  initialize  them  as  an

12 #  empty  list

13 if self.preprocessors is None:

14 self.preprocessors  =  []

代码解释:

第2-4行导入所需的Python包:NumPy用于数值处理,cv2用于OpenCV绑定,os用于提取图像路径中的子目录名。

第7行定义了SimpleDatasetLoader的构造函数,我们可以选择传入一个图像预处理程序列表(例如SimpleProcessor),这些图像预处理程序可以依次应用于给定的输入图像。

指定这些预处理器列表而不是单个值是很重要的——会有次我们首先需要调整图像afixed大小,然后执行某种形式的扩展(如平均减法),其次是将图像数组转换为适合Keras格式。这些预处理器中的每一个都可以独立实现,使我们能够以一种有效的方式将它们顺序地应用到图像中。

然后我们就可以进入load方法,SimpleDatasetLoader的核心:

16 def load(self,  imagePaths,  verbose=-1):

17 #  initialize  the  list  of  features  and  labels

18 data  =  []

19 labels  =  []

20

21 #  loop  over  the  input  images

22 for (i,  imagePath) in enumerate(imagePaths):

23 #  load  the  image  and  extract  the  class  label  assuming

24 #  that  our  path  has  the  following  format:

25 #  /path/to/dataset/{class}/{image}.jpg

26 image  =  cv2.imread(imagePath)

27 label  =  imagePath.split(os.path.sep)[-2]

我们的加载方法需要一个参数—imagepath,它是一个列表,指定驻留在磁盘上的数据集中的图像的文件路径。我们还可以为verbose提供一个值。这个“冗长级别”可以用来将更新打印到控制台,允许我们监视SimpleDatasetLoader处理了多少图像。

第18行和第19行初始化数据列表(即图像本身)和标签,即图像的类标签列表。

在第22行,我们开始循环每个输入图像。对于这些图像,我们从磁盘加载它(第26行),并根据文件路径(第27行)提取类标签。我们假设我们的数据集按照以下目录结构组织在磁盘上:

 

dataset_name可以是数据集的名称,在本例中是动物。类应该是类标签的名称。在我们的示例中,类是dog、cat或panda。最后,image.jpg是实际图像本身的名称。

基于这种分层的目录结构,我们可以保持数据集整洁有序。因此,可以假定dog子目录中的所有图像都是dog的示例。类似地,我们假设panda目录中的所有图像都包含熊猫的示例。

我们在用Python进行的计算机视觉深度学习中检查的几乎每一个数据集都将遵循这种分层目录设计结构——我强烈建议您在自己的项目中也这样做。

现在我们的图像已经从磁盘加载,我们可以对它进行预处理(如果必要的话)

29 #  check  to  see  if  our  preprocessors  are  not  None

30 if self.preprocessors is  not None:

31 #  loop  over  the  preprocessors  and  apply  each  to

32 #  the  image

33 for p in self.preprocessors:

34 image  =  p.preprocess(image)

35

36 #  treat  our  processed  image  as  a  "feature  vector"

37 #  by  updating  the  data  list  followed  by  the  labels

38 data.append(image)

39 labels.append(label)

第30行做了一个快速检查,以确保我们的预处理程序不是None。如果检查通过,我们循环遍历第33行上的每个预处理处理器,并将它们依次应用于第34行上的图像——这个操作允许我们形成一个可以应用于数据集中的每一张图像的预处理链。

图像预处理完成后,我们分别更新数据和标签列表(第39行和第39行)。

最后一个代码块只是处理将更新打印到控制台,然后将数据和标签的两个元组返回给调用函数

41 #  show  an  update  every ‘verbose‘  images

42 if verbose  > 0 and i  > 0 and (i  + 1)  %  verbose  == 0:

43 print("[INFO]  processed  {}/{}".format(i  + 1,

44 len(imagePaths)))

45

46 #  return  a  tuple  of  the  data  and  labels

47 return (np.array(data),  np.array(labels))

正如你所看到的,我们的数据集加载器的设计很简单;然而,它使我们能够轻松地将任意数量的图像处理器应用于数据集中的每一张图像。这个数据集加载器唯一需要注意的是,它假设数据集中的所有图像都可以一次放入主存中。

对于太大而无法装入系统RAM的数据集,我们需要设计一个更复杂的数据集加载器——我在从业者Bundle中介绍了这些更高级的数据集加载器。现在我们了解了如何(1)预处理图像和(2)从磁盘加载图像集合,现在我们可以进入图像分类阶段。

7.2 k-NN:一个简单的分类器

k近邻分类器是迄今为止最简单的机器学习和图像分类算法。事实上,它是如此简单,以至于它实际上并没有“学到”任何东西。相反,该算法直接依赖于特征向量之间的距离(在我们的例子中,是图像的原始RGB像素强度)。

简单地说,k- nn算法通过在k个最接近的例子中找到最常见的类来分类未知的数据点。k个最接近的数据点中的每个数据点都投一票,票数最高的类别获胜。或者,用简单的英语说:“告诉我你的邻居是谁,我就告诉你你是谁”[64],如图7.2所示。

为了让k-NN算法工作,它首先假设具有相似视觉内容的图像在n维空间中紧密地分布在一起。在这里,我们可以看到三种类型的图像,分别表示为狗、猫和熊猫。在这个假设的例子中,我们沿着x轴绘制动物皮毛的“蓬松性”,沿着y轴绘制动物皮毛的“轻度”。每个动物数据点在我们的n维空间。这意味着两只猫之间的距离比一只猫和一只狗之间的距离要小得多。

 

然而,为了应用k-NN分类器,我们首先需要选择一个距离度量或相似函数。一个常见的选择包括欧几里得距离(通常称为L2distance):

 

然而,其他距离度量,如曼哈顿/城市街区(通常称为l1距离)也可以使用:

 

实际上,您可以使用最适合您的数据(并给您最好的分类结果)的距离度量/相似性函数。然而,在这节课的剩余部分,我们将使用最流行的距离度量:欧几里得距离。

7.2.1 k-NN故障示例

至此,我们了解了k-NN算法的原理。我们知道它依赖于特征向量/图像之间的距离来进行分类。我们知道它需要一个距离/相似度函数来计算这些距离。

但是我们如何进行分类呢?为了回答这个问题,让我们看看图7.3。这里我们有三种动物的数据集——狗、猫和熊猫——我们根据它们的绒毛和皮毛的轻度绘制了它们。

我们还插入了一个“未知动物”,我们试图只使用一个邻居(即k = 1)对其进行分类。在这种情况下,离输入图像最近的动物是一个狗数据点;因此我们的输入图像应该归类为狗。

 

让我们尝试另一个“未知动物”,这次使用k = 3(图7.4)。我们发现前三名中有两只猫和一只熊猫。因为cat类别拥有最多的票数,所以我们将输入图像分类为cat。

我们可以一直执行这个过程对于不同的k值,但无论多么大或小k,原理是相同的——与选票最多的类别k最近的训练点胜是用作输入标签数据点。

重点:在打成平手的情况下,k-NN算法随机选择一个打成平手的类标签。

 

7.2.2事例Hyperparameters

在运行k-NN算法时,有两个明显的超参数需要考虑。第一个很明显,k的值,k的最优值是多少?如果它太小(例如k = 1),那么我们会获得效率,但会变得容易受到噪声和异常数据点的影响。然而,如果k太大,那么我们就有过度平滑分类结果和增加偏倚的风险。

我们应该考虑的第二个参数是实际距离度量。欧氏距离是最好的选择吗?曼哈顿的距离是多少?

在下一节中,我们将在Animals数据集上训练k-NN分类器,并在测试集上评估模型。我鼓励您使用不同的k值和不同的距离度量,注意性能如何变化。

要详细了解如何调优k-NN超参数,请参阅PyImageSearch Gurus课程[33]中的第4.3课。

7.2.3实施KNN

本节的目标是在Animals数据集的原始像素强度上训练一个k-NN分类器,并使用它来分类未知的动物图像。我们将使用四步管道来训练第4.3.2节中的分类器:

第1步-收集我们的数据集:动物数据集由3000张图片组成,每只狗、猫和熊猫类分别有1000张图片。每个图像都是用RGB表示的颜色空间。我们将对每张图像进行预处理,将其大小调整为32 × 32像素。考虑到三个RGB通道,图像尺寸的调整意味着数据集中的每一幅图像都由32 × 32 × 3 = 3072个整数表示。

步骤2 -分割数据集:对于这个简单的例子,我们将使用数据的两次分割。一个用于训练,另一个用于测试。我们将省略超参数调优的验证集,并将此留给读者作为练习。

步骤#3 -训练分类器:我们的k-NN分类器将根据训练集中图像的原始像素强度进行训练。

步骤#4 -评估:一旦我们的k-NN分类器训练好,我们就可以评估测试集上的性能。

让我们开始吧。打开一个新文件,命名为knn.py,并插入以下代码:

1 #  import  the  necessary  packages

2 from sklearn.neighbors import KNeighborsClassifier

3 from sklearn.preprocessing import LabelEncoder

4 from sklearn.model_selection import train_test_split

5 from sklearn.metrics import classification_report

6 from pyimagesearch.preprocessing import SimplePreprocessor

7 from pyimagesearch.datasets import SimpleDatasetLoader

8 from imutils import paths

9 import argparse

//上述是引入包的代码块

//这是解析命令行输入的代码块

•—dataset:我们的输入图像数据集驻留在磁盘上的路径。•——neighbors:可选,使用k- nn算法时应用的邻居数k。•——jobs:可选,在计算输入数据点与训练集之间的距离时要运行的并发作业数量。-1的值将使用处理器上所有可用的内核。

现在我们的命令行参数已经被解析,我们可以获取数据集中图像的文件路径,然后加载和预处理它们(分类管道中的步骤#1):

 #  grab  the  list  of  images  that  we’ll  be  describing

22 print("[INFO]  loading  images...")

23 imagePaths  = list(paths.list_images(args["dataset"]))

24

25 #  initialize  the  image  preprocessor,  load  the  dataset  from  disk,

26 #  and  reshape  the  data  matrix

27 sp  =  SimplePreprocessor(32, 32)

28 sdl  =  SimpleDatasetLoader(preprocessors=[sp])

29 (data,  labels)  =  sdl.load(imagePaths,  verbose=500)

30 data  =  data.reshape((data.shape[0], 3072))

31

32 #  show  some  information  on  memory  consumption  of  the  images

33 print("[INFO]  features  matrix:  {:.1f}MB".format(

34 data.nbytes  /  (1024 * 1000.0)))

第23行获取数据集中所有图像的文件路径。然后在第27行初始化用于将每张图像的大小调整为32 × 32像素的SimplePreprocessor。

在第28行初始化SimpleDatasetLoader,并将实例化的SimplePreprocessor作为参数提供(这意味着sp将应用于数据集中的每个图像)。

在第29行调用.load从磁盘加载实际的图像数据集。这个方法返回一个2元组的数据(每个图像的大小调整为32 × 32像素)以及每个图像的标签

从磁盘加载图像后,数据NumPy数组的形状为(3000,32,32,3),表明数据集中有3000幅图像,每个32 × 32像素有3个通道。

然而,为了应用k-NN算法,我们需要将图像从3D表示“平化”为单个像素强度列表。完成后,第30行调用数据NumPy数组上的.重塑方法,将32 × 32 × 3图像平展成具有形状(3000,3072)的数组。实际的图像数据完全没有改变——这些图像只是简单地表示为3000个条目的列表,每个条目的亮度为3072 (32 × 32 × 3 = 3072)。

为了演示在内存中存储这3,000个图像需要多少内存,第33和34行计算数组消耗的字节数,然后将该数转换为兆字节)。

接下来,让我们构建我们的训练和测试分割(步骤2):

 

第37行和第38行将标签(表示为字符串)转换为整数,每个类只有一个整数。这个转换允许我们将cat类映射为整数0,将dog类映射为整数1,将panda类映射为整数2。许多机器学习算法假设类标签被编码为整数,所以我们必须养成执行这一步的习惯。

训练和测试分割的计算由第42和43行上的train_test_split函数处理。在这里,我们将数据和标签划分为两个独特的集合:75%的数据用于训练,25%用于测试。

通常使用变量X指代包含我们将用于训练和测试的数据点的数据集,而y指代类标签(关于参数化学习的第8章将详细介绍这一点)。因此,我们使用变量trainX和testX分别表示训练和测试示例。变量trainY和testY是我们的训练和测试标签。你会在本书和其他机器学习书籍、课程和教程中看到这些常见的符号。

最后,我们能够创建我们的k-NN分类器并评估它(图像分类管道中的步骤#3和#4):

 

第47和48行初始化KNeighborsClassifier类。调用.fit方法49行“火车”分类器,虽然没有实际的“学习”怎么回事——事例的模型仅仅是存储trainX和trainY数据内部,这样就可以创建预测计算设定的测试输入数据之间的距离和trainX数据。

第50和51行通过使用classification_report函数来评估分类器。这里,我们需要提供testY类标签、模型中预测的类标签,以及可选的类标签名称(例如,“dog”、“cat”、“panda”)。

7.2.4kNN结果

要运行我们的k-NN分类器,执行以下命令:

然后你应该看到如下输出类似如下:

 

请注意,我们的特征矩阵对于3000张图像只消耗9MB的内存,每张图像的大小为32 × 32 × 3——这个数据集可以很容易地存储在现代机器的内存中,没有任何问题。

评估我们的分类器,我们看到我们获得了52%的准确率——考虑到随机猜测正确答案的概率是1/3,对于一个根本不做任何真正“学习”的分类器来说,这个准确率并不坏。

但是,检查每个类标签的准确性是很有趣的。“熊猫”类的准确率为79%,这可能是因为熊猫大部分是黑白的,因此在我们3072暗的空间里,这些图像距离更近。

狗和猫的分类准确率相对较低,分别为39%和36%。这些结果可以归因于这样一个事实,即狗和猫可以有非常相似的皮毛深浅,它们的皮毛颜色不能用来区分它们。背景噪音(如后院的草,动物休息的沙发的颜色,等等)也会“混淆”k-NN算法,因为它无法学习任何区分这些物种的模式。这种混乱是k-NN算法的主要缺点之一:虽然它很简单,但它也无法从数据中学习。

我们的下一章将讨论参数化学习的概念,我们可以从图像本身学习模式,而不是假设具有相似内容的图像将聚集在一个n维空间中。

7.2.5 k-NN的利弊

k-NN算法的一个主要优点是它的实现和理解非常简单。此外,分类器完全不需要训练时间,因为我们所需要做的就是存储我们的数据点,以便稍后计算到它们的距离,并获得我们最终的分类。

然而,我们在分类时为这种简单性付出了代价。分类一个新的测试点需要与我们的训练数据中的每一个数据点进行比较,这扩展了O(N),使得使用更大的数据集在计算上是禁止的。

我们可以通过使用近似最近邻(ANN)算法(如kd-trees [65], FLANN[66],随机投影[67,68,69]等)来解决这个时间开销;然而,使用这些算法需要我们用空间/时间复杂性来换取最近邻算法的“正确性”,因为我们正在执行一个近似。也就是说,在很多情况下,使用k-NN算法是很值得的,而且在准确性上损失很小。这种行为与大多数机器学习算法(以及所有的神经网络)不同,在大多数机器学习算法中,我们花费大量的时间预先训练我们的模型以获得较高的准确性,反过来,在测试时能够非常快速地分类。

最后,k-NN算法更适合于低维特征空间(图像不适合)。高维特征空间中的距离通常是不直观的,你可以在Pedro Domingo的优秀论文[70]中读到更多。

同样需要注意的是,k-NN算法实际上并没有“学习”任何东西-算法不能使自己更聪明,如果它犯了错误;它只是简单地依靠n维空间中的距离来进行分类。

考虑到这些缺点,为什么还要费心去研究k-NN算法呢?原因是算法很简单。这很容易理解。最重要的是,它给了我们一个可以用来比较神经网络和卷积神经网络的基线,当我们在本书的其余部分的进展时。

7.3总结

在本章中,我们学习了如何构建一个简单的图像处理器,并将图像数据集加载到内存中。然后我们讨论了k近邻分类器,简称k-NN。

k-NN算法通过将未知数据点与训练集中的每个数据点进行比较,对未知数据点进行分类。比较是使用距离函数或相似性度量来完成的。然后,从训练集中k个最相似的例子中,我们累积每个标签的“投票”数量。拥有最高票数的类别“获胜”,并被选为整体分类。

虽然k-NN算法简单直观,但也存在一些缺点。首先,它实际上并没有“学习”任何东西——如果算法犯了错误,它没有办法“纠正”和“改进”自己,以便以后的分类。其次,由于没有专门的数据结构,k-NN算法随着数据点数量的增加而线性扩展,这不仅使其在高维中使用具有实际挑战性,而且在理论上的使用也存在问题[70]。

现在我们已经获得了使用k-NN算法进行图像分类的基线,我们可以继续参数化学习,所有深度学习和神经网络都是建立在参数化学习的基础上。使用参数化学习,我们实际上可以从输入数据中学习,并发现潜在的模式。这一过程将使我们能够构建高精度的图像分类器,从而彻底颠覆k-NN的性能。

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

相关文章

  1. Docker Compose编排

    目录 Docker Compose简介 YAML YML 文件配置指令参考 Compose命令说明 compose的安装和使用 安装compose 使用compose编排创建容器 Docker Compose简介 ●一个定义及运行多个Docker容器的工具 ●Docker Compose非常适合组合使用多个容器进行开发的场景 YAML ●YAML…...

    2024/5/8 15:55:59
  2. 2022黑马程序员-前端学习第一阶段(Day04-CSS进阶)

    HTML基础-Day04 学习笔记打卡CSS进阶选择器的进阶复合选择器后代选择器:空格子代选择器:>并集选择器:,交集选择器:紧挨着hover伪类选择器Emmet语法背景相关属性背景颜色背景图片背景平铺背景位置背景相关属性的连写形式&#x…...

    2024/4/13 18:20:29
  3. AI卷趴程序员,DeepMind祭出竞赛级代码生成系统AlphaCode,超越近半码农

    继Copilot之后,码农距失业又前进了一步?刚刚,DeepMind发布了竞赛级代码生成系统AlphaCode,并声称新的代码生成系统可与人类程序员竞争。 去年,OpenAI发布了重磅产品——Codex,一个能自己编程的AI。 AI编程…...

    2024/4/5 3:13:31
  4. 阿里Canal实时同步MySQL数据到ES等其他存储的开源神器

    我们在做网站的搜索功能时需要用到检索数据,而从数据库中来查找效率是很低,而且不现实的。通常对检索支持比较好的就是Elasticsearch或HBase等存储,但是前期的数据都存在mysql数据库中,那么怎么一直实时数据同步到es中&#xff0c…...

    2024/4/27 1:00:39
  5. Ubuntu:systemd 常用命令

    Ubuntu:systemd 常用命令前言systemdsystemd命令组主命令systemctl系统相关服务相关主机命令hostnamectl时区命令timedatectl用户命令loginctl前言 本篇记录Ubuntu18 systemd命令的使用。 systemd Ubuntu18版本开始,systemd被用于系统进程启动&#x…...

    2024/5/7 17:40:57
  6. 嵌入式学习总结之C++(二)指针,常量指针,结构体指针,函数指针,宏定义

    学习内容: https://www.bilibili.com/video/BV1dW411v7VM?p14https://www.bilibili.com/video/BV1dW411v7VM?p16https://blog.csdn.net/yanggangclcsdn/article/details/49704089 学习总结: 指针 类比于钟表的指针,指针要想产生意义需要…...

    2024/4/13 18:20:29
  7. Android UI-开源框架ImageLoader的完美例子,正在准备面试

    从界面说起,界面本身是没什么好说的,就是如何在xml当中进行定义罢了 有以下这么多个布局文件 一个一个来看呗 首先是这样的效果 这个在Android4.2.2比较好看,在Android2.3.3就显得比较挫。 /2013.8.19_Universal_Image_Loader_Demo/res/la…...

    2024/5/7 21:57:19
  8. jenkins-定时执行测试任务

    当想要每个小时或者下班之后都去执行测试任务,我们不能每次都手动去运行程序,这时候我们就可以采用Jenkins来完成定时执行测试任务。 1. 在Jenkins首页,新建任务 2. 输入任务名,选择"Freestyle project",然…...

    2024/5/7 20:59:36
  9. 扫雷源码-------Java-Swing实现

    先来看下效果 运行时只需要创建一个GameWindow的对象即可,可使用有参构造函数自定义雷区行列数及炸弹个数,也可使用无参构造函数设置默认值(小旗和炸弹的图标自己去找吧,我就不在这里放了) import javax.swing.*;…...

    2024/5/7 20:06:12
  10. AcWing889 满足条件的01序列 卡特兰数

    给定 n 个 0 和 n 个 1,它们将按照某种顺序排成长度为 2n 的序列,求它们能排列成的所有序列中,能够满足任意前缀序列中 0 的个数都不少于 1 的个数的序列有多少个。 输出的答案对 1e97 取模。 输入格式 共一行,包含整数 n。 输…...

    2024/5/7 14:29:56
  11. (笔记)第一个java文件 Hello World

    第一个java文件 Hello,World 新建一个文件夹 ,存放代码新建一个java文件 文件后缀名为.java[注意点]系统可能没有显示文件后缀名,我们需要手动打开 点击上方查看按钮,显示》勾选文件扩展名即可 ​ 3.编写代码【注意点 大小写…...

    2024/5/7 14:00:56
  12. node与namespace

    一、节点管理 kubectl命令 集群中的管理操作几乎都可以使用kubectl命令完成 [rootmaster ~]# kubectl -h查看集群信息 [rootmaster1 ~]# kubectl cluster-info Kubernetes master is running at https://192.168.122.11:6443 CoreDNS is running at https://192.168.122.11…...

    2024/4/19 14:11:13
  13. 《Deep Learning for Computer Vision withPython》阅读笔记-StarterBundle(第4 - 5章)

    4.图像分类基础 这句格言在我们的生活中已经听过无数次了。它只是意味着一个复杂的想法可以在一个单一的图像中传达。无论是查看我们股票投资组合的折线图,查看即将到来的足球比赛的传播,还是简单地学习绘画大师的艺术和笔触,我们都在不断地…...

    2024/5/8 1:33:47
  14. 物联网 远程控制 esp8266-12F 8路继电器 源码

    物联网 远程控制 esp8266-12F 8路继电器 源码, 不是实物,不是实物,不是实物。 自己花时间弄出来的,只提供简单技术支持,说明文件里写的很详细。源码采用arduino 开发环境。是资料,代码,教程&…...

    2024/4/13 18:20:49
  15. 二分法(手写和STL自带)

    手写二分 题目如下: 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例一: 输入: nums [-1,0,…...

    2024/4/13 18:21:09
  16. bms电池管理系统BMS源码 凌力尔特方案,LTC6804数据采集

    bms电池管理系统BMS源码 凌力尔特方案,LTC6804数据采集,配合LTC3300主动均衡,并移植了RTOS,工程较大,部分源码如图,可选对应硬件电路PCB与原理图,带芯片官方数据手册32306288422946126个ORANGE...

    2024/5/8 0:10:03
  17. HTML笔记2

    一、表格 1、格式 <table> <tr> <td></td> </tr> </table>在table中用tr表示一行&#xff0c;在tr中使用td表示一个单元格&#xff0c;如果将td变成th&#xff0c;则文字会加粗 rowspan纵向的合并单元格colspan横向的合并单元格 举例&am…...

    2024/5/8 7:21:37
  18. warning: LF will be replaced by CRLF in chapter-7/pom.xml. The file will have its original line end

    warning: LF will be replaced by CRLF in chapter-7/pom.xml. The file will have its original line endings in your working directory 在Unix系统中&#xff0c;行尾用换行\n表示。在Windows中&#xff0c;一行由\r\n表示。当你从一个unix系统上传的git代码时&#xff0…...

    2024/4/13 18:21:09
  19. Android studio和码云步骤,android开发流程图

    打开AndroidStudio—>File —>setttings 在搜索框里面搜索git&#xff0c;选择刚才的安装路径&#xff0c;点击Test 弹出Success就代表设置成功 安装码云的插件 —如果你找不到gitosc&#xff0c;请移步文章最后&#xff0c;有注意说明 重启AndroidStudio 新建一个Andr…...

    2024/5/7 13:59:56
  20. 后疫情时代,实体行业如何推广?

    后疫情时代&#xff0c;实体业凉了&#xff1f; 此观点不敢苟同&#xff1b; 20年前我们买水杯&#xff0c;去哪里买&#xff1f;实体商超&#xff01; 后来&#xff0c;网站出来&#xff1b;社交工具Q出来了&#xff1b;这两个渠道也可以买到水杯了… 再后来&#xff0c;电…...

    2024/5/7 15:54:50

最新文章

  1. 关于Java Web自动化测试工具selenium所需的Maven依赖

    天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

    2024/5/9 7:59:38
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. linuxday05

    1、makedile原理&#xff08;增量编译生成代码&#xff09; # &#xff08;注释符&#xff09; 目标------依赖 目标不存在//目标比依赖旧才会执行命令&#xff1b; makefile的实现 1、命名要求&#xff08;Makefile/makefile&#xff09; 2、规则的集合 目标文件&#…...

    2024/5/7 13:05:29
  4. 技术与安全的交织

    引言 介绍数字化转型对企业出海策略的影响&#xff0c;强调在全球市场中成功的关键因素之一是有效利用网络技术&#xff0c;如SOCKS5代理、代理IP&#xff0c;以及确保网络安全。 第一部分&#xff1a;网络技术的基础 SOCKS5代理 定义和工作原理 SOCKS5代理与网络匿名性的关系…...

    2024/5/8 4:05:37
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/8 6:01:22
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/7 9:45:25
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/9 4:20:59
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/8 20:48:49
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/8 19:33:07
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/8 20:38:49
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/9 7:32:17
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; 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
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在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