-
2017-05-06 19:54:27
在ArcMap中创建几何网络时发生以下错误:
Cannot create geometric network. The selected feature dataset does not contain any feature classes which can participate in a new geometric network。
出现不能创建几何网络的主要原因主要有以下几点:
- 版本的切换,尤其是9.3版本到10.1版本,GDB的内部结构发生了变化,所以可能会出错。
- 创建过几何网络,点击删除后,没有删除干净。原因:GDB的内部表中会记录参与创建几何网络要素类的ID,删除按钮有时候会有问题,所以表还在,但是无法再创建几何网络。如果是这种情况,只能将数据导入导出一次。
- 每个要素类只能参与创建一个几何网络(拓扑、网络数据集),不能再参与创建其他的。
- Esri Support中提到的错误:http://support.esri.com/technical-article/000013876
解决方案如下:
1、用户的开发方式有问题,不能10.0调用10.3的dll,要版本一致。2、新建一个要素数据集,将数据导进去就没有问题了。
http://zhihu.esrichina.com.cn/question/14542#!answer_form
更多相关内容 -
ArcGIS构建几何网络步骤
2017-05-04 08:37:05您将基于 Montgomery 地理数据库的 Water 要素数据集中的要素类构建一个几何网络。然后创建连通性规则,以定义哪些要素可在网络中相互连接。 创建供水管网 步骤: 如果在上次练习后关闭了 ArcCatalog,则将其...存储在同一要素数据集中的要素类可参与一个几何网络。几何网络用于为定向的流动网络系统(如供水管网)建模。您将基于 Montgomery 地理数据库的 Water 要素数据集中的要素类构建一个几何网络。然后创建连通性规则,以定义哪些要素可在网络中相互连接。
创建供水管网
步骤:- 如果在上次练习后关闭了 ArcCatalog,则将其重新启动。
- 导航到文件夹连接中的 Montgomery 地理数据库。
- 展开 Montgomery 地理数据库。
- 右键单击 Montgomery 地理数据库中的 Water 要素数据集,指向新建,然后单击几何网络。
将打开新建几何网络向导。
- 单击下一步。
- 输入几何网络的名称WaterNet。
- 单击是以捕捉要素。
- 在英尺旁边的文本框中输入0.5。
此对话框应与下图类似。
- 单击下一步。
接下来,您必须选择要素数据集中的哪些要素类将参与几何网络。
- 单击全选。
列表中的所有要素类都将参与网络。
- 单击下一步。
如果在使用网络一段时间后需要将网络删除并重新构建网络,选择排除具有某些特定属性的要素会更便于您管理网络各部分的状态。在下一面板上,将选择不排除要素。
- 单击否,以使所有要素都参与几何网络。
- 单击下一步。
在下一个对话框中,必须指定哪些线类将在几何网络中变为复杂边要素类。复杂边要素不会被沿其长度方向的另一个要素的连接点分割成两个要素。因此,在为可能会有多个支管与之相连的给水干管进行建模时,复杂边要素会非常有用。默认情况下,所有线要素类都是简单边要素类。
在同一对话框中,必须指定哪些交汇点要素类(如果有)可以充当网络中的源头和汇点。源头和汇点用于确定供水管网中的流向。
- 在 Distribmains 行中,单击角色列下的简单边。
- 从列表中选择复杂边。
这会将 Distribmains 要素类的角色从简单边更改为复杂边。
- 在 Tanks 要素类的行中,单击源和汇下的下拉菜单,然后单击是。
- 在Transmains 行中,单击角色列下的简单边,然后从列表中选择复杂边。
这会将 Transmains 要素类的角色从简单边更改为复杂边。
- 单击下一步。
接下来可以分配网络权重。网络权重用于描述穿过逻辑网络中的元素所产生的影响,例如水流经管道时的压强降低。
- 此几何网络不需要权重(这是默认设置),因此可以单击下一步。
单击 下一步以打开汇总页面。也可为每个或个别要素添加权重:先在点击新建输入权重名和数据类型,然后在与所选权重关联的字段选择字段名即可,权重名称与要素名称是一一对应的关系。
- 查看过汇总页面后,单击完成。
此时将出现一个进度指示器,用于显示网络构建过程中每个阶段的进度。
您将收到一条错误消息,指明网络已构建完成但出现错误。
“几何网络创建完毕,出现 2 个构建错误。构建错误存储在 WaterNet_BUILDERR 表中。”
- 单击确定关闭消息框。
- 可通过预览 WaterNet_BUILDERR 表来查看构建几何网络时出现了什么错误。
- 单击目录树中的 WaterNet_BUILDERR 表,然后单击预览选项卡查看此表中的条目。
将显示两条记录。
提示:
如果收到两条以上的错误消息,请删除几何网络并重复上述步骤以重新创建它。要创建几何网络,请确保您正确完成本练习中的所有步骤。如果仍然收到两条以上的错误消息,可能是您未完成之前的 5 个练习。本教程采取循序渐进的模式,因此必须先完成前面的练习才能进行此练习。
接下来,将为供水管网创建连通性规则。
创建连通性规则
网络连通性规则用于限制可以相互连接的网络要素的类型以及可以连接到另一种要素的任一特定类型的要素数量。通过创建这些规则,可以保持数据库中的网络连接完整性。
步骤:- 右键单击 Water 要素数据集中的 WaterNet 几何网络,然后单击属性。
将打开几何网络属性对话框,该对话框将提供参与网络的要素类的相关信息和一个网络权重列表。还可使用此对话框来添加、删除和修改连通性规则。
- 单击连通性选项卡。
此选项卡允许您添加和修改几何网络的连通性规则。
您将首先创建一个新的“边–交汇点”规则,规则中规定消火栓可以连接到消火栓支管;该规则还可以规定:创建消火栓支管后,消火栓交汇点要素应置于消火栓支管的自由端。
- 单击下拉箭头,然后单击laterals。
- 单击要素类中的子类型列表中的Hydrant laterals。
现在,单击消火栓支管可以在网络中连接的交汇点类型。为简单起见,消火栓支管只能连接到消火栓。
- 选中网络中的子类型列表中的Hydrants。
还应指定:在创建消火栓支管时,如果支管的一端未连接另一个边或交汇点,则应将一个消火栓放置在该端点处。
- 单击网络中的子类型列表中Hydrants 旁边的加号。
Hydrants 子类型被展开。
- 右键单击 Hydrants 子类型下的Hydrants,然后单击设为默认值。
一个蓝色的 D 将出现在 hydrant 子类型旁边,指明它是此边子类型的默认交汇点。
接下来将创建一个新的“边–边”规则,规则中规定:消火栓支管可以经由水龙头、三通阀和鞍形架连接到配水干管。消火栓支管和配水干管之间的默认连接交汇点是水龙头。
- 单击网络中的子类型列表中Distribmains 旁边的加号将其展开。
- 选中显示在 Distribmains 子类型下的Distribmains。
由于您已经在网络子类型列表中选中了一条边,因此网络中的交汇点子类型的列表变成活动状态。可在此列表中指定可经由哪些交汇点类型来连接消火栓支管和配水干管。
- 单击加号展开交汇点子类型列表中的Fittings。
- 按照该顺序依次选中 Fittings 交汇点子类型下的Tap、Tee 和 Saddle。
Tap 旁边有一个蓝色的 D,表示它是默认的交汇点。
- 同样,在交汇点子类型列表中,选中通用的(或默认的)网络交汇点类型WaterNet_Junctions。
- 单击确定。
-
基于C#的ArcEngine二次开发33:几何网络连通性分析
2020-04-23 15:00:30对ArcGIS的几何网络连通性的相关内容进行总结梳理目录
1 理论部分
1.1 概述
在大多数网络中,您并不希望所有边类型都能够在逻辑上连接到所有交汇点类型。类似地,您也不希望所有边类型都能够通过所有交汇点类型在逻辑上连接到所有其他边类型。例如,在一个供水管网中,消火栓可以连接到消火栓支管,但不能连接到生活用水支管。类似地,在同一供水管网中,10 英寸输水干管只能通过异径管连接到 8 英寸输水干管。
网络连通性规则用于限制可以相互连接的网络要素的类型以及可以连接到另一种要素的任一特定类型的要素数量。通过建立这些规则以及其他规则(例如属性域),可以在数据库中保持网络数据的完整性。任何时间,您都可以有选择地验证数据库中的要素并生成有关网络中哪些要素无效(即违反了连通性规则或其他规则)的报告。
1.2 连通性规则
1.2.1 类型
存在两种类型的连通性规则:边-交汇点规则和边-边规则。边-交汇点规则是一种连通性规则,用于规定类型 A 的边连接到类型 B 的交汇点时应遵循的规则。边-边规则是另一种连通性规则,用于规定类型 A 的边通过一组交汇点连接到类型 B 的边时应遵循的规则。边-边规则始终涉及到一组交汇点。
您可以在 ArcCatalog 或 ArcMap 中通过修改几何网络属性建立和修改网络的连通性规则。可以在两个要素类之间、一个要素类和另一个要素类的子类型之间或者一个要素类的子类型和另一个要素类的子类型之间建立连通性规则。在上述的供水管网示例中,可以在同一边要素类的两个子类型与第三个交汇点要素类的子类型(10 英寸和 8 英寸输水干管与减压阀)之间建立连通性规则。
网络连通性规则描述如何建立边–交汇点规则和边–边规则。为简单起见,会单独建立每个规则,但也可一次为网络建立或修改任何数量的规则。
1.2.2 默认交汇点
边-边连通性规则和边-交汇点连通性规则都可以有与之相关联的默认交汇点。
对于边-交汇点连通性规则,默认交汇点是可选的,而对于边-边连通性规则,默认交汇点是强制的。
当在网络中创建连通性和新要素时,ArcMap 会自动插入默认交汇点。如果促使创建连通性规则的业务规则没有明确的默认交汇点类或类型,则将默认交汇点类设置为“孤立”交汇点要素类是一种有效的解决方案。
当边对具有在数据库中定义的边-边连通性规则,并且创建了连接现有边的新边时,将自动插入默认交汇点。对于边-交汇点连通性规则,ArcMap 将自动在网络中创建的新边自由端处插入默认交汇点。
1.3 关于建立连通性规则
使用几何网络的属性对话框建立和修改连通性规则。
在几何网络中给出的两个示例有助于您理解如何建立边–交汇点规则和边–边规则。为简单起见,会单独建立每个规则,但也可一次为网络建立或修改任何数量的规则。
构建几何网络时,需要对所有输入要素类应用排它锁。如果其中任何一个输入要素类具有共享锁,都不会构建网络。如果网络中的任何一个要素类具有共享锁或排它锁,则该锁会传播到网络中的所有其他要素类。
系统不自动设置默认交汇点。
1.3.1 添加边-交汇点规则
- 单击开始 > 所有程序 > ArcGIS > ArcMap 10.1 启动 ArcMap。
- 单击地理处理 搜索工具并在搜索框中键入添加边-交汇点规则
- 单击搜索工具。“向几何网络添加边-交汇点连通性规则”地理处理工具列于搜索窗口中。
- 单击工具名称。将打开此工具的对话框。
- 在该工具的对话框中指定参数。了解有关“向几何网络添加边-交汇点连通性规则”工具的详细信息
- 单击确定。
1.3.2 添加边-边规则
- 单击开始 > 所有程序 > ArcGIS > ArcMap 10.1 启动 ArcMap。
- 单击地理处理 > 搜索工具并在搜索框中键入添加边-边规则。
- 单击搜索工具。“向几何网络添加边-边连通性规则”地理处理工具列于“搜索”窗口中。
- 单击工具名称。将打开此工具的对话框。
- 在该工具的对话框中指定参数。了解有关“向几何网络添加边-边连通性规则”工具的详细信息
- 单击确定。
1.3.3 通过边-交汇点规则增加边-边规则的灵活性
例如,要添加这样一个规则:类型 A 的边在一端有类型 B 的交汇点并在另一端有类型 C 的交汇点,则必须首先在边类型和两个交汇点类型之间添加边-边规则。然后,会自动创建边-交汇点规则。导航至每个边-交汇点规则并设置边-交汇点基数,以便每个类型的交汇点中只有一个可以连接到任何边。
交汇点的基数是与之相连的边要素的数量。当指定交汇点的基数时,请注意一个例外情况。如果交汇点在中跨处只连接到复杂边要素,则交汇点的基数是二。在该实例中,交汇点的基数基于所连接边元素的数量而不是边要素的数量。例如,该交汇点只有在基数为 0 到 2 时才能被视为有效。
如果对默认交汇点指定了边-交汇点规则,则当创建新边时,独立交汇点可进行归入。如果新边要素被创建并被捕捉到任意类型的独立交汇点,则该交汇点将归入默认交汇点类型。如果促使创建连通性规则的商业规则没有明确的默认交汇点类或类型,则将默认交汇点类设置为“孤立”交汇点要素类是一种有效的解决方案。
1.3.4 网络构建错误
根据现有简单要素类构建几何网络时,某些输入要素类中可能会存在可察觉的几何网络或条件内非法几何。
遇到这些情况时构建过程不会失败,而是该要素以网络要素的形式添加到几何网络,但并不将其连接到重叠要素。当这种情况发生时,网络构建过程结束时会显示一条警告消息,并在数据库中创建一个写有这些错误记录的表(称为构建错误表)。
错误表的名称为 <geometricnetwork_name>_BUILDERR。网络构建错误表的方案在网络构建错误表方案中进行了说明。
ArcMap 提供了帮助您使用网络构建错误表的工具,用来识别构建过程所识别的要素(请参阅识别几何网络构建错误)。您可以选择纠正问题或删除要素。(请参阅关于编辑几何网络要素)。
编辑几何网络时,不会更新网络构建错误表。修正问题以及编辑几何网络的其他区域时,不会更新网络构建错误表。修复完此表中报告的所有问题后,即不再需要使用此表,可通过 ArcCatalog 将其删除。
在 ArcMap 中,有多种工具和命令可帮助您识别和修复具有非法几何以及不一致网络连通性的网络要素。
2 连通性模型
2.1 简单边连通性模型
网络构建过程中的简单边捕捉受到以下规则的制约:
仅在边要素的末端建立针对简单边的连通性。
即使简单边要素上存在折点,也不会建立中跨连通性。
但是,即使并未建立连通性,简单边要素也可能在捕捉过程中发生聚类。
2.2 复杂边连通性模型
网络构建过程中的复杂边捕捉受到以下规则的制约:
在要素和中跨的末端均建立针对复杂边的连通性。
如果已建立连通性的复杂边上没有折点,则会创建一个新折点。
当沿着复杂边捕捉中跨时,必须至少存在一个边端点才能建立连通性。虽然折点会捕捉到一起,但不会在一条边的中跨和另一条边的中跨之间建立连通性。
2.3 交汇点连通性模型
与边折点重叠的交汇点仍将与折点重叠。虽然边和交汇点在捕捉过程中可能移动,但交汇点并不会从边上移出。
2.4 重叠要素的连通性模型
如果网络构建过程中遇到重叠交汇点,或捕捉过程生成重叠交汇点,则生成的连通性是非确定的。也就是说,仅会在其中一个重叠交汇点上建立连通性。
如果为网络构建过程指定的捕捉容差使多个边捕捉到一起,则这些边经过捕捉后将重叠。由于连通性受几何重叠控制,因此将会连接这些边。但是,这些边的重叠交汇点的连通性将是不确定的,正如上述情形说明的那样。
2.5 相交边的捕捉模型
如果网络构建过程中指定了捕捉并且遇到相交的边时,将在这些相交的点上引入折点,即使没有连通性,正如下面的情景所示。当相交的边为简单或复杂或者两者的综合体时,便会发生这种行为。
3 几何网络
3.1 基于现有简单要素类构建几何网络
- 右键单击将要包含网络的要素数据集。
- 指向新建。
- 单击几何网络。
- 阅读第一个面板上的信息,然后单击下一步。如果不希望每次创建新几何网络时都显示此画面,请单击以后跳过此屏幕复选框。
- 为新几何网络输入名称或接受默认名称。
- 指定创建几何网络过程中是否应使用捕捉操作并设置捕捉容差。默认值将被设置为要素数据集的 X,Y 容差。
- 单击下一步。
- 单击要在该几何网络中包含的要素类。
- 单击下一步。
- 如果所有要素类都包含 Z 坐标值,则可以选择使连通性基于 X、Y 和 Z 值,并可以选择设置 Z 捕捉容差。Z 容差(以实际单位表示为 0.001 米)。选择下一步,使用 Z 值确定连通性,或选择否并单击下一步,不使用 Z 值确定连通性。
- 如果任何被选定参与网络的要素类包含启用字段,可以选择保留这些已启用值或将它们重置为真。单击否启用所有网络要素。否则,默认情况下会选择保留已启用值。
- 单击下一步。
- 单击“角色”下的下拉箭头,指定是否有要素类为“复杂边”,否则,接受默认设置“简单边”。
- 单击交汇点要素类的“源头和汇点”下的下拉箭头,将其用作建模流向所需的源头和汇点。若不需要,接受默认设置否,然后单击下一步
- 要添加新权重,请单击新建。
- 输入新权重的名称,单击下拉箭头,然后单击 Bitgate 权重的权重类型和大小。如果此权重名称与要素类中某个字段的名称匹配,该字段将自动与此权重相关联。单击确定。
- 对于每个要与权重关联的要素类,请单击其“字段”下的下拉箭头,然后选择“字段”。将会只显示与权重类型匹配的字段。
- 重复上述两步,直至定义完所有网络权重。
- 单击下一步。
- 如果地理数据库存储在 ArcSDE 地理数据库中,而且您具有该网络阶段的配置关键字,请单击是并从下拉菜单中选择该关键字。否则,请跳到步骤 21
- 单击下一步。
- 查看为新网络指定的选项。如果要进行更改,可单击上一步按钮,通过向导返回。
- 对选项满意时,请单击完成创建新几何网络。
3.2 将新要素加载到几何网络中
- 在 ArcMap 中,单击自定义下拉菜单。
- 选择自定义模式,然后选择命令选项卡。
- 选择数据转换器类别,选择网络增量加载程序命令,然后将其拖放到现有工具栏上。
- 在 ArcMap 的内容列表中,选择一个参与了要加载要素的几何网络的要素类,然后单击几何网络增量加载程序命令。
- 单击添加数据按钮并导航到源数据。几何网络增量加载程序命令可以将 ArcGIS 所支持的任何数据源视为输入。
- 选择一组输入要素类。
- 单击下一步。
- 将每个源要素类分别映射到一个网络要素类。该命令将自动映射具有相同名称的要素类。
- 单击下一步。
- 检查“摘要”页面,以研究所有未映射的字段。
- 单击完成。
3.3 向几何网络中添加新权重
创建几何网络后,可能需要添加新权重并将其与几何网络中的要素类关联。可以使用几何网络的属性页面向网络中添加新权重。网络权重会应用到网络中的所有元素。在“几何网络向导”中指定权重时,可以将每个要素类的字段与权重关联。
要将权重添加到网络,必须将其与至少一个字段关联。将权重添加到网络后,无法更改与其关联的字段。无法对已添加到网络中的权重进行删除或重命名。
- 在目录树中右键单击几何网络,然后单击属性。
- 单击权重选项卡。
- 单击新建。
- 在添加新权重对话框中,输入权重的名称。
- 单击类型下拉箭头,然后选择权重类型。
- 如果要创建 Bitgate 权重,请单击 Bitgate 大小下拉箭头,然后单击 Bitgate 的大小。
- 单击确定。
- 选择要与权重关联的字段。对于每个要素类,单击字段名下拉列表中的相应字段。
权重必须至少与一个字段关联。
-
从零开始用 Python 构建一个简单的神经网络
2021-12-31 23:42:12线性可分性在欧几里得几何中有意义。两组点(或类)称为线性可分的,如果平面中至少存在一条直线,使得一类的所有点都在直线的一侧,而另一类的所有点都在另一侧边。 更正式的: 如果两个数据簇(类)可以通过线性...线性可分数据集
正如我们在机器学习教程的前一章中所展示的,仅由一个感知器组成的神经网络足以分离我们的示例类。当然,我们精心设计了这些类以使其工作。有许多类集群,对于它们不起作用。我们将查看其他一些示例,并将讨论无法分离类的情况。
我们的类是线性可分的。线性可分性在欧几里得几何中有意义。两组点(或类)称为线性可分的,如果平面中至少存在一条直线,使得一类的所有点都在直线的一侧,而另一类的所有点都在另一侧边。
更正式的:
如果两个数据簇(类)可以通过线性方程形式的决策边界分开
∑一世=1nX一世⋅瓦一世=0
它们被称为线性可分。
否则,即如果这样的决策边界不存在,则这两个类被称为线性不可分。在这种情况下,我们不能使用简单的神经网络。
AND 函数的感知器
在我们的下一个示例中,我们将用 Python 编写一个神经网络,它实现逻辑“与”函数。它按以下方式为两个输入定义:
输入1 输入2 输出 0 0 0 0 1 0 1 0 0 1 1 1 我们在上一章中了解到,具有一个感知器和两个输入值的神经网络可以解释为决策边界,即划分两个类别的直线。我们要在示例中分类的两个类如下所示:
将 matplotlib.pyplot 导入为 plt 将 numpy 导入为 np 图, ax = plt 。子图() xmin , xmax = - 0.2 , 1.4 X = np 。arange ( xmin , xmax , 0.1 ) ax 。scatter ( 0 , 0 , color = "r" ) ax 。scatter ( 0 , 1 , color = "r" ) ax 。分散(1 , 0 , color = "r" ) ax 。scatter ( 1 , 1 , color = "g" ) ax 。set_xlim ([ xmin , xmax ]) ax 。set_ylim ([ - 0.1 , 1.1 ]) m = - 1 #ax.plot(X, m * X + 1.2, label="decision boundary") plt . 情节()
输出:
我们还发现,这样一个原始的神经网络只能创建穿过原点的直线。所以分割线是这样的:
将 matplotlib.pyplot 导入为 plt 将 numpy 导入为 np 图, ax = plt 。子图() xmin , xmax = - 0.2 , 1.4 X = np 。arange ( xmin , xmax , 0.1 ) ax 。set_xlim ([ xmin , xmax ]) ax 。set_ylim ([ - 0.1 , 1.1 ]) m = - 1 for m in np 。范围(0 , 6 , 0.1 ): ax 。绘图( X , m * X ) ax 。scatter ( 0 , 0 , color = "r" ) ax 。scatter ( 0 , 1 , color = "r" ) ax 。scatter ( 1 , 0 , color = "r" ) ax 。分散( 1, 1 , color = "g" ) plt . 情节()
输出:
我们可以看到,这些直线都不能用作决策边界,也不能用作穿过原点的任何其他直线。
我们需要一条线
是=米⋅X+C其中截距
c
不等于 0。例如线
是=-X+1.2
可以用作我们问题的分隔线:
将 matplotlib.pyplot 导入为 plt 将 numpy 导入为 np 图, ax = plt 。子图() xmin , xmax = - 0.2 , 1.4 X = np 。arange ( xmin , xmax , 0.1 ) ax 。scatter ( 0 , 0 , color = "r" ) ax 。scatter ( 0 , 1 , color = "r" ) ax 。分散(1 , 0 , color = "r" ) ax 。scatter ( 1 , 1 , color = "g" ) ax 。set_xlim ([ xmin , xmax ]) ax 。set_ylim ([ - 0.1 , 1.1 ]) m , c = - 1 , 1.2 ax 。绘图( X , m * X + c ) PLT 。情节()
输出:
现在的问题是,我们能否找到对网络模型稍加修改的解决方案?或者换句话说:我们能否创建一个能够定义任意决策边界的感知器?
解决方案包括添加偏置节点。
具有偏差的单个感知器
具有两个输入值和一个偏差的感知器对应于一条一般直线。借助偏置值,
b
我们可以训练感知器来确定具有非零截距的决策边界c
。虽然输入值可以改变,但偏置值始终保持不变。只能调整偏置节点的权重。
现在,感知器的线性方程包含偏差:
∑一世=1n瓦一世⋅X一世+瓦n+1⋅乙=0
在我们的例子中,它看起来像这样:
瓦1⋅X1+瓦2⋅X2+瓦3⋅乙=0
这相当于
X2=-瓦1瓦2⋅X1-瓦3瓦2⋅乙
这意味着:
米=-瓦1瓦2
和
C=-瓦3瓦2⋅乙
import numpy as np from collections import Counter 类 感知器: def __init__ ( self , weights , bias = 1 , learning_rate = 0.3 ): """ 'weights' 可以是一个 numpy 数组、列表或具有 权重实际值的 元组。输入值的数量 由'weights' """ self 的长度。权重 = np 。数组(权重) 自我。偏见 = 偏见 自我。学习率 = 学习率 @staticmethod def unit_step_function ( x ): 如果 x <= 0 : return 0 else : return 1 def __call__ ( self , in_data ): in_data = np 。串连( (IN_DATA , [自。偏压]) ) 结果 = 自我。weights @ in_data 返回 感知器。unit_step_function (结果) def 调整( self , target_result , in_data ): if type ( in_data ) != np . ndarray : in_data = np 。阵列(IN_DATA ) # calculated_result = 自(IN_DATA ) 误差 = target_result - calculated_result 如果 错误 =! 0 : IN_DATA = NP 。连接( (in_data , [ self . 偏差]) ) 校正 = 错误 * in_data * self 。learning_rate 自我。权重 += 修正 DEF 评估(自, 数据, 标签): 评价 = 计数器() 对于 样品, 标签 在 拉链(数据, 标签): 结果 = 自(样品) #预测 如果 结果 == 标签: 评价[ “正确” ] + = 1 否则: 评估[ “错误” ] += 1 返回 评估
我们假设上面带有 Perceptron 类的 Python 代码以“perceptrons.py”的名称存储在您当前的工作目录中。
import numpy as np from perceptrons import Perceptron def labelled_samples ( n ): for _ in range ( n ): s = np 。随机的。randint ( 0 , 2 , ( 2 ,)) yield ( s , 1 ) if s [ 0 ] == 1 and s [ 1 ] == 1 else ( s , 0 ) p = 感知器(权重= [ 0.3 , 0.3 , 0.3 ], learning_rate = 0.2 ) 对于 IN_DATA , 标签 在 labelled_samples (30 ): p 。调整(标签, 输入数据) test_data , test_labels = list ( zip ( * labelled_samples ( 30 ))) 评价 = p 。评估(test_data , test_labels ) 打印(评估)
输出:
计数器({'正确':30})
将 matplotlib.pyplot 导入为 plt 将 numpy 导入为 np 图, ax = plt 。子图() xmin , xmax = - 0.2 , 1.4 X = np 。arange ( xmin , xmax , 0.1 ) ax 。scatter ( 0 , 0 , color = "r" ) ax 。scatter ( 0 , 1 , color = "r" ) ax 。分散(1 , 0 , color = "r" ) ax 。scatter ( 1 , 1 , color = "g" ) ax 。set_xlim ([ xmin , xmax ]) ax 。set_ylim ([ - 0.1 , 1.1 ]) m = - p 。权重[ 0 ] / p 。权重[ 1 ] c = - p. 权重[ 2 ] / p 。weights [ 1 ] 打印( m , c ) ax 。绘图( X , m * X + c ) plt 。情节()
输出:
-3.0000000000000004 3.0000000000000013 []我们将创建另一个具有线性可分数据集的示例,该数据集需要一个偏置节点才能进行分离。我们将使用以下
make_blobs
函数sklearn.datasets
:从 sklearn.datasets 导入 make_blobs n_samples = 250 个 样本, 标签 = make_blobs ( n_samples = n_samples , 中心= ([ 2.5 , 3 ], [ 6.7 , 7.9 ]), random_state = 0 )
让我们可视化之前创建的数据:
导入 matplotlib.pyplot 作为 plt 颜色 = ( 'green' , 'magenta' , 'blue' , 'cyan' , 'yellow' , 'red' ) fig , ax = plt . 子图() 用于 n_class 在 范围(2 ): 斧。分散(样本[标签== n_class ][:, 0 ], 样本[标签== n_class ][:, 1 ], c =颜色[ n_class ], s = 40 , label = str ( n_class ))
n_learn_data = int ( n_samples * 0.8 ) # 80% 的可用数据点 learn_data , test_data = samples [: n_learn_data ], samples [ - n_learn_data :] learn_labels , test_labels = labels [: n_learn_data ], labels [ - n_learn_data :] 从 感知器 导入 感知器 p = 感知器(权重= [ 0.3 , 0.3 , 0.3 ], learning_rate = 0.8 ) 为 样品, 标签 在 拉链(learn_data , learn_labels ): p 。调整(标签, 样本) 评价 = p 。评估(学习数据, 学习标签) 打印(评估)
输出:
计数器({'正确':200})
让我们可视化决策边界:
导入 matplotlib.pyplot 作为 plt 图, ax = plt 。子图() # 绘制学习数据 colors = ( 'green' , 'blue' ) for n_class in range ( 2 ): ax 。分散( learn_data [ learn_labels == n_class ][:, 0 ], learn_data [ learn_labels == n_class ][:, 1 ], c =颜色[ n_class ], s = 40 , label = str ( n_class)) # 绘制测试数据 colors = ( 'lightgreen' , ' lightblue ' ) for n_class in range ( 2 ): ax . 分散( test_data [ test_labels == n_class ][:, 0 ], test_data [ test_labels == n_class ][:, 1 ], c =颜色[ n_class ], s = 40 , label = str ( n_class)) X = np 。arange ( np . max ( samples [:, 0 ])) m = - p 。权重[ 0 ] / p 。权重[ 1 ] c = - p 。权重[ 2 ] / p 。weights [ 1 ] 打印( m , c ) ax 。情节( X, m * X + c ) plt 。情节() plt 。显示()
输出:
-1.5513529034664024 11.736643489707035在下一节中,我们将介绍神经网络的 XOR 问题。它是非线性可分神经网络的最简单示例。它可以通过额外的神经元层来解决,称为隐藏层。
神经网络的异或问题
XOR(异或)函数由以下真值表定义:
输入1 输入2 异或输出 0 0 0 0 1 1 1 0 1 1 1 0 这个问题不能用简单的神经网络解决,如下图所示:
无论您选择哪条直线,您都不会成功地在一侧拥有蓝色点而在另一侧拥有橙色点。这如下图所示。橙色点位于橙色线上。这意味着这不能是一条分界线。如果我们平行移动这条线——无论朝哪个方向,总会有两个橙色和一个蓝色点在一侧,而在另一侧只有一个蓝色点。如果我们以非平行方式移动橙色线,则两侧将有一个蓝色和一个橙色点,除非该线通过橙色点。所以没有办法用一条直线来分隔这些点。
为了解决这个问题,我们需要引入一种新型的神经网络,一种具有所谓隐藏层的网络。隐藏层允许网络重新组织或重新排列输入数据。
我们只需要一个带有两个神经元的隐藏层。一个像与门一样工作,另一个像或门一样工作。当 OR 门触发而 AND 门不触发时,输出将“触发”。
正如我们已经提到的,我们找不到将橙色点与蓝色点分开的线。但是它们可以用两条线分开,例如下图中的L 1和 L 2:
为了解决这个问题,我们需要以下类型的网络,即具有隐藏层 N 1和 N 2
神经元N 1将确定一条线,例如L 1并且神经元N 2将确定另一条线L 2。N 3最终会解决我们的问题:
在 Python 中实现这一点必须等到我们机器学习教程的下一章。
练习
练习 1
我们可以通过以下方式将逻辑 AND 扩展为 0 和 1 之间的浮点值:
输入1 输入2 输出 x1 < 0.5 x2 < 0.5 0 x1 < 0.5 x2 >= 0.5 0 x1 >= 0.5 x2 < 0.5 0 x1 >= 0.5 x2 >= 0.5 1 尝试训练一个只有一个感知器的神经网络。为什么不起作用?
练习 2
一个点属于 0 类,如果 X1<0.5 并且属于第 1 类,如果 X1>=0.5. 用一个感知器训练一个网络来对任意点进行分类。你对切割边界有什么看法?输入值怎么样X2
练习题解答
第一个练习的解决方案
从 感知器 导入 感知器 p = 感知器(权重= [ 0.3 , 0.3 , 0.3 ], 偏差= 1 , learning_rate = 0.2 ) def labelled_samples ( n ): for _ in range ( n ): s = np 。随机的。random (( 2 ,)) yield ( s , 1 ) if s [ 0 ] >= 0.5 and s [ 1 ] >= 0.5 else ( s , 0 ) 对于 IN_DATA , 标签 在 labelled_samples (30 ): p 。调整(标签, 输入数据) test_data , test_labels = list ( zip ( * labelled_samples ( 60 ))) 评价 = p 。评估(test_data , test_labels ) 打印(评估)
输出:
计数器({'正确':52,'错误':8})
查看为什么它不起作用的最简单方法是将数据可视化。
将 matplotlib.pyplot 导入为 plt 将 numpy 导入为 np ones = [ test_data [ i ] for i in range ( len ( test_data )) if test_labels [ i ] == 1 ] zeroes = [ test_data [ i ] for i in range ( len ( test_data )) if test_labels [ i ] == 0 ] 图, ax = plt 。subplots () xmin , xmax = - 0.2 , 1.2 X , Y = list ( zip ( * ones )) ax 。scatter ( X , Y , color = "g" ) X , Y = list ( zip ( * zeroes )) ax 。散射( X , Y , color = "r" ) ax 。set_xlim ([ xmin , xmax ]) ax 。set_ylim ([ - 0.1 , 1.1 ]) c = - p 。权重[ 2 ] / p 。权重[ 1 ] m = - p 。权重[ 0 ] / p 。权重[ 1 ] X = NP . arange ( xmin , xmax , 0.1 ) ax 。绘图(X , m * X + c , 标签= “决策边界” )
输出:
[<matplotlib.lines.Line2D 在 0x7fba8a295790>]我们可以看到,绿点和红点不是一条直线。
第二个练习的解决方案
从 感知器 导入 感知器 import numpy as np from collections import Counter def labelled_samples ( n ): for _ in range ( n ): s = np 。随机的。random (( 2 ,)) yield ( s , 0 ) if s [ 0 ] < 0.5 else ( s , 1 ) p = 感知器(权重= [ 0.3 , 0.3 , 0.3 ], learning_rate = 0.4 ) 对于 IN_DATA , 标签 在 labelled_samples (300 ): p 。调整(标签, 输入数据) test_data , test_labels = list ( zip ( * labelled_samples ( 500 ))) 打印(p 。权重) p 。评估(test_data , test_labels )
输出:
[ 2.22622234 -0.05588858 -0.9 ] 计数器({'正确':460,'错误':40})
将 matplotlib.pyplot 导入为 plt 将 numpy 导入为 np ones = [ test_data [ i ] for i in range ( len ( test_data )) if test_labels [ i ] == 1 ] zeroes = [ test_data [ i ] for i in range ( len ( test_data )) if test_labels [ i ] == 0 ] 图, ax = plt 。subplots () xmin , xmax = - 0.2 , 1.2 X , Y = list ( zip ( * ones )) ax 。scatter ( X , Y , color = "g" ) X , Y = list ( zip ( * zeroes )) ax 。散射( X , Y , color = "r" ) ax 。set_xlim ([ xmin , xmax ]) ax 。set_ylim ([ - 0.1 , 1.1 ]) c = - p 。权重[ 2 ] / p 。权重[ 1 ] m = - p 。权重[ 0 ] / p 。权重[ 1 ] X = NP . arange ( xmin , xmax , 0.1 ) ax 。绘图(X , m * X + c , 标签= “决策边界” )
输出:
[<matplotlib.lines.Line2D 在 0x7fba8a1fbac0>]p 。权重, 米
输出:
(数组([ 2.22622234, -0.05588858, -0.9 ]), 39.83322163376969)
m
在这种情况下,斜率必须越来越大。 -
一种建立多晶体几何模型的方法与流程
2021-05-06 01:50:13本发明涉及材料结构建模技术领域,具体地说是一种基于voronoi图空间分割原理,利用ug/openapi编程构建多晶体微观结构几何建模的方法。背景技术:在对多晶材料进行塑性变形研究时,合适的多晶体几何模型的建立是尤为... -
arcgis server之道路网图层创建拓扑及网络数据集、几何网络数据集服务发布
2017-01-16 19:09:23具体操作流程为:道路拓扑差错-建立几何网络集-路网服务发布。 1、道路拓扑差错: (1)通过Arccatalog建立个人地理数据库以及要素集,如图: (2) 在要素集右键菜单,导入道路图层,如图: -
建立几何网络
2004-08-24 16:35:00建立几何网络的最基本的方法适确定加入几何网络的要素类以及这些要素类所扮演的角色。一系列的网络权重以及其他一些高级的参数也会被确定。有两种建立网络的方法:建立一个新的空的网络,为现存的简单要素建立网络。... -
LiTAMIN:基于正态分布几何近似的SLAM
2021-03-08 13:53:45考虑到这一点,通过Frobenius范数对协方差矩阵进行归一化,因为使用特征值缩放矩阵不会影响几何配准。 Frobenius范数通过特征值的平方和指示矩阵的比例,定义如下: 3 鲁棒闭环 作者采用迭代加权最小二乘法的方法。... -
管网、河网等数据在ArcGIS中创建网络及分析
2021-08-06 09:30:38对于管网或者河网等数据构建网络用于上下游分析、loop分析等,可以在ArcGIS中构建网络数据,从而完成相应的分析。 一、在ArcMap中构建 在ArcMap中可以构建Geometric几何网络。 1. 构建网络 新建数据集,并导入线... -
GeoNet:用于联合深度和表面法线估计的几何神经网络(论文2018)
2019-11-20 09:48:18GeoNet: Geometric Neural Network for Joint Depth and Surface Normal Estimation 作者:Xiaojuan Qi、...本文提出了几何神经网络(GeoNet)联合预测单个图像的深度和曲面法向量图,在两条区干CNN的基础上,我... -
计算机网络期末复习题
2020-12-31 08:48:25计算机网络复习题一 一、选择题 1、计算机网络可以被理解为() A 、执行计算机数据处理的软件模块 B 、由自主计算机互联起来的集合体 C 、多个处理器通过共享内存实现的紧耦合系统 D 、用于共同完成一项... -
ArcGIS Pro 简明教程(4)工具和模型构建器
2016-10-10 14:24:09ArcGIS Pro 简明教程(4)工具和模型构建器 by 李远祥 工具箱中的工具 ArcGIS Pro 在1.3版本基本上已经继承了ArcMap的所有工具,而且会不断加入一些它自身才有的工具,例如适量切边工具等。可以看出,Esri现在... -
从大脑结构到人工神经网络
2019-07-12 09:02:26前言 神经网络能解决非线性的复杂的模型问题,而且通过增加网络的层数将具备更加...人脑可能有1000多亿个神经元,每个神经元都可能在几个方向上互相连接着,这么大量的神经元及连接就形成了一个超级大型的网络。我... -
SuperMap IDestTop构建二维网格
2019-01-16 20:10:01一、在IDeskTop中,实现网络分析功能。 (1)使用地图软件SuperMap IDeskTop8c(2017) (2)打开IDsekTop-分析-拓扑构网-构建二维网格 (3)点击添加数据集。(注:实现网路分析功能,必须选择全部路线作为参考) ... -
SSRNet:用于大规模点云表面重建的深度学习网络(CVPR2020)
2021-07-28 00:58:57相比于传统的基于graph cuts的德劳内三角化表面重建方法,研究人员使用深度学习网络直接从点云及其徳劳内三角化中来预测徳劳内四面体的内外标签,不需要点云的可视性信息,避免了因可视性信息不足导致分类错误而... -
一文了解人工智能神经网络的原理
2019-06-24 09:10:14人脑可能有1000多亿个神经元,每个神经元都可能在几个方向上互相连接着,这么大量的神经元及连接就形成了一个超级大型的网络。我们就是因为这些网络而存在各种各样的思想和意识。 大脑神经元即是脑神经细胞,主要... -
聊聊从脑神经到神经网络
2018-11-29 08:32:22前言 神经网络能解决非线性的复杂的模型问题,而且通过增加网络的层数将具备更加...人脑可能有1000多亿个神经元,每个神经元都可能在几个方向上互相连接着,这么大量的神经元及连接就形成了一个超级大型的网络。我... -
翻译: 深入神经网络概览Dive into Deep Learning
2022-03-07 08:45:05为了将此描述建立在一个具体的例子中,如果我们在医疗保健领域工作,那么我们可能想要预测患者是否会心脏病发作。这种观察,“心脏病发作”或“没有心脏病发作”,将成为我们的标签。输入特征可能是生命体征,例如... -
14期-连肝7个晚上,总结了计算机网络的知识点!(共66条)
2020-07-13 09:33:28前言 计算机网络知识,是面试常考的内容,在实际工作中也常常会涉及到。...客户端,构建请求,通过DNS查询IP地址,三次握手建立TCP连接,客户端发起请求,服务器响应,四次挥手,断开TCP连接。(与服务器只 -
深度学习:卷积神经网络从入门到精通
2019-03-28 23:30:12有兴趣的读者可以从本书开始,通过图像分类、识别、检测和分割的案例,逐步深入卷积神经网络的核心,掌握深度学习的方法和精髓,领会 AlphaGo 战胜人类世界冠军的奥秘。 作者简介 李玉鑑(鉴) 北京工业大学教授,... -
小学数学第二学段图形与几何领域的作业设计研究
2021-07-14 01:20:34下面是第二学段图形与几何领域教学内容图形与几何(一)图形的认识1.结合实例了解线段、射线和直线。2.体会两点间所有连线中线段最短,知道两点间的距离。3.知道平角与周角,了解周角、平角、钝角、直角、锐角之间的... -
《上海堡垒》究竟几何?让我用爬虫一探究竟
2019-08-12 22:59:12怀着满心的科幻愿景,习惯了滕导演以及各位演员不遗余力地前期宣传,我得以熟知了这一部中国式的科幻大片《上海堡垒》,最初看到新闻消息说,... 20190809上映,受到台风“利奇马”的袭击影响,我还未来得及走进... -
《计算机网络基础与应用》笔记
2022-04-26 00:03:47本笔记根据重庆大学出版社中等职业教育计算机专业系列教材《计算机网络基础与应用》中的知识点归纳总结。 -
在linux中怎么查看错误日志
2021-05-11 22:44:59cat或者tail -f命令日 志 文 件 说 明/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一/var/log/secure 与安全相关的日志信息/var/log/maillog 与邮件相关的日志信息/var/log/cron ... -
5G时代的到来,对网络公关将产生哪些深远影响?
2019-06-21 15:40:57文 | 公关之家 作者:Leon 企业在经营发展过程中为实现公关、营销、获客、销售、服务、品牌传播的...5G时代的到来,对网络公关将产生哪些深远影响? 未来可能起到关键性作用的情感属性和情绪分析,这些数据将告诉品... -
计算机网络面试常见问题
2021-01-10 12:07:43目录一、计算机网络体系结构二、物理层三、数据链路层四、网络层五、传输层六、应用层 一、计算机网络体系结构 二、物理层 三、数据链路层 四、网络层 五、传输层 六、应用层 -
计算机网络试题及答案(史上最全)
2021-07-15 15:16:06计算机网络试题及答案(一) 一、.填空题 1.所谓计算机网络,会议是利用通信设备和线路将地理位置不同的、功能独 立的 多个计算机系统互连起来,以功能完善的网络软件实现网络中资源共享 和数据通讯的系统。 2.... -
[网络安全自学篇] 七十三.WannaCry勒索病毒复现及分析(四)蠕虫传播机制全网源码详细解读
2020-05-05 13:49:19这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步。前文分享了逆向分析OllyDbg动态调试工具的基本用法,包括界面介绍、常用快捷键和TraceMe... -
基于单目相机的2D地图构建
2020-07-23 21:57:55第一章 引言 ...使用像LiDAR和Kinect这样的复杂3D传感器进行SLAM目前已经有了较为成熟的技术方案,尤其是在大多数的室内环境中进行SLAM已经有了比较完善的方法[1]。然而,这些3D传感器诸如LiDAR的高成本和K.. -
图像分类,一文入魂(上)
2021-08-23 13:00:56近几年来,深度学习算法在图像分类方面取得了突破性进展,通过建立层级特征自动提取模型,得到更准确且接近图像高级语义的特征。卷积神经网络(CNN)是一种识别率很高的深度学习模型,能够提取具有平移、缩放、旋转等不变...