C语言创建一个神经网络
时间: 2023-09-15 13:21:54 浏览: 72
matlab与神经网络
由于神经网络是一个比较复杂的模型,用C语言实现可能比较困难,需要编写大量的代码。以下是一个简单的示例代码,用于创建一个基本的神经网络模型。这个神经网络是一个三层全连接神经网络,包括一个输入层、一个隐藏层和一个输出层。输入层有4个神经元,隐藏层有5个神经元,输出层有3个神经元。
```
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define INPUT_SIZE 4
#define HIDDEN_SIZE 5
#define OUTPUT_SIZE 3
double sigmoid(double x) {
return 1.0 / (1.0 + exp(-x));
}
double sigmoid_derivative(double x) {
return x * (1.0 - x);
}
int main() {
double inputs[INPUT_SIZE] = {0.1, 0.2, 0.3, 0.4};
double hidden[HIDDEN_SIZE];
double output[OUTPUT_SIZE];
double weights_in_h[INPUT_SIZE][HIDDEN_SIZE];
double weights_h_out[HIDDEN_SIZE][OUTPUT_SIZE];
double bias_h[HIDDEN_SIZE];
double bias_out[OUTPUT_SIZE];
// Initialize weights and biases with random values
srand(time(NULL));
for (int i = 0; i < INPUT_SIZE; i++) {
for (int j = 0; j < HIDDEN_SIZE; j++) {
weights_in_h[i][j] = (double)rand() / RAND_MAX;
}
}
for (int i = 0; i < HIDDEN_SIZE; i++) {
for (int j = 0; j < OUTPUT_SIZE; j++) {
weights_h_out[i][j] = (double)rand() / RAND_MAX;
}
bias_h[i] = (double)rand() / RAND_MAX;
}
for (int i = 0; i < OUTPUT_SIZE; i++) {
bias_out[i] = (double)rand() / RAND_MAX;
}
// Forward pass
for (int i = 0; i < HIDDEN_SIZE; i++) {
double sum = 0.0;
for (int j = 0; j < INPUT_SIZE; j++) {
sum += inputs[j] * weights_in_h[j][i];
}
hidden[i] = sigmoid(sum + bias_h[i]);
}
for (int i = 0; i < OUTPUT_SIZE; i++) {
double sum = 0.0;
for (int j = 0; j < HIDDEN_SIZE; j++) {
sum += hidden[j] * weights_h_out[j][i];
}
output[i] = sigmoid(sum + bias_out[i]);
}
// Backward pass (not implemented here)
// Print the results
printf("Inputs: ");
for (int i = 0; i < INPUT_SIZE; i++) {
printf("%.2f ", inputs[i]);
}
printf("\n");
printf("Hidden layer: ");
for (int i = 0; i < HIDDEN_SIZE; i++) {
printf("%.2f ", hidden[i]);
}
printf("\n");
printf("Output: ");
for (int i = 0; i < OUTPUT_SIZE; i++) {
printf("%.2f ", output[i]);
}
printf("\n");
return 0;
}
```
该代码创建了一个具有4个输入神经元,5个隐藏神经元和3个输出神经元的神经网络。它随机初始化了所有权重和偏差,并使用Sigmoid函数作为激活函数。代码还包括前向传递的实现,但没有包括反向传递的实现。在此示例中,我们只是打印了网络的输出结果。如果要在更实际的应用中使用神经网络,需要编写更复杂的代码,包括反向传递、优化算法、损失函数等。
阅读全文