这是一个简单的C++控制台程序示例,用于实现一个简单的神经网络,进行二进制分类任务。请注意,这只是一个基本示例,没有使用任何深度学习库,因此它可能不具备高度优化和效率。
#include <iostream> #include <vector> #include <cmath> // 定义神经网络的层 struct Layer { std::vector<double> weights; double bias; }; // 定义激活函数(这里使用sigmoid函数) double sigmoid(double x) { return 1 / (1 + exp(-x)); } // 前向传播函数 double forwardPropagation(const std::vector<double>& input, const Layer& layer) { double sum = 0.0; for (size_t i = 0; i < input.size(); ++i) { sum += input[i] * layer.weights[i]; } sum += layer.bias; return sigmoid(sum); } int main() { // 定义训练数据 std::vector<std::vector<double>> trainingData{ {0, 0}, {0, 1}, {1, 0}, {1, 1} }; // 定义标签(对应每个训练数据的期望输出) std::vector<int> labels{ 0, 1, 1, 0 }; // 定义神经网络的结构 Layer hiddenLayer{ {1, 1}, 0 }; // 隐藏层 Layer outputLayer{ {1, -1}, 0 }; // 输出层 // 训练神经网络 for (size_t epoch = 0; epoch < 1000; ++epoch) { for (size_t i = 0; i < trainingData.size(); ++i) { // 前向传播 double hiddenOutput = forwardPropagation(trainingData[i], hiddenLayer); double output = forwardPropagation({ hiddenOutput }, outputLayer); // 计算误差 double error = labels[i] - output; // 反向传播更新权重和偏置 double delta = error * output * (1 - output); outputLayer.bias += delta; for (size_t j = 0; j < hiddenLayer.weights.size(); ++j) { hiddenLayer.weights[j] += delta * hiddenOutput * (1 - hiddenOutput) * trainingData[i][j]; } } } // 测试神经网络 std::cout << "Testing neural network:" << std::endl; for (size_t i = 0; i < trainingData.size(); ++i) { double hiddenOutput = forwardPropagation(trainingData[i], hiddenLayer); double output = forwardPropagation({ hiddenOutput }, outputLayer); std::cout << "Input: " << trainingData[i][0] << ", " << trainingData[i][1] << " Output: " << output << std::endl; } return 0; }
运行结果
标签:std,trainingData,示例,double,C++,神经网络,深度,size From: https://www.cnblogs.com/lizhiqiang0204/p/17934722.html