错误使用 network/subsasgn>network_subsasgn net.b{2} must be a 2-by-1 matrix.解决方法

2023-05-16

使用生物算法优化bp时出现以下报错

1、错误使用 network/subsasgn>network_subsasgn net.b{2} must be a 2-by-1 matrix.

2、出错 索引 (第 14 行)

net = network_subsasgn(net,subscripts,v,netname);

oad input  %载入输入数据

load output  %载入输出数据

%% 第二步 设置训练数据和预测数据

input_train = input(:,1:35);

output_train = output(:,1:35);

input_test = input(:,36:end);

output_test = output(:,36:end);

inputnum=15;

hiddennum=1;

outputnum=4;

%训练样本输入输出数据归一化

[inputn,inputps]=mapminmax(input_train);

%归一化到[-1,1]之间,inputps用来作下一次同样的归一化

[outputn,outputps]=mapminmax(output_train);

%构建网络

net=newff(inputn,outputn,hiddennum);

%% 遗传算法参数初始化

maxgen=50;                          %进化代数,即迭代次数

sizepop=10;                         %种群规模

pcross=[0.4];                       %交叉概率选择,0和1之间

pmutation=[0.2];                    %变异概率选择,0和1之间

%节点总数

numsum=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum;

lenchrom=ones(1,numsum);                       %个体长度

bound=[-3*ones(numsum,1) 3*ones(numsum,1)];    %个体范围

individuals=struct('fitness',zeros(1,sizepop), 'chrom',[]);  %将种群信息定义为一个结构体

avgfitness=[];                      %每一代种群的平均适应度

bestfitness=[];                     %每一代种群的最佳适应度

bestchrom=[];                       %适应度最好的染色体

%计算个体适应度值

for i=1:sizepop

%随机产生一个种群

individuals.chrom(i,:)=Code(lenchrom,bound);

%计算适应度

x=individuals.chrom(i,:);

individuals.fitness(i)=fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn);   %染色体的适应度

end

%% 迭代求解最佳初始阀值和权值

% 进化开始

for i=1:maxgen

% 选择

individuals=Select(individuals,sizepop);

%交叉

individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound);

% 变异

individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,i,maxgen,bound);

% 计算适应度

for j=1:sizepop

x=individuals.chrom(j,:); %个体

individuals.fitness(j)=fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn);

end

%找到最小和最大适应度的染色体及它们在种群中的位置

[newbestfitness,newbestindex]=min(individuals.fitness);

[worestfitness,worestindex]=max(individuals.fitness);

%最优个体更新

if bestfitness>newbestfitness

bestfitness=newbestfitness;

bestchrom=individuals.chrom(newbestindex,:);

end

individuals.chrom(worestindex,:)=bestchrom;

individuals.fitness(worestindex)=bestfitness;

%记录每一代进化中最好的适应度和平均适应度

avgfitness=sum(individuals.fitness)/sizepop;

trace=[trace;avgfitness bestfitness];

end

%% 把最优初始阀值权值赋予网络预测

% %用遗传算法优化的BP网络进行值预测

x=bestchrom

w1=x(1:inputnum*hiddennum);

B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum);

w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);

B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);

net.iw{1,1}=reshape(w1,hiddennum,inputnum);

net.lw{2,1}=reshape(w2,outputnum,hiddennum);

net.b{1}=reshape(B1,hiddennum,1);

net.b{2}=B2;

%% BP网络训练

%网络进化参数

net.trainParam.epochs=100;

net.trainParam.lr=0.1;

net.trainParam.goal=0.00001;

%网络训练

[net,per2]=train(net,inputn,outputn);

%% BP网络预测

inputn_test=mapminmax('apply',input_test,inputps);

an=sim(net,inputn_test);

%预测结果反归一化

test_simu=mapminmax('reverse',an,outputps);

error=test_simu-output_test;

数据可视化

figure(1)

plot(output_test,'bo-')

hold on

plot(test_simu,'r*-')

hold on

原因:net.b{2}=B2;左右赋值不匹配。

输出outputnum为4维,但权重赋值为B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);

解决办法:net.b{2}=reshape(B2,outputnum,1)即可。

reshape - 重构数组

此 MATLAB 函数 使用大小向量 sz 重构 A 以定义 size(B)。例如,reshape(A,[2,3]) 将

A 重构为一个 2×3 矩阵。sz 必须至少包含 2 个元素,prod(sz) 必须与 numel(A) 相同。

B = reshape(A,sz)

B = reshape(A,sz1,...,szN)

输入参数

A - 输入数组

向量 | 矩阵 | 多维数组

sz - 输出大小

由整数组成的行向量

sz1,...,szN - 每个维度的大小

两个或以上的整数 | [](可选)

输出参数

B - 重构的数组

向量 | 矩阵 | 多维数组 | 元胞数组

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

