C语言实现的人工神经网络代码:
(图片来源网络,侵删)
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> #define INPUT_NEURONS 3 #define HIDDEN_NEURONS 4 #define OUTPUT_NEURONS 2 #define LEARNING_RATE 0.5 #define EPOCHS 10000 double sigmoid(double x) { return 1.0 / (1.0 + exp(x)); } double sigmoid_derivative(double x) { double sigmoid_value = sigmoid(x); return sigmoid_value * (1 sigmoid_value); } void train(double input[], double target[]) { static double weights_ih[INPUT_NEURONS][HIDDEN_NEURONS]; static double weights_ho[HIDDEN_NEURONS][OUTPUT_NEURONS]; static double hidden[HIDDEN_NEURONS]; static double output[OUTPUT_NEURONS]; for (int i = 0; i < INPUT_NEURONS; i++) { for (int j = 0; j < HIDDEN_NEURONS; j++) { hidden[j] += input[i] * weights_ih[i][j]; } } for (int j = 0; j < HIDDEN_NEURONS; j++) { hidden[j] = sigmoid(hidden[j]); } for (int j = 0; j < HIDDEN_NEURONS; j++) { for (int k = 0; k < OUTPUT_NEURONS; k++) { output[k] += hidden[j] * weights_ho[j][k]; } } for (int k = 0; k < OUTPUT_NEURONS; k++) { output[k] = sigmoid(output[k]); } double output_error[OUTPUT_NEURONS]; for (int k = 0; k < OUTPUT_NEURONS; k++) { output_error[k] = target[k] output[k]; } double hidden_error[HIDDEN_NEURONS]; for (int j = 0; j < HIDDEN_NEURONS; j++) { hidden_error[j] = 0; for (int k = 0; k < OUTPUT_NEURONS; k++) { hidden_error[j] += output_error[k] * weights_ho[j][k]; } hidden_error[j] *= sigmoid_derivative(hidden[j]); } for (int j = 0; j < HIDDEN_NEURONS; j++) { for (int i = 0; i < INPUT_NEURONS; i++) { weights_ih[i][j] += LEARNING_RATE * hidden_error[j] * input[i]; } } for (int j = 0; j < HIDDEN_NEURONS; j++) { for (int k = 0; k < OUTPUT_NEURONS; k++) { weights_ho[j][k] += LEARNING_RATE * output_error[k] * hidden[j]; } } } int main() { srand(time(NULL)); double input[INPUT_NEURONS]; double target[OUTPUT_NEURONS]; for (int i = 0; i < EPOCHS; i++) { for (int j = 0; j < INPUT_NEURONS; j++) { input[j] = (double)rand() / RAND_MAX; } for (int k = 0; k < OUTPUT_NEURONS; k++) { target[k] = (double)rand() / RAND_MAX; } train(input, target); } return 0; }
【C#语言实现人工神经网络代码】:
using System; using System.Linq; using Accord.Neuro; using Accord.Neuro.Learning; using Accord.Statistics.Distributions.Univariate; using Accord.Math; namespace ArtificialNeuralNetwork { class Program { static void Main(string[] args) { // 创建神经网络,3个输入神经元,4个隐藏神经元,2个输出神经元 ActivationNetwork network = new ActivationNetwork(new SigmoidFunction(), 3, 4, 2); // 使用反向传播学习算法 BackPropagationLearning teacher = new BackPropagationLearning(network); // 训练数据 double[][] inputs = { new double[] { 0, 0, 1 }, // 输入数据 new double[] { 1, 1, 1 }, new double[] { 1, 0, 1 }, new double[] { 0, 1, 1 } }; // 目标输出数据 double[][] outputs = { new double[] { 0, 0 }, // 期望输出数据 new double[] { 0, 1 }, new double[] { 1, 1 }, new double[] { 1, 0 } }; // 训练神经网络 double error = teacher.Run(inputs, outputs); // 测试神经网络 double[] testInput = new double[] { 1, 1, 0 }; // 测试输入数据 double[] testOutput = network.Compute(testInput).ToArray(); // 计算输出数据 Console.WriteLine("Test input: " + string.Join(", ", testInput)); Console.WriteLine("Test output: " + string.Join(", ", testOutput)); } } }
FAQs:
Q1: C语言和C#语言实现的人工神经网络有什么区别?
A1: C语言实现的人工神经网络是从头开始编写的,而C#语言实现的人工神经网络使用了Accord.NET库,这是一个开源的机器学习库,提供了许多预先实现的神经网络功能,C#语言实现的代码更简洁,易于理解。
Q2: 如何使用这些代码进行实际的预测任务?
A2: 需要根据实际问题调整神经网络的结构,例如输入、隐藏和输出神经元的数量,使用训练数据集对神经网络进行训练,使用训练好的神经网络对新的输入数据进行预测,注意,这些代码仅作为示例,实际应用中可能需要调整参数和结构以获得更好的预测效果。
(图片来源网络,侵删)
(图片来源网络,侵删)
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/728948.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复