{///'#include///' //n#include///' //n#include///' //n#include///' //n#include///' //n#include///' //n//n// 神经网络类//nclass NeuralNetwork {//nprivate://n std::vector<std::vector> weights; // 权重矩阵//n std::vector biases; // 偏置向量//n std::vector outputs; // 输出向量//n int numInputs; // 输入数量//n//npublic://n NeuralNetwork(int numInputs, int numHidden, int numOutputs) {//n this->numInputs = numInputs;//n weights.resize(numInputs, std::vector(numHidden));//n outputs.resize(numOutputs);//n biases.resize(numHidden, 1.0);//n//n // 随机初始化权重//n std::random_device rd;//n std::mt19937 gen(rd());//n std::uniform_real_distribution<> dis(-1.0, 1.0);//n for (int i = 0; i < numInputs; ++i) {//n for (int j = 0; j < numHidden; ++j) {//n weights[i][j] = dis(gen);//n }//n }//n }//n//n std::vector predict(const std::vector& inputs) {//n // 前向传播//n for (int j = 0; j < outputs.size(); ++j) {//n double sum = 0.0;//n for (int i = 0; i < numInputs; ++i) {//n sum += inputs[i] * weights[i][j];//n }//n sum += biases[j];//n outputs[j] = sigmoid(sum);//n }//n return outputs;//n }//n//nprivate://n double sigmoid(double x) {//n return 1.0 / (1.0 + exp(-x));//n }//n};//n//n// 读取训练数据//nstd::vector<std::pair<std::vector, std::vector>> readTrainingData(const std::string& filename) {//n std::ifstream file(filename);//n std::vector<std::pair<std::vector, std::vector>> trainingData;//n std::string line;//n//n while (std::getline(file, line)) {//n std::istringstream iss(line);//n std::vector inputs, outputs;//n double val;//n//n while (iss >> val) {//n inputs.push_back(val);//n }//n//n if (!inputs.empty()) {//n trainingData.push_back({inputs, outputs});//n }//n }//n//n file.close();//n return trainingData;//n}//n//n// 训练神经网络//nvoid trainNeuralNetwork(NeuralNetwork& nn, const std::vector<std::pair<std::vector, std::vector>>& trainingData, int numEpochs) {//n for (int epoch = 0; epoch < numEpochs; ++epoch) {//n double totalLoss = 0.0;//n for (const auto& data : trainingData) {//n const auto& inputs = data.first;//n const auto& targets = data.second;//n//n std::vector predictions = nn.predict(inputs);//n//n double loss = 0.0;//n for (int i = 0; i < targets.size(); ++i) {//n double error = targets[i] - predictions[i];//n loss += error * error;//n }//n totalLoss += loss;//n//n // 反向传播//n for (int i = 0; i < targets.size(); ++i) {//n double error = targets[i] - predictions[i];//n double derivative = predictions[i] * (1.0 - predictions[i]);//n for (int j = 0; j < nn.numInputs; ++j) {//n nn.weights[j][i] += 0.1 * error * derivative * inputs[j];//n }//n nn.biases[i] += 0.1 * error * derivative;//n }//n }//n std::cout << ///'Epoch: ///' << epoch + 1 << ///', Loss: ///' << totalLoss << std::endl;//n }//n}//n//nint main() {//n // 读取训练数据//n std::vector<std::pair<std::vector, std::vector>> trainingData = readTrainingData(///'training_data.txt///');//n//n // 创建神经网络//n NeuralNetwork nn(trainingData[0].first.size(), 5, trainingData[0].second.size());//n//n // 训练神经网络//n trainNeuralNetwork(nn, trainingData, 1000);//n//n // 使用神经网络进行聊天//n std::string input;//n while (true) {//n std::cout << ///'You: ///';//n std::getline(std::cin, input);//n//n // 将输入转换为神经网络的输入向量//n std::vector inputs;//n std::istringstream iss(input);//n double val;//n while (iss >> val) {//n inputs.push_back(val);//n }//n//n // 使用神经网络进行预测//n std::vector predictions = nn.predict(inputs);//n//n // 输出神经网络的预测结果//n std::cout << ///'AI: ///';//n for (const auto& p : predictions) {//n std::cout << p << ///' ///';//n }//n std::cout << std::endl;//n }//n//n return 0;//n}//n//n/


原文地址: https://www.cveoy.top/t/topic/pPDh 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录