calcjx.c

来自「nnToolKit 神经网络工具包是基于 MATLAB 神经网络工具箱自行开发的」· C语言 代码 · 共 1,778 行 · 第 1/5 页

C
1,778
字号
        } else {
            /*
             * for i=1:net.numLayers
             * gB{i,ts} = gBZ{i,ts};
             * for j=ICF{i}
             * sW = feval(dIWF{i,j},'w',net.IW{i,j},PD{i,j,ts},IWZ{i,j,ts});
             * gIW{i,j,ts} = reprow(gIWZ{i,j,ts},inputWeightCols(i,j)) .* ...
             * reprowint(sW,net.layers{i}.size);
             * end
             * for j=LCF{i}
             * Ad = cell2mat(Ac(j,ts+numLayerDelays-net.layerWeights{i,j}.delays)');
             * sW = feval(dLWF{i,j},'w',net.LW{i,j},Ad,LWZ{i,j,ts});
             * gLW{i,j,ts} = reprow(gLWZ{i,j,ts},layerWeightCols(i,j)) .* ...
             * reprowint(sW,net.layers{i}.size);
             * end
             * end
             * end
             */
            for (; ; ) {
                mclForLoopIterator viter__;
                for (mclForStart(
                       &viter__,
                       mclFeval(
                         mclValueVarargout(),
                         mlxColon,
                         _mxarray0_,
                         mlfIndexRef(mclVa(net, "net"), ".numLayers"),
                         NULL),
                       NULL,
                       NULL);
                     mclForNext(&viter__, &i);
                     ) {
                    mlfIndexAssign(
                      &gB,
                      "{?,?}",
                      mclVv(i, "i"),
                      mlfScalar(v_),
                      mlfIndexRef(
                        mclVv(gBZ, "gBZ"),
                        "{?,?}",
                        mclVv(i, "i"),
                        mlfScalar(v_)));
                    {
                        mclForLoopIterator viter__6;
                        for (mclForStart(
                               &viter__6,
                               mlfIndexRef(
                                 mclVv(ICF, "ICF"), "{?}", mclVv(i, "i")),
                               NULL,
                               NULL);
                             mclForNext(&viter__6, &j);
                             ) {
                            mlfAssign(
                              &sW,
                              mlfFeval(
                                mclValueVarargout(),
                                mlfIndexRef(
                                  mclVv(dIWF, "dIWF"),
                                  "{?,?}",
                                  mclVv(i, "i"),
                                  mclVv(j, "j")),
                                _mxarray6_,
                                mlfIndexRef(
                                  mclVa(net, "net"),
                                  ".IW{?,?}",
                                  mclVv(i, "i"),
                                  mclVv(j, "j")),
                                mlfIndexRef(
                                  mclVa(PD, "PD"),
                                  "{?,?,?}",
                                  mclVv(i, "i"),
                                  mclVv(j, "j"),
                                  mlfScalar(v_)),
                                mlfIndexRef(
                                  mclVa(IWZ, "IWZ"),
                                  "{?,?,?}",
                                  mclVv(i, "i"),
                                  mclVv(j, "j"),
                                  mlfScalar(v_)),
                                NULL));
                            mlfIndexAssign(
                              &gIW,
                              "{?,?,?}",
                              mclVv(i, "i"),
                              mclVv(j, "j"),
                              mlfScalar(v_),
                              mclTimes(
                                mclFeval(
                                  mclValueVarargout(),
                                  mlxCalcjx_reprow,
                                  mlfIndexRef(
                                    mclVv(gIWZ, "gIWZ"),
                                    "{?,?,?}",
                                    mclVv(i, "i"),
                                    mclVv(j, "j"),
                                    mlfScalar(v_)),
                                  mclArrayRef2(
                                    mclVv(inputWeightCols, "inputWeightCols"),
                                    mclVv(i, "i"),
                                    mclVv(j, "j")),
                                  NULL),
                                mclFeval(
                                  mclValueVarargout(),
                                  mlxCalcjx_reprowint,
                                  mclVv(sW, "sW"),
                                  mlfIndexRef(
                                    mclVa(net, "net"),
                                    ".layers{?}.size",
                                    mclVv(i, "i")),
                                  NULL)));
                        }
                        mclDestroyForLoopIterator(viter__6);
                    }
                    {
                        mclForLoopIterator viter__7;
                        for (mclForStart(
                               &viter__7,
                               mlfIndexRef(
                                 mclVv(LCF, "LCF"), "{?}", mclVv(i, "i")),
                               NULL,
                               NULL);
                             mclForNext(&viter__7, &j);
                             ) {
                            mlfAssign(
                              &Ad,
                              mlfCell2mat(
                                mlfCtranspose(
                                  mclArrayRef2(
                                    mclVa(Ac, "Ac"),
                                    mclVv(j, "j"),
                                    mclFeval(
                                      mclValueVarargout(),
                                      mlxMinus,
                                      mclPlus(
                                        mlfScalar(v_),
                                        mclVv(
                                          numLayerDelays, "numLayerDelays")),
                                      mlfIndexRef(
                                        mclVa(net, "net"),
                                        ".layerWeights{?,?}.delays",
                                        mclVv(i, "i"),
                                        mclVv(j, "j")),
                                      NULL)))));
                            mlfAssign(
                              &sW,
                              mlfFeval(
                                mclValueVarargout(),
                                mlfIndexRef(
                                  mclVv(dLWF, "dLWF"),
                                  "{?,?}",
                                  mclVv(i, "i"),
                                  mclVv(j, "j")),
                                _mxarray6_,
                                mlfIndexRef(
                                  mclVa(net, "net"),
                                  ".LW{?,?}",
                                  mclVv(i, "i"),
                                  mclVv(j, "j")),
                                mclVv(Ad, "Ad"),
                                mlfIndexRef(
                                  mclVa(LWZ, "LWZ"),
                                  "{?,?,?}",
                                  mclVv(i, "i"),
                                  mclVv(j, "j"),
                                  mlfScalar(v_)),
                                NULL));
                            mlfIndexAssign(
                              &gLW,
                              "{?,?,?}",
                              mclVv(i, "i"),
                              mclVv(j, "j"),
                              mlfScalar(v_),
                              mclTimes(
                                mclFeval(
                                  mclValueVarargout(),
                                  mlxCalcjx_reprow,
                                  mlfIndexRef(
                                    mclVv(gLWZ, "gLWZ"),
                                    "{?,?,?}",
                                    mclVv(i, "i"),
                                    mclVv(j, "j"),
                                    mlfScalar(v_)),
                                  mclArrayRef2(
                                    mclVv(layerWeightCols, "layerWeightCols"),
                                    mclVv(i, "i"),
                                    mclVv(j, "j")),
                                  NULL),
                                mclFeval(
                                  mclValueVarargout(),
                                  mlxCalcjx_reprowint,
                                  mclVv(sW, "sW"),
                                  mlfIndexRef(
                                    mclVa(net, "net"),
                                    ".layers{?}.size",
                                    mclVv(i, "i")),
                                  NULL)));
                        }
                        mclDestroyForLoopIterator(viter__7);
                    }
                }
                mclDestroyForLoopIterator(viter__);
                if (v_ == e_) {
                    break;
                }
                ++v_;
            }
            mlfAssign(&ts, mlfScalar(v_));
        }
    }
    /*
     * 
     * % Shortcuts
     * inputLearn = net.hint.inputLearn;
     */
    mlfAssign(&inputLearn, mlfIndexRef(mclVa(net, "net"), ".hint.inputLearn"));
    /*
     * layerLearn = net.hint.layerLearn;
     */
    mlfAssign(&layerLearn, mlfIndexRef(mclVa(net, "net"), ".hint.layerLearn"));
    /*
     * biasLearn = net.hint.biasLearn;
     */
    mlfAssign(&biasLearn, mlfIndexRef(mclVa(net, "net"), ".hint.biasLearn"));
    /*
     * inputWeightInd = net.hint.inputWeightInd;
     */
    mlfAssign(
      &inputWeightInd, mlfIndexRef(mclVa(net, "net"), ".hint.inputWeightInd"));
    /*
     * layerWeightInd = net.hint.layerWeightInd;
     */
    mlfAssign(
      &layerWeightInd, mlfIndexRef(mclVa(net, "net"), ".hint.layerWeightInd"));
    /*
     * biasInd = net.hint.biasInd;
     */
    mlfAssign(&biasInd, mlfIndexRef(mclVa(net, "net"), ".hint.biasInd"));
    /*
     * 
     * % gB{}, gIW{}, gLW{} -> jX()
     * jx = zeros(net.hint.xLen,QS*TS);
     */
    mlfAssign(
      &jx,
      mlfZeros(
        mlfIndexRef(mclVa(net, "net"), ".hint.xLen"),
        mclMtimes(mclVv(QS, "QS"), mclVa(TS, "TS")),
        NULL));
    /*
     * for i=1:net.numLayers
     */
    {
        mclForLoopIterator viter__;
        for (mclForStart(
               &viter__,
               mclFeval(
                 mclValueVarargout(),
                 mlxColon,
                 _mxarray0_,
                 mlfIndexRef(mclVa(net, "net"), ".numLayers"),
                 NULL),
               NULL,
               NULL);
             mclForNext(&viter__, &i);
             ) {
            mclForLoopIterator viter__8;
            /*
             * for j=find(inputLearn(i,:))
             */
            for (mclForStart(
                   &viter__8,
                   mlfFind(
                     NULL,
                     NULL,
                     mclArrayRef2(
                       mclVv(inputLearn, "inputLearn"),
                       mclVv(i, "i"),
                       mlfCreateColonIndex())),
                   NULL,
                   NULL);
                 mclForNext(&viter__8, &j);
                 ) {
                /*
                 * jx(inputWeightInd{i,j},:) = [gIW{i,j,:}];
                 */
                mclArrayAssign2(
                  &jx,
                  mlfHorzcat(
                    mlfIndexRef(
                      mclVv(gIW, "gIW"),
                      "{?,?,?}",
                      mclVv(i, "i"),
                      mclVv(j, "j"),
                      mlfCreateColonIndex()),
                    NULL),
                  mlfIndexRef(
                    mclVv(inputWeightInd, "inputWeightInd"),
                    "{?,?}",
                    mclVv(i, "i"),
                    mclVv(j, "j")),
                  mlfCreateColonIndex());
            /*
             * end
             */
            }
            mclDestroyForLoopIterator(viter__8);
            /*
             * for j=find(layerLearn(i,:))
             */
            {
                mclForLoopIterator viter__9;
                for (mclForStart(
                       &viter__9,
                       mlfFind(
                         NULL,
                         NULL,
                         mclArrayRef2(
                           mclVv(layerLearn, "layerLearn"),
                           mclVv(i, "i"),
                           mlfCreateColonIndex())),
                       NULL,
                       NULL);
                     mclForNext(&viter__9, &j);
                     ) {
                    /*
                     * jx(layerWeightInd{i,j},:) = [gLW{i,j,:}];
                     */
                    mclArrayAssign2(
                      &jx,
                      mlfHorzcat(
                        mlfIndexRef(
                          mclVv(gLW, "gLW"),
                          "{?,?,?}",
                          mclVv(i, "i"),
                          mclVv(j, "j"),
                          mlfCreateColonIndex()),
                        NULL),
                      mlfIndexRef(
                        mclVv(layerWeightInd, "layerWeightInd"),
                        "{?,?}",
                        mclVv(i, "i"),
                        mclVv(j, "j")),
                      mlfCreateColonIndex());
                /*
                 * end
                 */
                }
                mclDestroyForLoopIterator(viter__9);
            }
            /*
             * if biasLearn(i)
             */
            if (mlfTobool(
                  mclArrayRef1(mclVv(biasLearn, "bi

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?