C++builder中的人工智能(4)基于结构的简单人工神经元模型

你想从头开始开发自己的人工智能应用吗?想学习如何在C++中构建一个简单的人工神经元模型吗?在这篇文章中,我们将通过一个非常简单的人工神经元示例来解释。之前我们已经发布了C++中的简单人工神经元模型C++中的超简单人工神经网络(ANN)示例,我们还发布了基于数组的简单人工神经元模型在C++中的实现。如果你是AI技术的新手,我们强烈推荐你先阅读AI技术入门

一个简单的ANN模型

我们之前介绍过这个简单的AI神经元模型,让我们回顾一下。一个最小人工神经元包含一个激活值(记为a)、一个激活函数(记为phi())以及加权的(w)输入网络连接。因此,它有一个激活值、一个激活函数,以及一个或多个权重,这取决于它的输入网络数量。

这是一个非常简单的人工智能技术中的人工神经网络。现在让我们通过这个示例来改进我们的神经元模型,并使用数组来创建一个人工神经元模型。

基于结构的人工神经元模型在C++

这是另一个使用结构的简单神经元示例。在C和C++编程中,一个数据结构struct)是内存中的数据块,将一组数据元素组合在一起,并给它们一个名称,这些数据元素是变量(整数、浮点数、字符串等),称为成员,它们都可以在单个名称下定义为新变量。它们可以有不同的类型和不同的长度。数据结构可以通过使用struct语句来声明,使用以下语法:

struct struct_name {
    // 在这里列出数据成员
} dataobject_names;

结构体主要用于C编程语言,你也可以在C++中使用和存储数据。在C++中,通常使用类来存储数据和函数,而不是结构体。结构体和类之间的主要区别是类可以包含数据和函数,而结构体只包含数据,函数可以外部使用。结构体的一个好处是它们具有固定的大小。

一个最小人工神经元包含一个激活值a)、一个激活函数phi())以及加权的(w)输入网络连接。因此,我们可以使用结构体在C++中定义一个简单的神经元模型,如下所示,

struct st_neuron {
    float a; // 每个神经元的活动
    float w[NN+1]; // 神经元之间连接的权重
};

如果所有神经元都相互连接,或者神经元数量很少,这是一个很好的例子。这个例子也非常适合在只能编译C语言的IoT机器上进行计算。这里NN表示神经元的数量,权重的数量取决于网络连接的数量,正确的方法可能是使用指向数组的指针,但我们将在这里使用这个简单模型。现在我们可以为NN数量的神经元创建我们的**n[]**人工神经元结构,如下所示:

struct st_neuron n[NN+1];

我们可以如下定义两个输入神经元(a0, a1)和一个输出神经元(a2)的活动:

n[0].a=0.0;
n[1].a=1.0;
n[2].a=0;

请注意,这里的n[2]是我们的输出神经元,我们将在给定0的情况下计算它的新激活值。

在我们上面的示例中,两个输入神经元连接到输出神经元。因此我们有2个连接,这意味着我们有权重。我们可以如下定义来自两个输入神经元到输出神经元(0到2和1到2)的信号权重:

n[0].w[2]=0.3;
n[1].w[2]=0.2;

现在我们需要一个激活函数,让我们为输出神经元定义一个简单的激活函数phi()(转移函数或阈值):

float phi(float sum) {
    return sum; // 线性转移函数 f(sum) = sum
}

我们可以通过激活函数激发我们的人工神经元来计算它的活动。让我们激发n[2],计算输出神经元的激活如下:

n[2].a=phi(n[0].a*n[0].w[2]+n[1].a*n[1].w[2]);

让我们将它们组合成一个完整的C++示例,如下所示:

#include <stdio.h>
#define NN 3 // 神经元数量
struct st_neuron {
    float a; // 每个神经元的活动
    float w[NN+1]; // 神经元之间连接的权重
    float phi; // 每个神经元的活动输出阈值
};
struct st_neuron n[NN+1];
void main() {
    // 定义两个输入神经元(a0, a1)和一个输出神经元(a2)的活动
    n[0].a=0.0;
    n[1].a=1.0;
    n[2].a=0;
    // 定义来自两个输入神经元到输出神经元(0到2和1到2)的信号权重
    n[0].w[2]=0.3;
    n[1].w[2]=0.2;
    // 激发我们的人工神经元活动,输出将是
    n[2].a=phi(n[0].a*n[0].w[2]+n[1].a*n[1].w[2]);
    printf("%10.6f\n",n[2].a);
    getchar();
    return 0;
}

最后说明,

这是一个非常简单的基于结构的人工神经元示例,旨在让你了解如何在C++中开发自己的基于结构的神经元模型。如果你有很多神经元,并且每个神经元都有连接,那么连接和权重应该存储在这个结构之外。你也可以使用指针指向每个神经元结构的网络连接数组。这个示例非常适合理解C++中的简单人工神经元,并且它在只能使用C或C++的IoT上很容易使用。它适用于神经元数量较少的神经网络。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

caridle

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

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

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

打赏作者

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

抵扣说明:

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

余额充值