基本上我知道神经网络的概念以及它是什么,但我无法弄清楚它在你编码时的外观或者你如何存储数据,我经历了很多我在谷歌上找到的教程但是不能找到任何代码,只是概念和算法.
谁能给我一段简单的神经网络代码,比如"Hello World!"?
你主要需要的是一个物体,它代表一个神经元,与其他神经元(代表突触)及其重量具有相关联.
典型的OOP语言中的单个神经元就像是
class Synapse { Neuron sending; Neuron receiving; float weight; } class Neuron { ArrayListtoSynapses; ArrayList fromSynapses; Function threshold; }
其中threshold
表示应用于输入加权和的函数,以查看神经元是否激活自身并传播信号.
当然,您将需要特定算法来反馈网络或反向传播将在此数据结构上运行的学习.
你可以开始实现的最简单的事情是一个简单的感知器,你可以在这里找到一些信息.
你说你已经熟悉了神经网络,但由于存在许多不同类型的不同复杂度的神经网络(卷积,hebbian,kohonen映射等),我将再次讨论一个简单的前馈神经网络,只是为了确保我们在同一页面上.
基本神经网络由以下内容组成
神经元
输入神经元
隐藏神经元(可选)
输出神经元
神经元之间的联系(有时称为与生物学类比的突触)
激活功能
神经元具有激活值.评估网络时,输入节点的激活将设置为实际输入.来自输入节点的链接通向更靠近输出的节点,通常是一层或多层隐藏节点.在每个神经元处,使用激活函数处理输入激活.可以使用不同的激活函数,有时它们甚至在单个网络的神经元内变化.
激活函数处理激活的神经元的到它的输出.早期实验通常使用简单的阈值函数(即激活> 0.5?1:0),现在经常使用Sigmoid函数.
然后,激活函数的输出通过链路传播到下一个节点.每个链接都有一个应用于其输入的相关权重.
最后,从输出神经元的激活中提取网络的输出.
我已经把一个非常简单的(和非常详细......),例如这里.它是用Ruby编写的,并且计算AND,这很简单.
一个更棘手的问题是如何实际创建一个有用的网络.该示例的简单网络是手动创建的,但这对于更复杂的问题是不可行的.我知道有两种方法,最常见的是反向传播.较少使用的是神经进化,其中链接的权重是使用遗传算法确定的.