将神经网络存储在数据库中的最佳实践

ose*_*ose 5 sql database graph-databases neural-network

我正在开发一个使用神经网络的应用程序.目前我正在考虑将其置于基于SQL(可能是SQL服务器)或图形数据库的关系数据库中.

从性能的角度来看,神经网络将非常庞大.

我的问题:

  1. 与图形数据库相比,关系数据库在处理神经网络时会遭受性能损失吗?
  2. 什么图形数据库技术最适合处理大型神经网络?
  3. 可以使用PostGIS等地理空间数据库有效地表示神经网络吗?

Ble*_*eek 6

这取决于模型进展的意图.

  1. 你对网络的不可变结构有一个固定的想法吗?像Kohonnen地图.或现成的模型.
  2. 你需要测试几种关系结构吗?这样你就可以将开关翻转到各种结构之间交替.
  3. 您的模型是否将节点视为流体自动机,可以自由寻找自己的邻居?每个自动机产生一组共同参数的独特特征值,并且您需要分析这些值如何影响它们对邻居的"选择".
  4. 对于固定数量的类型/类节点,您是否有一组固定的参数?或者是一个节点,期望开发一系列独特的属性和关系?
  5. 您是否经常需要访问每个节点,尤其是那些深入网络层的节点,以分析和关联它们?
  6. 您的网络是否可以被视为或可量化为状态机组?

免责声明
首先,我要声明我只熟悉Kohonnen地图.(所以,我承认曾被Kohonnen嘲笑为只有神经网络的入门级别.)以上问题是我多年来随意和低教育阅读后的幻想的个人心理攻击的结果.各种神经系统.

类别与参数对比属性
我们可以按车轮数量或吨位分类车辆吗?轮量或吨位应该是属性,参数还是类别特征.

理解这一争论是构建存储库的关键步骤.这场辩论与疾病和患者病媒特别相关.我见过患者信息关系图式,由医学专家设计,但显然没有太多的信息科学培训,为每位患者设定了一套共同的参数.每个患者记录有数千列,大多数未使用.当它们超出表的列限制时,它们会创建一个新表,其中包含数千个稀疏使用的列.

  • 类型1:所有节点都有一组公共参数,因此可以将节点建模为具有已知列数的表.

  • 类型2:有各种类型的节点.有固定数量的节点类.每个类都有一组固定的参数.因此,每个节点类都有一个特征表.

  • 类型3:没有意图对节点进行打孔.每个节点都可以自由开发并获取自己独特的属性集.

  • 类型4:有固定数量的节点类.类中的每个节点都可以自由开发并获取自己独特的属性集.每个类都有一组允许节点获取的有限属性.

阅读EAV模型以了解参数与属性的问题.在EAV表中,节点只需要三个特征列:

  • 节点ID
  • 属性名称
  • 属性值

但是,在技术限制下,属性可以是数字,字符串,可枚举或类别.因此,将有四个属性表,每个值类型一个,加上节点表:

  • 节点ID
  • attriute类型
  • 属性名称
  • 属性值

顺序/链接访问与散列/直接地址访问
您是否必须直接访问单个节点而不是遍历结构树以快速访问节点?

您是否需要找到已获取特定特征(属性集)的节点列表,而不管它们在网络拓扑上的位置?您是否需要在网络节点上执行分类(也称主成分分析)?

状态机
您是否希望将网络区域视为状态机的集合?状态机是非常有用的量化实体.状态机定量可以帮助您根据邻域相似性和关系在一系列节点上形成经验实体.

不要试图理解和跟踪数百万个节点的个体行为,为什么不将它们聚集成相似的区域.并跟踪这些地区的状态机流量.

结论

这是我的建议.您应该从最初使用完全关系数据库开始.原因是关系数据库和关联的SQL提供了非常宽松的关系视图信息.使用关系模型上的SQL,您可以查询或关联您不知道存在的关系.

随着实验的进展,您可能会发现某些关系建模更适合网络图形存储库,您应该将模式的这些部分移动到这样合适的存储库中.

在最终的事态.我会维护一个双模式信息回购.您维护一个关系回购以跟踪节点及其属性.因此,您将动态变异结构存储在网络图库中,但每个节点都引用关系数据库中的节点ID.关系数据库允许您根据属性及其值查询节点.例如,

SELECT id FROM Nodes a, NumericAttributes b
WHERE a.attributeName = $name
  AND b.value WItHIN $range
  AND a.id = b.id
Run Code Online (Sandbox Code Playgroud)

我想,也许可以使用hadoop而不是传统的网络图数据库.但是,我不知道hadoop如何适应动态变化的关系.我的理解是,hadoop对于一次性多次读取是有益的.然而,动态神经网络在频繁的关系变化中可能表现不佳.然而,建模网络关系的关系表效率不高.

尽管如此,我相信我只是暴露了你需要考虑的问题,而不是给你一个明确的答案,特别是对许多概念的生锈知识.