C 中的神经网络
Neural network in C
我有一个训练有素的神经网络用于 Matlab 中的分类问题。我想使用经过训练的权重并将其应用到 C 中。我的神经网络输出为我提供了一个向量 7 (output2[i]
).
我如何在 Matlab 中使用相同的 vec2ind 函数,它接受一个向量矩阵,每个向量包含一个 1,returns 这些向量的索引,并在找到 1 后立即停止?
我想用C语言实现
我附上了部分代码
谢谢
double sum = 0;
/// matrix multiplication
for (int i = 0; i < 29; i++)
{
for (int k = 0; k < 2; k++)
{
sum += inputs[k] * weights[i][k];
}
/// apply activation function
output[i] = tanh_func(sum + biases[i]);
sum = 0;
}
/// output layer
for (int i = 0; i < 7; i++)
{
for (int k = 0; k < 29; k++)
{
sum += output[k] * weights2[i][k];
}
/// apply activation function
output2[i] = sigmoid(sum + biases2[i]);
sum = 0;
}
为了更好地理解,您可以使用三重指针 double*** tensor3d
初始化为
tensor3d = malloc( dim0 * sizeof( double** ));
for( int i = 0; i < dim0; ++i )
{
tensor3d[i] = malloc( dim1 * sizeof( double* ));
for( int j = 0; j < dim1; ++j )
{
tensor3d[i][j] = malloc( dim2 * sizeof( double ));
}
}
如果你已经在 3dim 数组中复制了向量矩阵,你可以这样做
int indices[dim0][dim1];
for( int i = 0; i < dim0; ++i )
{
for( int j = 0; j < dim1; ++j )
{
for( int k = 0; k < dim2; ++k )
{
if( tensor3d[i][j][k] > 0.99 && tensor3d[i][j][k] < 1.01 )
{
indices[i][j] = k;
break;
}
}
}
}
但在现实生活中,您会使用 1 个暗淡数组 flattensor3d[]
和
tensor3d[i][j][k] == flattensor3d[i * dim0 * dim1 + j * dim1 + k]
关于在 C 中仅编写 vec2ind,请参阅其他答案。
或者,如果您可以访问 MATLAB Coder,它可以自动将 MATLAB 代码(整个算法)转换为 C 代码:
https://www.mathworks.com/help/coder/index.html
我有一个训练有素的神经网络用于 Matlab 中的分类问题。我想使用经过训练的权重并将其应用到 C 中。我的神经网络输出为我提供了一个向量 7 (output2[i]
).
我如何在 Matlab 中使用相同的 vec2ind 函数,它接受一个向量矩阵,每个向量包含一个 1,returns 这些向量的索引,并在找到 1 后立即停止?
我想用C语言实现
我附上了部分代码
谢谢
double sum = 0;
/// matrix multiplication
for (int i = 0; i < 29; i++)
{
for (int k = 0; k < 2; k++)
{
sum += inputs[k] * weights[i][k];
}
/// apply activation function
output[i] = tanh_func(sum + biases[i]);
sum = 0;
}
/// output layer
for (int i = 0; i < 7; i++)
{
for (int k = 0; k < 29; k++)
{
sum += output[k] * weights2[i][k];
}
/// apply activation function
output2[i] = sigmoid(sum + biases2[i]);
sum = 0;
}
为了更好地理解,您可以使用三重指针 double*** tensor3d
初始化为
tensor3d = malloc( dim0 * sizeof( double** ));
for( int i = 0; i < dim0; ++i )
{
tensor3d[i] = malloc( dim1 * sizeof( double* ));
for( int j = 0; j < dim1; ++j )
{
tensor3d[i][j] = malloc( dim2 * sizeof( double ));
}
}
如果你已经在 3dim 数组中复制了向量矩阵,你可以这样做
int indices[dim0][dim1];
for( int i = 0; i < dim0; ++i )
{
for( int j = 0; j < dim1; ++j )
{
for( int k = 0; k < dim2; ++k )
{
if( tensor3d[i][j][k] > 0.99 && tensor3d[i][j][k] < 1.01 )
{
indices[i][j] = k;
break;
}
}
}
}
但在现实生活中,您会使用 1 个暗淡数组 flattensor3d[]
和
tensor3d[i][j][k] == flattensor3d[i * dim0 * dim1 + j * dim1 + k]
关于在 C 中仅编写 vec2ind,请参阅其他答案。
或者,如果您可以访问 MATLAB Coder,它可以自动将 MATLAB 代码(整个算法)转换为 C 代码: https://www.mathworks.com/help/coder/index.html