本函数在实现的时候犯了几个非常傻逼的错误,最开始导致不能收敛,甚至有的时候还会增长。
第一个就是在实现forward的时候,最开始的for循环,我将最后一个softmax层的结果也进行了sigmoid然后再求概率分布等,这个就非常蠢了。。。。
所以最后将其单独拿出来。
第二个是bp的时候,最后一层的delta没有加负号。。。
然后就是在sparse的时候,要用一个list而不是一个数,比如说:
sparse(labels,1:size(pred_prob,2),1)和sparse(labels,size(pred_prob,2),1)是有很大差别的。。。
function [ cost, grad, pred_prob] = supervised_dnn_cost( theta, ei, data, labels, pred_only)
%SPNETCOSTSLAVE Slave cost function for simple phone net
% Does all the work of cost / gradient computation
% Returns cost broken into cross-entropy, weight norm,