C++builder中的人工智能(5)基于数组的简单人工神经元模型

嘿,未来的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更专业地进行开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caridle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值