數學建模:MATLAB循環神經網絡

一、簡述

1.循環神經網絡

循環神經網絡(RNN)是一種用于處理序列數據的神經網絡。不同于傳統的前饋神經網絡,RNN在隱藏層中加入了自反饋連接,使得網絡能夠對序列中的每個元素執行相同的操作,同時保持一個“記憶”狀態,這個狀態會隨著序列的推進而更新。

循環神經網絡由輸入層、隱藏層、輸出層組成。輸入層接受傳入數據;隱藏層既接收當前時刻的輸入,也接收上一時刻隱藏層的狀態作為額外輸入,這種結構允許RNN對序列中的每個元素執行相同的操作,同時保持一個“記憶”狀態,這個狀態會隨著序列的推進而更新;輸出層基于隱藏層的狀態生成輸出。

訓練過程使用隨時間反向傳播的方法,按照標準的反向傳播算法進行權重更新,并對每個時間步都執行誤差反傳和權重更新。

2.長短期記憶網絡

長短期記憶網絡是循環神經網絡的一種特殊形式,用于解決傳統循環神經網絡在處理長時間依賴時遇到的梯度消失或爆炸問題。

通過引入細胞狀態和門控機制來控制信息的流動:輸入門決定哪些值將被更新到細胞狀態;遺忘門決定從細胞狀態中丟棄哪些信息;輸出門決定下一個隱藏狀態的內容。這樣的設計使LSTM能夠在長時間跨度內保留重要的信息,同時也能夠選擇性地忘記不相關的信息。

二、應用

1.預測一個數據

