在这篇文章中,我们将探讨双曲正切函数(tanh)是什么,以及如何在C++中使用这个函数。让我们来回答这些问题。
在AI中激活函数意味着什么?
激活函数(phi()),也称为转移函数或阈值函数,它根据净输入函数的给定值(sum)确定激活值(a = phi(sum))。在这里,sum是它们权重中的信号之和,激活函数是这个和的新值,具有给定的函数或条件。换句话说,激活函数是将所有加权信号的和转换为该信号的新激活值的方法。有不同类型的激活函数,通常使用的是线性(恒等)、双极性和逻辑(sigmoid)函数。
在C++中,你可以创建自己的激活函数。注意,“sum”是净输入函数的结果,它计算所有加权信号的和。我们将使用这些作为输入函数的结果。在这里,人工神经元(输出值)的激活值可以通过激活函数如下所示,
通过使用这个sum净输入函数值和phi()激活函数,让我们看看C++中的一些激活函数。
什么是双曲正切函数或tanh()?
双曲正切是一个三角函数tanh(),如下所示,
双曲函数出现在双曲几何中的角度和距离的计算中,结果范围在-1到1之间。它们也出现在许多线性微分方程、三次方程和拉普拉斯方程在直角坐标系中的解中。拉普拉斯方程在许多物理领域中都很重要,包括电磁理论、热传递、流体动力学和特殊相对论。双曲函数有独特的解到微分方程f' = 1 - f^2, with f(0) = 0。
除了所有这些,双曲正切函数也可以作为一个激活函数,如下所示,
double phi(double sum) {
return(std::tanh(sum)); // 双曲正切函数
}
让我们在一个简单的ANN示例中使用这个函数。
有没有一个简单的ANN C++示例,使用双曲正切函数?
这里是一个简单的ANN示例,使用C++编程语言中的双曲正切函数
#include <iostream>
#define NN 2 // 神经元数量
class Tneuron { // 神经元类
public:
float a; // 每个神经元的活动
float w[NN+1]; // 神经元之间连接的权重
Tneuron() {
a = 0;
for (int i = 0; i <= NN; i++) w[i] = -1; // 如果权重是负数,则表示没有连接
}
// 定义输出神经元的激活函数(或阈值)
double activation_function(double sum) {
return(std::tanh(sum)); // 双曲正切函数
}
};
Tneuron ne[NN+1]; // 神经元对象
void fire(int nn) {
float sum = 0;
for (int j = 0; j <= NN; j++) {
if (ne[j].w[nn] >= 0) sum += ne[j].a * ne[j].w[nn];
}
ne[nn].a = ne[nn].activation_function(sum);
}
int main() {
// 定义两个输入神经元(a0, a1)和一个输出神经元(a2)的活动
ne[0].a = 0.0;
ne[1].a = 1.0;
ne[2].a = 0;
// 定义来自两个输入神经元到输出神经元(0到2和1到2)的信号权重
ne[0].w[2] = 0.3;
ne[1].w[2] = 0.2;
// 激发我们的人工神经元活动,输出将是
fire(2);
printf("%10.6f\n", ne[2].a);
getchar();
return 0;
}
双曲正切函数通常用于ANN应用中引入发展模型中的非线性,或者用于将信号限制在指定区间内。ANN元素计算其输入信号的线性组合,并应用有界的双曲正切函数作为激活函数作为输出(激活值)。这可以被定义为经典阈值神经元的平滑版本。最常用的激活函数选择,用于将大振幅的信号剪辑以保持神经网络的响应有界。
这是双曲正切函数。