以下是一个使用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));