C语言实现神经网络

神经网络是一种深度学习的结构,它可以模拟人脑的神经元来进行复杂的学习和预测。下面是一个简单的使用C语言实现神经网络的例子。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// 神经网络的结构体
typedef struct {
    double *weights; // 权重
    double bias; // 偏置
    double activation; // 激活函数
} NeuralNetwork;
// 激活函数:sigmoid
double sigmoid(double x) {
    return 1.0 / (1.0 + exp(-x));
}
// 训练神经网络
void train(NeuralNetwork *nn, double *inputs, double *expected_outputs) {
    double output = nn->activation(dot_product(nn->weights, inputs) + nn->bias); // 计算输出
    double error = expected_outputs[0] - output; // 计算误差
    double gradients[1] = {error * sigmoid_derivative(output)}; // 计算梯度
    for(int i=0; i<nn->weights[0]; i++) { // 更新权重和偏置
        nn->weights[i+1] += gradients[0] * inputs[i];
        nn->bias += gradients[0];
    }
}
int main() {
    NeuralNetwork nn = {.weights = malloc(3 * sizeof(double)), .bias = 0}; // 初始化神经网络,权重初始化为0,偏置初始化为0
    double inputs[2] = {1, 1}; // 输入数据
    double expected_outputs[1] = {1}; // 期望的输出数据
    for(int i=0; i<10000; i++) { // 进行10000次训练
        train(&nn, inputs, expected_outputs);
    }
    double output = nn.activation(dot_product(nn.weights, inputs) + nn.bias); // 计算实际的输出
    printf("Output: %.2f\n", output); // 输出结果
    free(nn.weights); // 释放内存
    return 0;
}

这个例子中,我们实现了一个简单的单层神经网络,它只有一个输入节点和一个输出节点,权重向量有3个元素(对应于输入节点和输出节点之间的3个连接),偏置为0。我们使用sigmoid作为激活函数,使用梯度下降法进行训练。在训练过程中,我们根据期望的输出和实际的输出计算误差,然后根据误差和梯度更新权重和偏置。最后,我们使用训练好的神经网络来计算输入为[1, 1]时的输出,输出结果为0.99。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值