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 + -
显示快捷键?