calcjx.c
来自「nnToolKit 神经网络工具包是基于 MATLAB 神经网络工具箱自行开发的」· C语言 代码 · 共 1,778 行 · 第 1/5 页
C
1,778 行
mclVv(S, "S"))),
_mxarray0_));
/*
* for i=find(net.biasConnect)'
*/
{
mclForLoopIterator viter__;
for (mclForStart(
&viter__,
mlfCtranspose(
mclFeval(
mclValueVarargout(),
mlxFind,
mlfIndexRef(mclVa(net, "net"), ".biasConnect"),
NULL)),
NULL,
NULL);
mclForNext(&viter__, &i);
) {
/*
* BZ{i} = BZ{i}(:,ind);
*/
mlfIndexAssign(
&BZ,
"{?}",
mclVv(i, "i"),
mlfIndexRef(
mclVa(BZ, "BZ"),
"{?}(?,?)",
mclVv(i, "i"),
mlfCreateColonIndex(),
mclVv(ind, "ind")));
/*
* end
*/
}
mclDestroyForLoopIterator(viter__);
}
/*
* for ts=1:TS
*/
{
int v_ = mclForIntStart(1);
int e_ = mclForIntEnd(mclVa(TS, "TS"));
if (v_ > e_) {
mlfAssign(&ts, _mxarray2_);
} else {
/*
* for i=1:net.numLayers
* for j=find(net.inputConnect(i,:))
* PD{i,j,ts} = PD{i,j,ts}(:,ind);
* IWZ{i,j,ts} = IWZ{i,j,ts}(:,ind);
* end
* end
* for i=1:net.numLayers
* for j=find(net.layerConnect(i,:))
* LWZ{i,j,ts} = LWZ{i,j,ts}(:,ind);
* end
* end
* for i=1:net.numLayers
* N{i,ts} = N{i,ts}(:,ind);
* end
* end
*/
for (; ; ) {
mclForLoopIterator viter__;
for (mclForStart(
&viter__,
mclFeval(
mclValueVarargout(),
mlxColon,
_mxarray0_,
mlfIndexRef(mclVa(net, "net"), ".numLayers"),
NULL),
NULL,
NULL);
mclForNext(&viter__, &i);
) {
mclForLoopIterator viter__0;
for (mclForStart(
&viter__0,
mclFeval(
mclValueVarargout(),
mlxFind,
mlfIndexRef(
mclVa(net, "net"),
".inputConnect(?,?)",
mclVv(i, "i"),
mlfCreateColonIndex()),
NULL),
NULL,
NULL);
mclForNext(&viter__0, &j);
) {
mlfIndexAssign(
&PD,
"{?,?,?}",
mclVv(i, "i"),
mclVv(j, "j"),
mlfScalar(v_),
mlfIndexRef(
mclVa(PD, "PD"),
"{?,?,?}(?,?)",
mclVv(i, "i"),
mclVv(j, "j"),
mlfScalar(v_),
mlfCreateColonIndex(),
mclVv(ind, "ind")));
mlfIndexAssign(
&IWZ,
"{?,?,?}",
mclVv(i, "i"),
mclVv(j, "j"),
mlfScalar(v_),
mlfIndexRef(
mclVa(IWZ, "IWZ"),
"{?,?,?}(?,?)",
mclVv(i, "i"),
mclVv(j, "j"),
mlfScalar(v_),
mlfCreateColonIndex(),
mclVv(ind, "ind")));
}
mclDestroyForLoopIterator(viter__0);
}
mclDestroyForLoopIterator(viter__);
{
mclForLoopIterator viter__;
for (mclForStart(
&viter__,
mclFeval(
mclValueVarargout(),
mlxColon,
_mxarray0_,
mlfIndexRef(mclVa(net, "net"), ".numLayers"),
NULL),
NULL,
NULL);
mclForNext(&viter__, &i);
) {
mclForLoopIterator viter__1;
for (mclForStart(
&viter__1,
mclFeval(
mclValueVarargout(),
mlxFind,
mlfIndexRef(
mclVa(net, "net"),
".layerConnect(?,?)",
mclVv(i, "i"),
mlfCreateColonIndex()),
NULL),
NULL,
NULL);
mclForNext(&viter__1, &j);
) {
mlfIndexAssign(
&LWZ,
"{?,?,?}",
mclVv(i, "i"),
mclVv(j, "j"),
mlfScalar(v_),
mlfIndexRef(
mclVa(LWZ, "LWZ"),
"{?,?,?}(?,?)",
mclVv(i, "i"),
mclVv(j, "j"),
mlfScalar(v_),
mlfCreateColonIndex(),
mclVv(ind, "ind")));
}
mclDestroyForLoopIterator(viter__1);
}
mclDestroyForLoopIterator(viter__);
}
{
mclForLoopIterator viter__;
for (mclForStart(
&viter__,
mclFeval(
mclValueVarargout(),
mlxColon,
_mxarray0_,
mlfIndexRef(mclVa(net, "net"), ".numLayers"),
NULL),
NULL,
NULL);
mclForNext(&viter__, &i);
) {
mlfIndexAssign(
&N,
"{?,?}",
mclVv(i, "i"),
mlfScalar(v_),
mlfIndexRef(
mclVa(N, "N"),
"{?,?}(?,?)",
mclVv(i, "i"),
mlfScalar(v_),
mlfCreateColonIndex(),
mclVv(ind, "ind")));
}
mclDestroyForLoopIterator(viter__);
}
if (v_ == e_) {
break;
}
++v_;
}
mlfAssign(&ts, mlfScalar(v_));
}
}
/*
* for ts=1:TS+numLayerDelays;
*/
{
int v_ = mclForIntStart(1);
int e_
= mclForIntEnd(
mclPlus(
mclVa(TS, "TS"), mclVv(numLayerDelays, "numLayerDelays")));
if (v_ > e_) {
mlfAssign(&ts, _mxarray2_);
} else {
/*
* for i=1:net.numLayers
* Ac{i,ts} = Ac{i,ts}(:,ind);
* end
* end
*/
for (; ; ) {
mclForLoopIterator viter__;
for (mclForStart(
&viter__,
mclFeval(
mclValueVarargout(),
mlxColon,
_mxarray0_,
mlfIndexRef(mclVa(net, "net"), ".numLayers"),
NULL),
NULL,
NULL);
mclForNext(&viter__, &i);
) {
mlfIndexAssign(
&Ac,
"{?,?}",
mclVv(i, "i"),
mlfScalar(v_),
mlfIndexRef(
mclVa(Ac, "Ac"),
"{?,?}(?,?)",
mclVv(i, "i"),
mlfScalar(v_),
mlfCreateColonIndex(),
mclVv(ind, "ind")));
}
mclDestroyForLoopIterator(viter__);
if (v_ == e_) {
break;
}
++v_;
}
mlfAssign(&ts, mlfScalar(v_));
}
}
/*
*
* Q = QS;
*/
mlfAssign(&Q, mclVv(QS, "QS"));
/*
*
* % Signals
* gA = cell(net.numLayers,TS);
*/
mlfAssign(
&gA,
mlfCell(
mlfIndexRef(mclVa(net, "net"), ".numLayers"), mclVa(TS, "TS"), NULL));
/*
* gN = cell(net.numLayers,TS);
*/
mlfAssign(
&gN,
mlfCell(
mlfIndexRef(mclVa(net, "net"), ".numLayers"), mclVa(TS, "TS"), NULL));
/*
* gBZ = cell(net.numLayers,TS);
*/
mlfAssign(
&gBZ,
mlfCell(
mlfIndexRef(mclVa(net, "net"), ".numLayers"), mclVa(TS, "TS"), NULL));
/*
* gIWZ = cell(net.numLayers,net.numInputs,TS);
*/
mlfAssign(
&gIWZ,
mlfCell(
mlfIndexRef(mclVa(net, "net"), ".numLayers"),
mlfIndexRef(mclVa(net, "net"), ".numInputs"),
mclVa(TS, "TS"),
NULL));
/*
* gLWZ = cell(net.numLayers,net.numLayers,TS);
*/
mlfAssign(
&gLWZ,
mlfCell(
mlfIndexRef(mclVa(net, "net"), ".numLayers"),
mlfIndexRef(mclVa(net, "net"), ".numLayers"),
mclVa(TS, "TS"),
NULL));
/*
* gB = gBZ;
*/
mlfAssign(&gB, mclVv(gBZ, "gBZ"));
/*
* gIW = gIWZ;
*/
mlfAssign(&gIW, mclVv(gIWZ, "gIWZ"));
/*
* gLW = gIWZ;
*/
mlfAssign(&gLW, mclVv(gIWZ, "gIWZ"));
/*
*
* % Backpropagate Derivatives...
* for ts=TS:-1:1
*/
{
mclForLoopIterator viter__;
for (mclForStart(&viter__, mclVa(TS, "TS"), _mxarray3_, _mxarray0_);
mclForNext(&viter__, &ts);
) {
mclForLoopIterator viter__2;
/*
* for i=net.hint.bpLayerOrder
*/
for (mclForStart(
&viter__2,
mlfIndexRef(mclVa(net, "net"), ".hint.bpLayerOrder"),
NULL,
NULL);
mclForNext(&viter__2, &i);
) {
/*
*
* % ...from Performance
* if net.targetConnect(i)
*/
if (mlfTobool(
mlfIndexRef(
mclVa(net, "net"),
".targetConnect(?)",
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?