人工神经网络入门+代码实现ORC

分享时@该用户已经被封, 我就能回答你的问题奥!

在表格里写入一个一个数字(0-9)
预测结果: ??
信度:

计算计算过程

输入和输出

假设网络中所有的参数已知,根据一个输入向量x,求输出向量y。

首先输入是一个64维向量:

\[ x=\left[ x_1, x_2,\dots x_d \right] \](d=64)

而输出向量应该是一个10维的向量,用来表征10个数字的识别概率。

\[ \hat y=\left [ \hat y_1, \hat y_2,\dots \hat y_l \right](l=10) \]

已知条件:

  • 输入层到隐层神经元之间的链接权重v

\[ v=\left| { \begin{array}{c} v_{11} & v_{12} & \dots & v_{1d}\\ v_{21} & v_{22} & \dots & v_{2d}\\ \vdots & \vdots & \ddots & \vdots\\ v_{q1} & v_{q2} & \dots & v_{qd} \end{array} }\right| (d=64, q=\text{count of hidden layer neurons})\]

  • 隐层神经元的阈值b

\[ b=[b_1, b_2, \dots, b_q](q=\text{count of hidden layer neurons}) \]

  • 隐层到输出层的权重w

\[ w=\left| { \begin{array}{c} w_{11} & w_{12} & \dots & w_{1q}\\ w_{21} & w_{22} & \dots & w_{2q}\\ \vdots & \vdots & \ddots & \vdots\\ w_{l1} & w_{l2} & \dots & w_{lq} \end{array} }\right| (l=10, q=\text{count of hidden layer neurons}) \]

  • 输出层的阈值\( \theta \)

\[ \theta=[\theta_1, \theta_2,\dots,\theta_l](l=10) \]

  • 激活函数

\[ f(x)={ 1 \over { 1 + e^{-x} } } \]

计算结果

  • 隐层神经元的输入

\[ \alpha = v · x^T + b \]

  • 隐层神经元的激活

\[ \beta=f(\alpha) \]

  • 输出神经元输入

\[\gamma = w · \beta + \theta\]

  • 输出神经元的激活

\[f(\gamma)\]

synaptic.js实现神经网络

为了演示我们就用一个前端库来做一个神经网络。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var myNetwork = new synaptic.Architect.Perceptron(64, 25, 10)
var trainer = new synaptic.Trainer(myNetwork)
data=[
{input: [0,0,0,0,1,...,0], output: 1},
{input: [0,0,0,0,1,...,0], output: 1},
{input: [0,0,0,0,1,...,0], output: 1},
{input: [0,0,0,0,1,...,0], output: 1},
{input: [0,0,0,0,1,...,0], output: 1},
{input: [0,0,0,0,1,...,0], output: 1},
{input: [0,0,0,0,1,...,0], output: 1}
]
trainer.train(data)
new_input=[0,0,1,...,0]
var output = network.activate(new_input)

###