嘿,未来的AI大师!是不是想亲手打造一个属于自己的人工智能应用?或者,你想探索如何在C++的世界里构建一个简单的人工神经元模型?别急,这篇文章将带你从一个超级简单的人工神经元示例开始,慢慢揭开AI的神秘面纱。如果你对AI技术还是个新手,我们强烈建议你先去逛逛我们的AI技术入门。
简单ANN模型回顾
先来回顾一下,我们之前提到过的简单AI神经元模型。一个最小人工神经元包含一个激活值(记为a)、一个激活函数(记为phi())以及一些加权的(w)输入网络连接。简单来说,它有一个激活值,一个激活函数,以及根据输入网络的数量,一个或多个权重。
您想从头开始开发您的人工智能应用程序吗?想要了解如何用 C++ 开发简单的人工神经元模型?在这篇文章中,我们将用一个非常简单的人工神经元示例进行解释。我们之前发布过 C++ 中的简单人工神经元模型 和 C++ 中的非常简单的人工神经网络 (ANN) 示例 。如果您不熟悉人工智能技术,我们强烈建议您阅读它们。
这就是AI技术中的一个非常简单的人工神经网络。现在,让我们跟随这个示例,提升我们的神经元模型,用数组来创建一个人工神经元模型。
基于数组的人工神经元模型
这是另一个使用数组的简单神经元示例。这个示例也非常适合用在物联网(IoT)上的C应用。如果你有一个固定的网络,并且你知道训练数据的值,这个模型可能很容易检查神经元的激活情况。数组在静态神经网络中易于分配内存和使用。
首先,我们定义神经元的数量,如果在应用中这个数量会变化,使用int:
1
2
3
|
#define NN 3 // number of neurons
|
我们需要一个激活函数,也就是转移函数phi(),可以是线性的、sigmoid的等等。我们这里定义一个非常简单的线性转移函数:
1
2
3
4
5
6
|
float phi(float sum)
{
return sum ; // linear transfer function f(sum)=sum
}
|
首先,我们定义并初始化神经元的活动:
1
2
3
4
5
6
7
|
float a[NN+1]; // activaty of each neurons
a[0] = 0.0;
a[1] = 1.0;
a[2] = 0;
|
接下来,我们定义并初始化神经链接的权重:
1
2
3
4
5
6
|
float w[NN+1][NN+1]; // weight of links between each neurons
w[0][2] = 0.3;
w[1][2] = 0.2;
|
最后,我们可以使用下面的激活函数计算输出神经元的新活动值,
因此,神经元2的输出激活值可以写成如下:
1
2
3
|
a[2] = phi( a[0]*w[0][2] + a[1]*w[1][2] );
|
这是组合在一起的完整示例,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#include <stdio.h>
#define NN 3 // number of neurons
// let's define a transfer function (or threshold) for the output neuron
float phi(float sum)
{
return sum ; // linear transfer function f(sum)=sum
}
int main()
{
float a[NN+1]; // activaty of each neurons
float w[NN+1][NN+1]; // weight of links between each neurons
//let's define activity of two input neurons (a0, a1) and one output neuron (a2)
a[0] = 0.0;
a[1] = 1.0;
a[2] = 0;
//let's define weights of signals comes from two input neurons to output neuron (0 to 2 and 1 to 2)
w[0][2] = 0.3;
w[1][2] = 0.2;
// Let's fire our artificial neuron activity, output will be
a[2] = phi( a[0]*w[0][2] + a[1]*w[1][2] );
printf("%10.6f\n", a[2]);
getchar();
return 0;
}
|
这个示例既友好又适用于C和C++代码,意味着你可以在物联网上使用MicroC、Ardunio C、Dev C++,或者你也可以选择GNU C/C++、Visual C++,或者用C++ Builder更专业地进行开发。