当前位置: 首页 > news >正文

正规的大连网站建设红色网站 后台

正规的大连网站建设,红色网站 后台,工作作风方面存在的问题及整改措施2023,跨境电商最好的平台循环神经网络#xff08;Recurrent Neural Network, RNN#xff09;是一种用于处理序列数据的神经网络模型。与传统的前馈神经网络不同#xff0c;RNN具有内部记忆能力#xff0c;可以捕捉到序列中元素之间的依赖关系。这种特性使得RNN在自然语言处理、语音识别、时间序列预…循环神经网络Recurrent Neural Network, RNN是一种用于处理序列数据的神经网络模型。与传统的前馈神经网络不同RNN具有内部记忆能力可以捕捉到序列中元素之间的依赖关系。这种特性使得RNN在自然语言处理、语音识别、时间序列预测等需要考虑上下文信息的任务中表现出色。 RNN的基本结构 RNN的基本结构包括输入层、隐藏层和输出层。在处理序列数据时RNN会按照序列的时间顺序逐个处理每个元素。对于序列中的每一个时间步RNN不仅会接收该时间步的输入还会接收上一个时间步的隐藏状态作为输入。这样通过将之前的信息传递给后续的处理步骤RNN能够利用历史信息来影响当前的输出。 方法 InitializeWeightsAndBiases()使用随机值初始化权重矩阵和偏置向量。Sigmoid()激活函数用于隐藏层的非线性变换。RandomMatrix()生成指定大小的随机矩阵用于权重的初始化。Softmax()通常用于多分类问题中的输出层将输出转换为概率分布。Forward()前向传播方法根据输入数据计算每个时间步的输出。它会更新隐藏状态并最终返回所有时间步的输出列表。Backward()反向传播方法用于根据预测输出与目标输出之间的差异调整模型参数。它计算梯度并更新权重和偏置。UpdateWeights()根据计算出的梯度更新模型的权重和偏置。Train()训练模型的方法通过多次迭代epoch对输入数据进行前向传播和反向传播以优化模型参数。Predict()预测方法根据输入数据返回每个时间步的预测结果索引即输出概率最高的类别。 说明 这只是一个基础的 RNN 模型实现实际应用中可能需要考虑更多的优化技术比如使用长短期记忆网络LSTM、门控循环单元GRU等更复杂的架构来改善性能。 using System; using System.Linq; using System.Collections.Generic;namespace Project.NeuralNetwork {/// summary/// 构建神经网络/// /summarypublic class RnnModel{/// summary/// 输入层大小/// /summaryprivate readonly int _inputSize;/// summary/// 隐藏层大小/// /summaryprivate readonly int _hiddenSize;/// summary/// 输出层大小/// /summaryprivate readonly int _outputSize;/// summary/// 输入到隐藏层的权重/// /summaryprivate double[,] _weightsInputHidden;/// summary/// 隐藏层到隐藏层的权重/// /summaryprivate double[,] _weightsHiddenHidden;/// summary/// 隐藏层到输出层的权重/// /summaryprivate double[,] _weightsHiddenOutput;/// summary/// 隐藏层偏置/// /summaryprivate double[] _biasHidden;/// summary/// 输出层偏置/// /summaryprivate double[] _biasOutput;/// summary/// 隐藏层状态/// /summaryprivate double[] _hiddenState;/// summary/// 初始化模型的构造函数/// /summary/// param nameinputSize/param/// param namehiddenSize/param/// param nameoutputSize/parampublic RnnModel(int inputSize, int hiddenSize, int outputSize){_inputSize inputSize;_hiddenSize hiddenSize;_outputSize outputSize;InitializeWeightsAndBiases();}/// summary/// 初始化权重和偏置/// /summaryprivate void InitializeWeightsAndBiases(){_weightsInputHidden RandomMatrix(_inputSize, _hiddenSize);_weightsHiddenHidden RandomMatrix(_hiddenSize, _hiddenSize);_weightsHiddenOutput RandomMatrix(_hiddenSize, _outputSize);_biasHidden new double[_hiddenSize];_biasOutput new double[_outputSize];}/// summary/// 激活函数/// /summary/// param namex/param/// returns/returnsprivate double Sigmoid(double x){return 1 / (1 Math.Exp(-x));}/// summary/// 生成随机矩阵/// /summary/// param namerows/param/// param namecols/param/// returns/returnsprivate double[,] RandomMatrix(int rows, int cols){var matrix new double[rows, cols];var random new Random();for (int i 0; i rows; i){for (int j 0; j cols; j){matrix[i, j] random.NextDouble() * 2 - 1; // [-1, 1]}}return matrix;}/// summary/// 前向传播/// /summary/// param nameinputs/param/// returns/returnspublic Listdouble[] Forward(Listdouble[] inputs){_hiddenState new double[_hiddenSize];var outputs new Listdouble[]();foreach (var input in inputs){var hidden new double[_hiddenSize];for (int h 0; h _hiddenSize; h){hidden[h] _biasHidden[h];for (int i 0; i _inputSize; i){hidden[h] _weightsInputHidden[i, h] * input[i];}for (int hh 0; hh _hiddenSize; hh){hidden[h] _weightsHiddenHidden[hh, h] * _hiddenState[hh];}hidden[h] Sigmoid(hidden[h]);}_hiddenState hidden;var output Output(hidden);outputs.Add(output);}return outputs;}/// summary/// 输出层/// /summary/// param nameh/param/// returns/returnsprivate double[] Output(double[] h){double[] y new double[_outputSize];for (int i 0; i _outputSize; i){double sum _biasOutput[i];for (int j 0; j _hiddenSize; j){sum h[j] * _weightsHiddenOutput[j, i];}y[i] sum;}return Softmax(y);}/// summary/// 输出层的激活函数/// /summary/// param namex/param/// returns/returnsprivate double[] Softmax(double[] x){double max x.Max();double expSum x.Select(xi Math.Exp(xi - max)).Sum();return x.Select(xi Math.Exp(xi - max) / expSum).ToArray();}/// summary/// 反向传播/// /summary/// param nameinputs/param/// param nametargets/param/// param nameoutputs/param/// param namelearningRate/paramprivate void Backward(Listdouble[] inputs, Listdouble[] targets, Listdouble[] outputs, double learningRate){//输入到隐藏层的梯度double[,] dWeightsInputHidden new double[_inputSize, _hiddenSize];//隐藏层到隐藏层的梯度double[,] dWeightsHiddenHidden new double[_hiddenSize, _hiddenSize];//隐藏层到输出层的梯度double[,] dWeightsHiddenOutput new double[_hiddenSize, _outputSize];//隐藏层的偏置double[] dBiasHidden new double[_hiddenSize];//输出层的偏置double[] dBiasOutput new double[_outputSize];for (int t inputs.Count - 1; t 0; t--){double[] targetVector new double[_outputSize];Array.Copy(targets[t], targetVector, _outputSize);// 计算输出层的误差for (int o 0; o _outputSize; o){dBiasOutput[o] outputs[t][o] - targetVector[o];}// 计算隐藏层到输出层的梯度for (int o 0; o _outputSize; o){for (int h 0; h _hiddenSize; h){dWeightsHiddenOutput[h, o] dBiasOutput[o] * _hiddenState[h];}}// 计算隐藏层的偏置double[] dh new double[_hiddenSize];for (int h 0; h _hiddenSize; h){double error 0;for (int o 0; o _outputSize; o){error dBiasOutput[o] * _weightsHiddenOutput[h, o];}dh[h] error * (_hiddenState[h] * (1 - _hiddenState[h]));}for (int h 0; h _hiddenSize; h){dBiasHidden[h] dh[h];}//计算输入到隐藏层的梯度for (int h 0; h _hiddenSize; h){for (int i 0; i _inputSize; i){dWeightsInputHidden[i, h] dh[h] * inputs[t][i];}}// 计算输入到隐藏层的梯度if (t 0){for (int h 0; h _hiddenSize; h){for (int hh 0; hh _hiddenSize; hh){dWeightsHiddenHidden[hh, h] dh[h] * _hiddenState[hh];}}}}// 更新权重和偏置UpdateWeights(dWeightsInputHidden, dWeightsHiddenHidden, dWeightsHiddenOutput, dBiasHidden, dBiasOutput, learningRate);}/// summary/// 更新权重/// /summary/// param namedWxh/param/// param namedWhh/param/// param namedWhy/param/// param namedbh/param/// param namedby/param/// param namelearningRate/paramprivate void UpdateWeights(double[,] dWeightsInputHidden, double[,] dWeightsHiddenHidden, double[,] dWeightsHiddenOutput, double[] dBiasHidden, double[] dBiasOutput, double learningRate){// 更新输入到隐藏层的权重for (int i 0; i _inputSize; i){for (int h 0; h _hiddenSize; h){_weightsInputHidden[i, h] - learningRate * dWeightsInputHidden[i, h];}}//更新隐藏层到隐藏层的权重for (int h 0; h _hiddenSize; h){for (int hh 0; hh _hiddenSize; hh){_weightsHiddenHidden[h, hh] - learningRate * dWeightsHiddenHidden[h, hh];}}//更新隐藏层到输出层的权重for (int h 0; h _hiddenSize; h){for (int o 0; o _outputSize; o){_weightsHiddenOutput[h, o] - learningRate * dWeightsHiddenOutput[h, o];}}//更新隐藏层的偏置for (int h 0; h _hiddenSize; h){_biasHidden[h] - learningRate * dBiasHidden[h];}//更新输出层的偏置for (int o 0; o _outputSize; o){_biasOutput[o] - learningRate * dBiasOutput[o];}}/// summary/// 训练/// /summary/// param nameinputs/param/// param nametargets/param/// param nameepochs/param/// param namelearningRate/parampublic void Train(ListListdouble[] inputs, ListListdouble[] targets, double learningRate, int epochs){for (int epoch 0; epoch epochs; epoch){for (int i 0; i inputs.Count; i){Listdouble[] input inputs[i];Listdouble[] target targets[i];Listdouble[] outputs Forward(input);Backward(input, target, outputs, learningRate);}}}/// summary/// 预测/// /summary/// param nameinputs/param/// returns/returnspublic int[] Predict(Listdouble[] inputs){var output Forward(inputs);var predictedIndices output.Select(o Array.IndexOf(o, o.Max())).ToArray();return predictedIndices;}} } 准备训练数据训练网络测试并输出结果 public static void Rnn_Predict() {// 定义数据集var data new ListTuplestring[], string[]{Tuple.Create(new string[] { 早安 }, new string[] { 早上好 }),Tuple.Create(new string[] { 午安 }, new string[] { 中午好 }),Tuple.Create(new string[] { 晚安 }, new string[] { 晚上好 }),Tuple.Create(new string[] { 你好吗 }, new string[] { 我很好谢谢。 })};// 创建词汇表var allWords data.SelectMany(t t.Item1.Concat(t.Item2)).Distinct().ToList();var wordToIndex allWords.ToDictionary(word word, word allWords.IndexOf(word));// 将字符串转换为one-hot编码ListListdouble[] inputsData new ListListdouble[]();ListListdouble[] targetsData new ListListdouble[]();foreach (var item in data){var inputSequence item.Item1.Select(word OneHotEncode(word, wordToIndex)).ToList();var targetSequence item.Item2.Select(word OneHotEncode(word, wordToIndex)).ToList();inputsData.Add(inputSequence);targetsData.Add(targetSequence);}double[] OneHotEncode(string word, Dictionarystring, int wordToIndex){var encoding new double[wordToIndex.Count];encoding[wordToIndex[word]] 1;return encoding;}//开始训练int inputSize allWords.Count;int hiddenSize allWords.Count;int outputSize allWords.Count;RnnModel model new RnnModel(inputSize, hiddenSize, outputSize);int epochs 10000;double learningRate 0.1;model.Train(inputsData, targetsData, learningRate, epochs);//预测while (true){Console.Write(你: );string userInput Console.ReadLine();if (userInput.ToLower() exit){break;}if (!allWords.Contains(userInput)){Console.WriteLine(对不起我不认识这些词。);continue;}var testInput new Listdouble[] { OneHotEncode(userInput, wordToIndex) };var prediction model.Predict(testInput);var predictedWords prediction.Select(index allWords[index]).ToArray();Console.WriteLine($机器人: {string.Join(, , predictedWords)});} }
http://www.hkea.cn/news/14353212/

