2016-04-21 5 views
0

Я пытаюсь внедрить RNN с использованием кросс-энтропии. Ниже мой код:Matlab: использование кросс-энтропии в нейронной сети

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 официального doc. Однако, после того, как я выполнил его, я получил предупреждение сказал:

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) 

Даже если я исполню feedforwardnet, я получил такое же предупреждение. Ниже приведен мой код.

[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); 

Так как я могу использовать кросс-энтропию в своем коде?

+0

[Проверить эту ссылку] (http://ch.mathworks.com/matlabcentral/answers/261735-i-get-a-performance-function-replaced-with-squared-error- performance-warning-when-try-to-set-c) – obchardon

+0

@obchardon Я читал это раньше, но не помогает. – spacegoing

ответ

1

Проблема заключается в том trainlm относится только к функции потерь с использованием Jacobian Matrix, как указано в документе:

Эта функция использует якобиан для вычислений, которая предполагает, что производительность среднее или сумма квадратов ошибок. Поэтому сети , обученные этой функции, должны использовать функцию mse или sse .

Одно решение использует другие обучающие альгоны, такие как trainrp или trainscg. Следующие работы:

[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); 
Смежные вопросы