Matlab神经网络算法
时间:2019-10-19
本文章向大家介绍Matlab神经网络算法,主要包括Matlab神经网络算法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
神经网络算法可以搭建模型做数据预测
1. 神经网络结构 ([4,4,4,2],四层网络结构)
2. 示例代码(可自定义网络结构)
2.1 训练函数
function [w,J_cost] = ccTrain(weight,x,y) % 多层神经网络,多输出 % 注:初始输入的权值矩阵第一层神经元个数必须等于输入数据x的特征个数 % 利用神经网络搭建模型来预测鲍鱼的年龄 % 数据来源:load abalone_dataset.mat %% 1.初始化准备 [Mx,~] = size(x); nlayers = length(weight); eval(['a.a',num2str(1),' = ','[];']); for n = 2:nlayers initialweight = rand(weight(n),weight(n-1)); initialdw = zeros(weight(n),weight(n-1)); initialz = []; initiala = []; initiald = []; initiale = []; eval(['w.w',num2str(n-1),' = ','initialweight;']); eval(['dw.dw',num2str(n-1),' = ','initialdw;']); eval(['z.z',num2str(n),' = ','initialz;']); eval(['a.a',num2str(n),' = ','initiala;']); eval(['delta.d',num2str(n),' = ','initiald;']); eval(['e.e',num2str(n),' = ','initiale;']); end weightnames = fieldnames(w); dwnames = fieldnames(dw); znames = fieldnames(z); anames = fieldnames(a); deltanames = fieldnames(delta); enames = fieldnames(e); %% 2.参数设置与迭代 alpha = 0.8; J_cost = []; J = []; %% 3. 全局迭代 Maxiteration = 10000; for iteration = 1:Maxiteration %% 3.1 dw, a, z, delta 初始化 eval(['a.a',num2str(1),' = ','[];']); for n1 = 2:nlayers initialdw = zeros(weight(n1),weight(n1-1)); initialz = []; initiala = []; initiald = []; eval(['dw.dw',num2str(n1-1),' = ','initialdw;']); eval(['z.z',num2str(n1),' = ','initialz;']); eval(['a.a',num2str(n1),' = ','initiala;']); eval(['delta.d',num2str(n1),' = ','initiald;']); end %% 3.2 批次处理 for sample = 1:Mx zz = []; % 前向数据传递 aa = x(sample,:)'; % aa = x 列向量 a = setfield(a,anames{1},aa); % a.a1 = x for layer = 2:nlayers % layer = 4 时 ww = getfield(w,weightnames{layer-1}); % ww = w.w3 zz = ww * aa; % zz = ww * aa aa = sigmoid(zz); % aa = sigmoid(zz) z = setfield(z,znames{layer-1},zz); % z.z4 = zz a = setfield(a,anames{layer},aa); % a.a4 = aa end for layer = nlayers:-1:2 % 反向误差传播 if layer == nlayers % layer = 4时 aa = getfield(a,anames{layer}); % aa = a.a4 ee0 = y(sample,:)' - aa; % ee = error delta_delta = aa.*(1-aa) .* ee0; % delta_delta = aa.*(1-aa) .* error e = setfield(e,enames{layer-1},ee0); % e.e4 = ee delta = setfield(delta,deltanames{layer-1},delta_delta); ww = getfield(w,weightnames{layer-1}); % ww = w.w3 else aa = getfield(a,anames{layer}); % aa = a.a3 ee = transpose(ww) * delta_delta; % ee = ww' * delta_delta delta_delta = aa.*(1-aa) .* ee; % delta_delta = aa.*(1-aa) .* ee e = setfield(e,enames{layer-1},ee); % e.e3 = ee delta = setfield(delta,deltanames{layer-1},delta_delta); % delta.d2 = delta_delta ww = getfield(w,weightnames{layer-1}); % ww = w.w3 end %% 一个批次(包含所有值)中的权值误差累加统计 % layer = 4时 ddww = getfield(dw,dwnames{layer - 1}); % ddww = dw.dw3 aaa = getfield(a,anames{layer-1}); ddw = alpha * delta_delta .* transpose(aaa); % ddw = alpha * delta_delta .* aa dw = setfield(dw,dwnames{layer-1},ddww + ddw); % dw.dw2 = ddww + ddw end error = ee0; J(sample) = power(sum(error.*error),0.5); % 误差计算 J_cost(iteration,1) = power(sum(J.*J),0.5); end for layer = 1:nlayers-1 % 调整权值 layer = 3时 dw_average = getfield(dw,dwnames{layer})/Mx; % dw_average = dw.dw3/110 w_needed = getfield(w,weightnames{layer}); % w_needeed = w.w3 w = setfield(w,weightnames{layer},dw_average + w_needed); % w = dw_average + w_needed end if rem(iteration,100) == 0 fprintf('训练进度:%d/%d,约为:%d %%\n',iteration,Maxiteration,100*iteration/Maxiteration); end end end
2.2 预测函数
function yy = ccPrediction(w,x) % validation = [rdata(41:50,:);rdata(121:150,:)]; % x = validation(:,1:4); [M,~] = size(x); names = fieldnames(w); nlayers = length(names); for i = 1:M a = x(i,:)'; for j = 1:nlayers ww = getfield(w,names{j}); z = ww * a; a = sigmoid(z); end yy(i,:) = a; end end
2.3 训练函数和预测函数中调用的激活函数
function y = sigmoid(x) y = 1./(1 + exp(-x)); end
原文地址:https://www.cnblogs.com/carreyBlog/p/11704440.html
- zoj 1315 Excuses, Excuses!
- ZOJ 2724 Windows Message Queue(优先队列)
- React多页面应用7(引入eslint代码检查)
- Trie树
- React第三方组件1(路由管理之Router的使用⑤按需加载-下)
- zoj 2876 Phone List
- PHP小知识
- Where's Waldorf?
- POj 1797 Heavy Transportation
- 卡特兰数简介原理性质应用参考:
- UVA Machined Surfaces
- NBUT 1117 Kotiya's Incantation
- React第三方组件1(路由管理之Router的使用④按需加载-上)
- React第三方组件1(路由管理之Router的使用③传参)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CentOS7安装配置 Redis的方法步骤
- Linux下Oracle如何导入导出dmp文件详解
- Linux中samba服务器的搭建教程
- linux环境搭建图数据库neo4j的讲解
- Linux编程之ICMP洪水攻击
- linux搭建squid代理服务器的完整步骤
- 使用wget递归镜像网站
- 整理Linux中字符串的相关操作技巧
- Ubuntu 16.04下无法安装.deb的解决方法
- 关于linux中系统输入输出的管理详解
- Linux下IP设置脚本的实例及遇到问题解决办法
- Linux与Windows文件互传(VMWare)
- 如何测试Linux下tcp最大连接数限制详解
- Linux中利用Vim对文件进行密码保护的方法详解
- Linux中禁止用户修改/重置密码