我会说你的方法是错的。神经网络不是我们在计算机上看到的内存转储。没有特定内存块所在的地址。所有神经元一起确保给定输入导致特定输出。
让我们与你的大脑进行比较。当你品尝糖时,你的舌头的味蕾是读取化学信号并将电信号传输到大脑的输入节点。然后,大脑使用电信号的各种组合来确定味道。
没有查找表。没有主要和次要记忆,只有短期和长期记忆。
内存存储是特定于实现的,而不是算法本身的一部分。考虑可能更有用 什么 你需要存储而不是存储 怎么样 存储它。
考虑一个3层多层感知器(完全连接),在输入层,隐藏层和输出层分别有3个,8个和5个节点(对于本讨论,我们可以忽略偏置输入)。然后,一种合理(和有效)的方式来表示所需的权重是两个矩阵:a 3x8 输入和隐藏层之间的权重矩阵和 8x5 隐藏层和输出层之间权重的矩阵。
3x8
8x5
对于此示例,您需要存储权重和网络形状(每层的节点数)。您可以通过多种方式存储此信息。它可以位于XML文件或用户定义的二进制文件中。如果您使用的是python,则可以将两个矩阵保存为二进制文件 .npy 在文件名中编码和编码网络形状。如果您实现了算法,则由您决定如何存储持久数据。另一方面,如果您使用的是现有的机器学习软件包,它可能有自己的I / O功能,用于存储和加载经过培训的网络。
.npy
这可以通过两个步骤来回答:
随着神经网络(NN)的训练,它建立了一个数学模型 告诉NN什么作为特定输入的输出。认为 当你训练某人说一门新语时会发生什么。该 人脑创造了一种语言模型。同样,NN创建 你想要教它的数学模型。它表示从输入到输出的映射作为一系列函数。这个数学模型 是记忆。该数学模型是网络中不同边缘的权重。通常,训练NN并将这些权重/连接写入硬盘(XML,Yaml,CSV等)。每当需要使用NN时,都会回读这些值并重新创建网络。
想想一个被教过两种语言的人。让我们说个人从不会说这些语言中的一种已有15 - 20年,但每天都使用另一种语言。很可能每天都会学习几个新单词,并且会忘记许多不常用语言的单词。这里的关键部分是人类每天都在“学习”。在NN中,通过使用新数据训练网络可以观察到类似的现象。如果旧数据未包含在新的训练样本中,则基础数学模型将发生很大变化,以至于旧训练数据将不再在模型中表示。可以通过改变训练过程来防止NN“遗忘”旧模型。然而,这具有副作用,即这样的NN不能完全学习新的数据样本。
每个神经网络都具有与之相关的边权重。在神经网络的训练期间调整这些边缘权重。我想你的疑问是关于存储这些边缘权重。嗯,这些值分别存储在辅助存储器中,以便保留它们以供将来在神经网络中使用。
我希望对模型设计(神经网络)的讨论与实施的讨论是分开的,在实施中,解决了耐久性等数据要求。
特定的库或框架可能有关于持久存储的特定答案,但如果您从头开始自己编辑,那么这取决于您。
例如,为什么不在文件中编写经过训练的权重和拓扑?像YAML或XML这样的东西可以作为一种格式。
此外,当我们谈论状态/存储和神经网络时,您可能对调查感兴趣 联想记忆 。