首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab:在神经网络中使用交叉熵

Matlab:在神经网络中使用交叉熵
EN

Stack Overflow用户
提问于 2016-04-21 06:28:33
回答 1查看 2.2K关注 0票数 0

我试着用交叉熵来实现一个RNN。以下是我的代码:

代码语言:javascript
复制
net = layrecnet(1:2,10);
net.performFcn = 'crossentropy';
net.performParam.regularization = 0.1;
net.performParam.normalization = 'none';
[Xs,Xi,Ai,Ts] = preparets(net, featureMatrix, labels);
net = train(net,Xs,Ts,Xi,Ai);
% view(net)
Y = net(Xs,Xi,Ai);
perf = perform(net,Y,Ts);

performParam来自Matlab的官方文档。但是,在我执行之后,我收到了一个警告:

代码语言:javascript
复制
Warning: Performance function replaced with squared
error performance. 
> In trainlm>formatNet (line 155)
  In trainlm (line 65)
  In nntraining.setup (line 14)
  In network/train (line 335) 

即使我执行了前馈网络,我也收到了同样的警告。下面是我的代码。

代码语言:javascript
复制
[x,t] = simplefit_dataset;
net = feedforwardnet(10);
net.performFcn = 'crossentropy';
net.performParam.regularization = 0.1;
net.performParam.normalization = 'none';
net = train(net,x,t);
view(net)
y = net(x);
perf = perform(net,y,t);

那么,我如何在代码中使用交叉熵呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-12 14:11:02

问题是,如文件所述,trainlm只适用于使用Jacobian Matrix的损失函数:

该函数使用Jacobian进行计算,假定性能是均方误差或平方误差之和。因此,具有此功能的网络必须使用mse或sse性能函数。

一种解决方案是使用其他训练标志,如trainrptrainscg。以下工作:

代码语言:javascript
复制
[x,t] = simplefit_dataset;
net = feedforwardnet(10);
net.performFcn = 'crossentropy';
net.performParam.regularization = 0.1;
net.performParam.normalization = 'none';
net.trainFcn = 'trainrp';
net = train(net,x,t);
view(net)
y = net(x);
perf = perform(net,y,t);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36761322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档