错误使用 network/subsasgn>network_subsasgn net.b{2} must be a 2-by-1 matrix.解决方法 的相关文章

  • 如何在单独的线程上设置全局键盘挂钩?

    经过多次搜索后 我最终使用此类进行全局键盘挂钩 关联 全球挂钩柱 http sim0n wordpress com 2009 03 28 vbnet keyboard hook class Imports System Runtime In
  • .net框架中值类型和引用类型的内存分配

    我可以阅读一篇高级文章来解释如何在 net 框架中为不同类型 值和引用 分配内存 例如 我们知道值类型是在堆栈上分配空间的 但它是如何管理的呢 另外 如何在堆中管理引用类型以及实际值存储在哪里 引用类型像任何Class一样都会包含很多值类型
  • 以编程方式调用 EntityDeploy 构建任务

    我正在使用 Roslyn 来编译 发出和运行 C 源代码 但是 在面对使用 EntityFramework 的项目时 我遇到了限制 似乎简单地发出编译是不够的 因为有一个EntityDeploy在 DLL 发出后对其进行操作的构建任务 我相
  • 是否可以将 ServiceStack.Text.JsConfig 设置范围限制为您的库?

    我正在编写一个使用的自定义库ServiceStack Text https github com ServiceStack ServiceStack Text内部 使用我的其他库也可能使用 ServiceStack Text 我想改变一些J
  • C# Winforms - ProgressBar 无法正确显示和重置

    我有一个 Windows 桌面应用程序 正在使用 Visual Basic 中的 Windows 窗体编写 在这个应用程序中 我想显示一个简单的进度条 但我遇到了一个奇怪的问题 下面是更新进度条的简单 for 循环示例 pBar Visib
  • 椭圆绘制WPF动画

    我正在开发一个矩形区域的控件 当触发发生时 将在矩形区域中绘制一个椭圆形 该控件将能够承载其他控件 例如文本框 按钮等 因此在触发时将在它们周围绘制圆圈 我希望将圆圈绘制为动画 就像您用笔圈出内部控件一样 实现这一目标的最佳方法是什么 我一
  • .NET 中的 vista/win7 放大 API

    Win7 Vista SDK中有magnification lib可供使用放大API http msdn microsoft com en us library ms692162 28VS 85 29 aspx对于C 如何在 NET win
  • 使用BindingSource很慢?

    我有一个 C Windows 窗体项目 其中的窗体包含 2 个列表框和一个按钮 在 FormLoad 上 左侧列表框填充了一个列表 约 1800 个项目 其中包含有关证券的信息 ID 和名称 当用户单击按钮时 所有证券都会从左侧列表框移至右
  • ProviderManifestToken 2008 或 2012

    应用程序 NET 4 5 C 使用 EF6 和数据库优先方法 支持 SQL Server 2008R2 2012 和 2014 这个问题是关于ProviderManifestToken自动生成的 edmx 文件的属性 根据使用哪个版本的数据
  • 从不同的程序集中动态加载类(具有自定义行为)?

    我们正在为少数客户构建应用程序 每个客户都有自己的要求以及类似的要求 我们还希望将所有代码保留在同一个应用程序中 而不是对其进行分支 并且 IF 不是一个好的选择 因为它会遍布各处 我计划为所有人开设基础课程 然后每个客户都会有自己的类 其
  • 控制台应用程序的 log4net 配置

    谁能建议如何为控制台应用程序配置 log4net 或者至少如何 在哪里捕捉Application Start事件 看来此时需要一些电话 提前致谢 尝试写作 assembly log4net Config XmlConfigurator Wa
  • 调用 new SqlConnection() 会挂起程序

    这个把我难住了 我什至没有尝试连接到数据库 当这段代码到达我实例化一个新的 SqlConnection 对象的行时 它只是挂在那里 不会抛出异常或任何东西 我已经尝试将其编译为2 0 3 5和4 0 它们都挂了 当然 它也适用于我的机器和你
  • 动态加载组件 - 设置和通信

    好吧 我有一个 WPF 应用程序 我们称之为Launcher exe 它加载并执行另一个 WPF 应用程序 我们称之为Loaded exe 动态地使用这样的东西 Byte assemblyData using BinaryReader re
  • 限制文本框中每行的最大字符数

    假设我有以下内容
  • 如何以编程方式重新启动 Windows 资源管理器进程

    我正在开发 Windows shell 扩展 不幸的是 在更改 DLL 时 我必须重新启动 Windows 资源管理器 因为它将 DLL 保留在内存中 我从 Dino Esposito 找到了这个程序 但它对我不起作用 void SHShe
  • 我应该将一个任务包装在另一个任务中还是应该返回创建的任务?

    我正在构建一个使用 ADO NET 的 NET 4 0 应用程序 因此我无法使用 async await 我不想要一个解决方案 但我确实想知道以下哪种实现是最好的以及为什么 我的单元测试通过了所有三个实现 但我想知道这三个之间的区别 1 嵌
  • 是否可以防止 DataGridView 中出现多行 HeaderText?

    当长度为HeaderText属性达到一定的字符限制并且文本中有空格 WinForms 会自动在标题中插入链接中断 我想要的是 Measurement Value 我得到什么 Measurement Value 有足够的空间来显示所有标题单元
  • 生成转储并导致非托管代码崩溃?

    当我的应用程序突然崩溃时 有没有办法获得完整的故障转储 问题是 我怀疑这是由于非托管代码杀死了 net 框架本身 因此 除非在崩溃时应用程序附加了调试器 否则应用程序甚至没有机会处理崩溃 我无法附加调试器并等待 因为崩溃是随机发生的 而且我
  • 计时器、事件和垃圾收集:我错过了什么吗?

    考虑以下代码 class TestTimerGC Form public TestTimerGC Button btnGC new Button btnGC Text GC btnGC Click sender e gt GC Collec
  • 如何使用 System.Json 进行漂亮的打印?

    使用新的System Json 从 4 5 开始 http msdn microsoft com en us library system json 28v vs 95 29 aspx或同等的来自 Nuget 的 4 0 的 System

随机推荐