相关文章:

  • 杭州哪些做网站公司好深圳宝安区租房子多少钱一个月
  • 有没有给宝宝做辅食的网站wordpress q a插件
  • 制作伪装网站青岛网站设计推广
  • 上海网站建设企业原创设计
  • 网站的基本建设投资网站拍照的幕布
  • 网站建设哪家公司便宜idea建设完整的网站
  • 汕头网站推广教程电子商务网站建设可用性
  • 大地保险网站品牌建设内容措施
  • 做网站背景全覆盖的代码什么是网络营销中最容易出问题的步骤
  • 北京正规网站建设经历备案查询网站
  • 公司网站做推广一流的内蒙古网站建设
  • 建站之星收费版wordpress给文章设置标签
  • 专业维护网站的公司企业网络架构图
  • 做企业网站到哪里找网站推广指的是什么
  • Net网站开发多少钱沧州网站建设沧州
  • 个人网站建设怎么样wordpress发布时间格式
  • 网站建设实验分析总结有没有专门做美食海报的网站
  • 成都网站建设 今网科技saas系统排名
  • 网站建设收费报价表怎样开通微信小程序卖东西
  • 外贸网站建设平台哪个好展示型网站设计
  • 被网站管理员设置拦截五华网站建设 优帮云
  • 网站制作公司中企动力推荐买好域名之后怎么做网站
  • 药品推荐网站模板wordpress 登陆插件下载
  • 北京网站改版要注意什么免费域名
  • wordpress的网站怎么保存js做网站登录界面
  • js进入网站时有指导怎么做做网页多少钱一个页面
  • 哪个地方旅游网站做的比较好app界面设计规范
  • WordPress去掉网站留言框长春网站建设公司排名前十
  • 如何做网站代码广告设计公司任务书
  • 西安在线网站制作wordpress_百科