使用各种语言实现最简单的3层神经网络代码

以下是一个使用Python实现的最简单的3层神经网络代码:

```python

import numpy as np

# 定义神经网络的结构

n_input = 2 # 输入层的节点数

n_hidden = 3 # 隐藏层的节点数

n_output = 1 # 输出层的节点数

# 初始化神经网络的权重

weights = {

    'hidden': np.random.uniform(size=(n_input, n_hidden)),

    'output': np.random.uniform(size=(n_hidden, n_output))

}

# 执行前向传播

def forward_propagation(X):

    hidden_layer_input = np.dot(X, weights['hidden'])

    hidden_layer_output = sigmoid(hidden_layer_input)

    output_layer_input = np.dot(hidden_layer_output, weights['output'])

    output_layer_output = sigmoid(output_layer_input)

    return output_layer_output

# 定义激活函数(sigmoid)

def sigmoid(x):

    return 1 / (1 + np.exp(-x))

# 示例输入

X = np.array([[1, 2], [3, 4], [5, 6]])

# 执行前向传播并打印输出

output = forward_propagation(X)

print(output)

```

这个简单的3层神经网络具有2个输入节点,3个隐藏层节点和1个输出节点。在前向传播过程中,输入数据会通过隐藏层中的权重和激活函数传递,最终输出一个预测值。上述代码中的权重是随机初始化的,通过计算输入和权重的点积,然后将结果传递给激活函数(这里使用sigmoid函数),得到隐藏层的输出。然后再将隐藏层的输出与输出层的权重进行点积计算,并通过激活函数得到最终的输出。

以下是使用C语言实现的最简单的3层神经网络代码:

```c

#include <stdio.h>

#include <math.h>

#define N_INPUT 2 // 输入层的节点数

#define N_HIDDEN 3 // 隐藏层的节点数

#define N_OUTPUT 1 // 输出层的节点数

// 函数声明

double sigmoid(double x);

void forward_propagation(double input[N_INPUT], double hidden_output[N_HIDDEN], double output[N_OUTPUT]);

int main() {

    // 初始化神经网络的权重

    double weights_hidden[N_INPUT][N_HIDDEN] = {

        {0.1, 0.4, 0.7},

        {0.2, 0.5, 0.8}

    };

    double weights_output[N_HIDDEN][N_OUTPUT] = {

        {0.6},

        {0.9},

        {0.3}

    };

    // 示例输入

    double input[N_INPUT] = {1, 2};

    // 进行前向传播并打印输出

    double hidden_output[N_HIDDEN];

    double output[N_OUTPUT];

    forward_propagation(input, hidden_output, output);

    printf("%lf\n", output[0]);

    return 0;

}

// 执行前向传播

void forward_propagation(double input[N_INPUT], double hidden_output[N_HIDDEN], double output[N_OUTPUT]) {

    // 计算隐藏层的输出

    for (int i = 0; i < N_HIDDEN; i++) {

        double hidden_input = 0;

        for (int j = 0; j < N_INPUT; j++) {

            hidden_input += input[j] * weights_hidden[j][i];

        }

        hidden_output[i] = sigmoid(hidden_input);

    }

    // 计算输出层的输出

    for (int i = 0; i < N_OUTPUT; i++) {

        double output_input = 0;

        for (int j = 0; j < N_HIDDEN; j++) {

            output_input += hidden_output[j] * weights_output[j][i];

        }

        output[i] = sigmoid(output_input);

    }

}

// 定义激活函数(sigmoid)

double sigmoid(double x) {

    return 1 / (1 + exp(-x));

猜你喜欢

转载自blog.csdn.net/ls1300005/article/details/131712463