clear
clc%設置時間序列,代表數據中的每個時間點
time = 1:20;
%設置目標預測時間點
target_time = 21;%初始化數據數組,包含20個時間點的數據值
data = [0.845, 2.673, 0.215, 1.456, 2.987, 1.322, 0.653, 2.134, 1.567, 0.954, 2.456, 0.342, 1.789, 2.235, 0.789, 1.123, 2.567, 0.456, 1.890, 2.034];%用layrecnet函數創建一個循環神經網絡,第一個參數是輸入層數,第二個參數是隱藏層大小,即神經元的數量
net = layrecnet(1,10);%將data轉換成序列格式以便于循環神經網絡處理
%用con2seq函數將普通數值數組轉換為cell數組格式
input_seq = con2seq(data');%目標序列與輸入序列相同,用之前的數據點來預測下一個數據點
target_seq = con2seq(data');%用train函數訓練循環神經網絡
%輸入參數為循環神經網絡模型、輸入序列和目標序列,返回訓練后的網絡模型
net = train(net, input_seq, target_seq);%用sim函數使用訓練好的模型對輸入序列進行預測,返回預測結果的序列形式
sim_y = sim(net, input_seq);%用cell2mat函數將預測結果由cell數組格式轉換為普通數值數組
sim_Y = cell2mat(sim_y);%繪圖
figure;
%在同一圖中繪制多個曲線
hold on;%繪制原始訓練數據的折線圖
%LineWidth設置線條寬度,MarkerSize設置標記大小,DisplayName顯示圖例名稱
plot(time, data, 'o-', 'LineWidth', 1.5, 'MarkerSize', 8, 'DisplayName', '訓練數據');%繪制預測結果
%使用'sim_Y(end)'獲取最后一個預測值
plot(target_time, sim_Y(end), 'ro', 'MarkerSize', 10, 'DisplayName', '預測結果');xlabel('時間');ylabel('結果');% 添加圖例,'Location', 'best'讓MATLAB自動選擇圖例的最佳位置。
legend('Location', 'best');% 設置圖表標題。
title('預測');
hold off; 

?

2.預測多個數據

clear
clc%設置時間序列,代表數據中的每個時間點
time = 1:20;%設置目標預測時間點
target_time = 21 :25;%初始化數據數組,包含了20個時間點的數據值
data = [0.845, 2.673, 0.215, 1.456, 2.987, 1.322, 0.653, 2.134, 1.567, 0.954, 2.456, 0.342, 1.789, 2.235, 0.789, 1.123, 2.567, 0.456, 1.890, 2.034];%輸入序列X是原始數據中除了最后一個元素的所有元素,長度比原始序列少一個元素
X = data(1 : end-1);%目標序列Y是原始數據中除了第一個元素的所有元素,與輸入序列相對應,用于監督學習
Y = data(2:end);%將輸入和目標數據轉換為序列格式
%'con2seq'函數將數值向量轉換為cell數組
X = con2seq(X);
Y = con2seq(Y);%創建循環神經網絡模型
%設置隱藏層神經元的數量
hiddenUnits = 10; %創建具有1個輸入層和指定數量隱藏單元的遞歸神經網絡。
net = layrecnet(1, hiddenUnits);%配置訓練參數
%顯示訓練進度窗口
net.trainParam.showWindow = true;
%設置最大迭代次數為100
net.trainParam.epochs = 100;%訓練RNN模型
[net,tr] = train(net, X, Y);%將最后一個數據點轉換為cell類型,用于初始化預測過程
lastInput = num2cell(data(end));%初始化存儲預測結果和誤差的變量
predicted_data = []; 
errors = []; % 存儲誤差值%對于每一個目標預測時間點,執行預測過程。
for i = 1:numel(target_time)%使用訓練好的模型進行預測,結果保留三位有效數字prediction = round(cell2mat(sim(net, lastInput)), 3, 'significant');%計算誤差error = abs(prediction - cell2mat(lastInput));%將當前預測結果和誤差拼接到相應的列表中predicted_data = [predicted_data, prediction];errors = [errors, error];%更新lastInput為新的預測值,用于下一次循環預測lastInput = {prediction};
end%繪圖
%繪制訓練集和預測結果,藍色表示訓練數據,紅色表示預測數據
figure
hold on
%繪制訓練數據
plot(time, data, 'b') 
%繪制預測數據
plot(target_time, predicted_data, 'r') 
xlabel('年份')
ylabel('溫度')
legend('訓練數據', '預測數據')%用mean函數計算平均絕對誤差
MAE = mean(errors);

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73696.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73696.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73696.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在windows10系統上安裝docker,然后在容器中運行GPU版本的Pytorch,并使用vscode連接該容器

一 . 安裝Docker Desktop 首先打開網址https://docs.docker.com/desktop/install/windows-install/ 下載完后,雙擊下面的exe文件進行安裝,默認情況下,Docker Desktop 安裝在C:\Program Files\Docker\Docker 出現提示時,請確保…

基于SpringBoot + Vue 的房屋租賃系統

基于springboot的房屋租賃管理系統-帶萬字文檔 SpringBootVue房屋租賃管理系統 送文檔 本項目有前臺和后臺兩部分、多角色模塊、不同角色權限不一樣 共分三種角色:用戶、管理員、房東 管理員:個人中心、房屋類型管理、房屋信息管理、預約看房管理、合…

C++特性——智能指針

為什么需要智能指針 對于定義的局部變量,當作用域結束之后,就會自動回收,這沒有什么問題。 當時用new delete的時候,就是動態分配對象的時候,如果new了一個變量,但卻沒有delete,這會造成內存泄…

C語言之 循環語句:程序運行的核心動力(上)

個人主頁:strive-debug 在 C 語言中,分支結構可以通過 if、switch 語句來實現,循環結構則可以通過 for、while、do while 語句來實現。 if 語句 if 語句的語法形式如下: if (表達式)語句; 如果表達式成立(為真&am…

FreeRTOSBug解析:一個任務printf打印一半突然跳轉另一個任務,導致另一個任務無法打印

bug現象: key任務: 默認任務: 此時兩個任務的優先級相同,搶占式調度,時間片輪轉,空閑任務讓步。 但是會出現一個問題,key任務在發送完隊列之后不會立即跳轉到默認任務的隊列接收函數后的print…

操作系統八股文整理(一)

操作系統八股文整理 一、進程和線程的區別二、進程與線程的切換過程一、進程切換進程切換的步驟: 二、線程切換線程切換的步驟: 三、進程切換與線程切換的對比四、上下文切換的優化 三、系統調用一、系統調用的觸發二、從用戶空間切換到內核空間三、執行…

卷積神經網絡(CNN)之 EfficientNet

在深度學習領域,模型的計算效率與性能之間的平衡一直是一個核心挑戰。隨著卷積神經網絡(CNN)在圖像分類、目標檢測等任務中取得顯著成果,模型的復雜度和計算需求也急劇增加。2019年,Google Research 提出的 EfficientN…

學生選課管理系統數據庫設計報告

學生選課管理系統數據庫設計報告 一、需求分析 (一)項目背景 學生選課管理系統是高校教學管理的重要組成部分,旨在實現學生選課、課程管理、成績錄入與查詢等功能的自動化和信息化。通過該系統,學生可以方便地選擇課程&#xf…

工具介紹《Awsome-Redis-Rogue-Server 與 redis-rogue-server》

1. 核心功能與攻擊場景 redis-rogue-server 基于Redis主從復制漏洞(CVE未公開),針對Redis 4.x~5.0.5版本設計,通過偽造惡意主節點強制同步惡意模塊(.so文件)實現遠程代碼執行(RCE)。…

Razor C# 變量

Razor C# 變量 引言 在ASP.NET MVC和Razor視圖引擎中,變量是構建動態網頁的基礎。理解Razor C#變量的使用對于開發者來說至關重要。本文將詳細介紹Razor C#變量的概念、類型、作用域以及如何在實際項目中有效使用它們。 一、Razor C# 變量的概念 Razor C# 變量是存儲在Raz…

【QA】模板方法模式在Qt中有哪些應用?

在 Qt 框架中,模板方法模式(Template Method Pattern)被廣泛應用于框架的設計中,通過定義算法骨架并允許子類在不改變結構的情況下重寫部分步驟。以下是 Qt 中典型的應用場景及示例: 1. 事件處理(Event Ha…

有趣的算法實踐:整數反轉與回文檢測(Java實現)

題目描述:整數反轉與回文檢測 要求實現兩個功能: 將輸入的整數反轉(保留符號,如輸入-123返回-321)判斷反轉后的數是否為回文數(正反讀相同) 示例: 輸入:123 → 反轉結…

【協作開發】低成本一鍵復刻github的gitea

在閱讀 next-public 時,反思原本的需求,是否本未倒置,故而重新調研當下開源現狀。發現 gitea 完全滿足商業軟件的開發要求,并且價格足夠低,使用足夠方便,其他同類軟件完全不用看了,真是世界級的…

基于“動手學強化學習”的知識點(二):第 15 章 模仿學習(gym版本 >= 0.26)

第 15 章 模仿學習(gym版本 > 0.26) 摘要 摘要 本系列知識點講解基于動手學強化學習中的內容進行詳細的疑難點分析!具體內容請閱讀動手學強化學習! 對應動手學強化學習——模仿學習 # -*- coding: utf-8 -*-import gy…

JAVA面試_進階部分_Java JVM:垃圾回收(GC 在什么時候,對什么東西,做了什么事情)

在什么時候: 首先需要知道,GC又分為minor GC 和 Full GC(major GC)。Java堆內存分為新生代和老年代,新生代 中又分為1個eden區和兩個Survior區域。 一般情況下,新創建的對象都會被分配到eden區&#xff…

2024年消費者權益數據分析

📅 2024年315消費者權益數據分析 數據見:https://mp.weixin.qq.com/s/eV5GoionxhGpw7PunhOVnQ 一、引言 在數字化時代,消費者維權數據對于市場監管、商家誠信和行業發展具有重要價值。本文基于 2024年315平臺線上投訴數據,采用數…

設計模式Python版 訪問者模式

文章目錄 前言一、訪問者模式二、訪問者模式示例 前言 GOF設計模式分三大類: 創建型模式:關注對象的創建過程,包括單例模式、簡單工廠模式、工廠方法模式、抽象工廠模式、原型模式和建造者模式。結構型模式:關注類和對象之間的組…

安全無事故連續天數計算,python 時間工具的高效利用

安全天數計算,數據系統時間直取,安全標準高效便捷好用。 筆記模板由python腳本于2025-03-17 23:50:52創建,本篇筆記適合對python時間工具有研究欲的coder翻閱。 【學習的細節是歡悅的歷程】 博客的核心價值:在于輸出思考與經驗&am…

大型語言模型(LLM)部署中的內存消耗計算

在部署大型語言模型(LLM)時,顯存(VRAM)的合理規劃是決定模型能否高效運行的核心問題。本文將通過詳細的公式推導和示例計算,系統解析模型權重、鍵值緩存(KV Cache)、激活內存及額外開…

Mysql表的查詢

一:創建一個新的數據庫(companydb),并查看數據庫。 二:使用該數據庫,并創建表worker。 mysql> use companydb;mysql> CREATE TABLE worker(-> 部門號 INT(11) NOT NULL,-> 職工號 INT(11) NOT NULL,-> 工作時間 D…