计算计算过程
输入和输出
假设网络中所有的参数已知,根据一个输入向量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 | var myNetwork = new synaptic.Architect.Perceptron(64, 25, 10) |