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