matlab中如何调用更改lstm的权重?

matlab中如何调用更改lstm的权重?,第1张

方法/步骤

在电脑上打开Matlab软件,并将要进行预测的Excel中数据保存到Matlab工作路径下

请点击输入图片描述

新建一个脚本文件

请点击输入图片描述

在脚本文件中利用xlsread命令编写程序读入EXCel中数并咐据到工作区

请点击输入图片描述

在脚本文件中继续编写程序设定LSTM预测网络的训练数据,测试数据,并将数据进行标幺化处理

请点击输入图片描述

继续编写程序设置LSTM网络的层数、训练方法,学习速率等参数

请点击输入图片描述

接着利用trainNetwork函数编写程序对建立的网络进行训练

请点击输入图片描述

继续编写程序,利用 predictAndUpdateState函数对数据进行预测,并调用plot函数画出数据的实际值和预测值图像

请点击输入图片描述

最后点击上方的保存、接着点击“运行”

请点击输粗模入图片描述

待运行结束就可以在figure页面看到数据的预测值和实际值图像

请点击输入图片描述

请点击输入图片描述

总结:

1. 打开Matlab,将要处理的数据保存到工作路径下

2. 接着新建一个脚本文件

3. 在脚本文件中输入程序,读取数据、建立LSTM网络,并训练网络

4. 编写好程序以后点击“保存”,接着点击“运行”捷克语岩蔽缓在figure页面看导预测结果

matlab自带的有遗传算法工具箱,也就是两个函数,分别是

x = ga(fitnessfcn,nvars,a,b,aeq,beq,lb,ub,nonlcon,options)

options = gaoptimset('param1'改携,value1,'param2',value2,...)在帮助文件(doc

ga/gaoptimset)里面自己好还看看它的用法就可以了,每一个参数蠢亩都有详细的说明,应该可以帮助到你核档伏。

%lms算法源程序

clear all

close all

%channel system order

sysorder = 5

% Number of system points

N=2000

inp = randn(N,1)

n = randn(N,1)

[b,a] = butter(2,0.25)

Gz = tf(b,a,-1)

%This function is submitted to make inverse Z-transform (Matlab central file exchange)

%The first sysorder weight value

%h=ldiv(b,a,sysorder)'

% if you use ldiv this will give h :filter weights to be

h= [0.0976

0.2873

0.3360

0.2210

0.0964]

y = lsim(Gz,inp)

%add some noise

n = n * std(y)/(10*std(n))

d = y + n

totallength=size(d,1)

%Take 60 points for training

N=60

%begin of algorithm

w = zeros ( sysorder , 1 )

for n = sysorder : N

u = inp(n:-1:n-sysorder+1)

y(n)= w' * u

e(n) = d(n) - y(n)

% Start with big mu for speeding the convergence then slow down to reach the correct weights

if n <20

mu=0.32

else

mu=0.15

end

w = w + mu * u * e(n)

end

%check of results

for n = N+1 : totallength

u = inp(n:-1:n-sysorder+1)

y(n) = w' * u

e(n) = d(n) - y(n)

end

hold on

plot(d)

plot(y,'r')

title('System output')

xlabel('Samples')

ylabel('True and estimated output')

figure

semilogy((abs(e)))

title('Error curve')

xlabel('Samples')

ylabel('Error value')

figure

plot(h, 'k+')

hold on

plot(w, 'r*')

legend('Actual weights','Estimated weights')

title('Comparison of the actual weights and the estimated weights')

axis([0 6 0.05 0.35])

% RLS 算法

randn('seed', 0)

rand('seed', 0)

NoOfData = 8000 % Set no of data points used for training

Order = 32% Set the adaptive filter order

Lambda = 0.98% Set the forgetting factor

Delta = 0.001% R initialized to Delta*I

x = randn(NoOfData, 1) % Input assumed to be white

h = rand(Order, 1) % System picked randomly

d = filter(h, 1, x) % Generate output (desired signal)

% Initialize RLS

P = Delta * eye ( Order, Order )

w = zeros ( Order, 1 )

% RLS Adaptation

for n = Order : NoOfData

u = x(n:-1:n-Order+1)

pi_ = u' * P

k = Lambda + pi_ * u

K = pi_'/k

e(n) = d(n) - w' * u

w = w + K * e(n)

PPrime = K * pi_

P = ( P - PPrime ) / Lambda

w_err(n) = norm(h - w)

end

% Plot results

figure

plot(20*log10(abs(e)))

title('Learning Curve')

xlabel('Iteration Number')

ylabel('Output Estimation Error in dB')

figure

semilogy(w_err)

title('Weight Estimation Error')

xlabel('Iteration Number')

ylabel('Weight Error in dB')


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12380052.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存