calcjx.c

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

C
1,778
字号
                        mclVv(i, "i")))) {
                    /*
                     * gA{i,ts} = gE{i};       %%% NO TS REQUIRED
                     */
                    mlfIndexAssign(
                      &gA,
                      "{?,?}",
                      mclVv(i, "i"),
                      mclVv(ts, "ts"),
                      mlfIndexRef(mclVv(gE, "gE"), "{?}", mclVv(i, "i")));
                /*
                 * else
                 */
                } else {
                    /*
                     * gA{i,ts} = zeros(net.layers{i}.size,Q);
                     */
                    mlfIndexAssign(
                      &gA,
                      "{?,?}",
                      mclVv(i, "i"),
                      mclVv(ts, "ts"),
                      mlfZeros(
                        mlfIndexRef(
                          mclVa(net, "net"), ".layers{?}.size", mclVv(i, "i")),
                        mclVa(Q, "Q"),
                        NULL));
                /*
                 * end
                 */
                }
                /*
                 * 
                 * % ...through Layer Weights
                 * for k=LCT{i}
                 */
                {
                    mclForLoopIterator viter__3;
                    for (mclForStart(
                           &viter__3,
                           mlfIndexRef(mclVv(LCT, "LCT"), "{?}", mclVv(i, "i")),
                           NULL,
                           NULL);
                         mclForNext(&viter__3, &k);
                         ) {
                        /*
                         * if (any(net.layerWeights{k,i}.delays == 0)) % only zero delay paths
                         */
                        if (mlfTobool(
                              mlfAny(
                                mclFeval(
                                  mclValueVarargout(),
                                  mlxEq,
                                  mlfIndexRef(
                                    mclVa(net, "net"),
                                    ".layerWeights{?,?}.delays",
                                    mclVv(k, "k"),
                                    mclVv(i, "i")),
                                  _mxarray1_,
                                  NULL),
                                NULL))) {
                            /*
                             * ZeroDelayW = net.LW{k,i}(:,1:net.layers{i}.size);
                             */
                            mlfAssign(
                              &ZeroDelayW,
                              mlfIndexRef(
                                mclVa(net, "net"),
                                ".LW{?,?}(?,?)",
                                mclVv(k, "k"),
                                mclVv(i, "i"),
                                mlfCreateColonIndex(),
                                mclFeval(
                                  mclValueVarargout(),
                                  mlxColon,
                                  _mxarray0_,
                                  mlfIndexRef(
                                    mclVa(net, "net"),
                                    ".layers{?}.size",
                                    mclVv(i, "i")),
                                  NULL)));
                            /*
                             * gA{i,ts} = gA{i,ts} + ...
                             */
                            mlfIndexAssign(
                              &gA,
                              "{?,?}",
                              mclVv(i, "i"),
                              mclVv(ts, "ts"),
                              mclFeval(
                                mclValueVarargout(),
                                mlxPlus,
                                mlfIndexRef(
                                  mclVv(gA, "gA"),
                                  "{?,?}",
                                  mclVv(i, "i"),
                                  mclVv(ts, "ts")),
                                mclFeval(
                                  mclValueVarargout(),
                                  mlxMtimes,
                                  mlfCtranspose(
                                    mlfFeval(
                                      mclValueVarargout(),
                                      mlfIndexRef(
                                        mclVv(dLWF, "dLWF"),
                                        "{?,?}",
                                        mclVv(k, "k"),
                                        mclVv(i, "i")),
                                      _mxarray4_,
                                      mclVv(ZeroDelayW, "ZeroDelayW"),
                                      mlfIndexRef(
                                        mclVa(Ac, "Ac"),
                                        "{?,?}",
                                        mclVv(i, "i"),
                                        mclPlus(
                                          mclVv(ts, "ts"),
                                          mclVv(
                                            numLayerDelays, "numLayerDelays"))),
                                      mlfIndexRef(
                                        mclVa(LWZ, "LWZ"),
                                        "{?,?,?}",
                                        mclVv(k, "k"),
                                        mclVv(i, "i"),
                                        mclVv(ts, "ts")),
                                      NULL)),
                                  mlfIndexRef(
                                    mclVv(gLWZ, "gLWZ"),
                                    "{?,?,?}",
                                    mclVv(k, "k"),
                                    mclVv(i, "i"),
                                    mclVv(ts, "ts")),
                                  NULL),
                                NULL));
                        /*
                         * feval(dLWF{k,i},'p',ZeroDelayW,Ac{i,ts+numLayerDelays},LWZ{k,i,ts})' * ...
                         * gLWZ{k,i,ts};
                         * end
                         */
                        }
                    /*
                     * end
                     */
                    }
                    mclDestroyForLoopIterator(viter__3);
                }
                /*
                 * 
                 * % ...through Transfer Functions
                 * gN{i,ts} = feval(dTF{i},N{i,ts},Ac{i,ts+numLayerDelays}) .* gA{i,ts};
                 */
                mlfIndexAssign(
                  &gN,
                  "{?,?}",
                  mclVv(i, "i"),
                  mclVv(ts, "ts"),
                  mclFeval(
                    mclValueVarargout(),
                    mlxTimes,
                    mlfFeval(
                      mclValueVarargout(),
                      mlfIndexRef(mclVv(dTF, "dTF"), "{?}", mclVv(i, "i")),
                      mlfIndexRef(
                        mclVa(N, "N"), "{?,?}", mclVv(i, "i"), mclVv(ts, "ts")),
                      mlfIndexRef(
                        mclVa(Ac, "Ac"),
                        "{?,?}",
                        mclVv(i, "i"),
                        mclPlus(
                          mclVv(ts, "ts"),
                          mclVv(numLayerDelays, "numLayerDelays"))),
                      NULL),
                    mlfIndexRef(
                      mclVv(gA, "gA"), "{?,?}", mclVv(i, "i"), mclVv(ts, "ts")),
                    NULL));
                /*
                 * 
                 * % ...to Bias
                 * if net.biasConnect(i)
                 */
                if (mlfTobool(
                      mlfIndexRef(
                        mclVa(net, "net"), ".biasConnect(?)", mclVv(i, "i")))) {
                    /*
                     * gBZ{i,ts} = feval(dNF{i},BZ{i},N{i,ts}) .* gN{i,ts};
                     */
                    mlfIndexAssign(
                      &gBZ,
                      "{?,?}",
                      mclVv(i, "i"),
                      mclVv(ts, "ts"),
                      mclFeval(
                        mclValueVarargout(),
                        mlxTimes,
                        mlfFeval(
                          mclValueVarargout(),
                          mlfIndexRef(mclVv(dNF, "dNF"), "{?}", mclVv(i, "i")),
                          mlfIndexRef(mclVa(BZ, "BZ"), "{?}", mclVv(i, "i")),
                          mlfIndexRef(
                            mclVa(N, "N"),
                            "{?,?}",
                            mclVv(i, "i"),
                            mclVv(ts, "ts")),
                          NULL),
                        mlfIndexRef(
                          mclVv(gN, "gN"),
                          "{?,?}",
                          mclVv(i, "i"),
                          mclVv(ts, "ts")),
                        NULL));
                /*
                 * end
                 */
                }
                /*
                 * 
                 * % ...to Input Weights
                 * for j=ICF{i}
                 */
                {
                    mclForLoopIterator viter__4;
                    for (mclForStart(
                           &viter__4,
                           mlfIndexRef(mclVv(ICF, "ICF"), "{?}", mclVv(i, "i")),
                           NULL,
                           NULL);
                         mclForNext(&viter__4, &j);
                         ) {
                        /*
                         * gIWZ{i,j,ts} = feval(dNF{i},IWZ{i,j,ts},N{i,ts}) .* gN{i,ts};
                         */
                        mlfIndexAssign(
                          &gIWZ,
                          "{?,?,?}",
                          mclVv(i, "i"),
                          mclVv(j, "j"),
                          mclVv(ts, "ts"),
                          mclFeval(
                            mclValueVarargout(),
                            mlxTimes,
                            mlfFeval(
                              mclValueVarargout(),
                              mlfIndexRef(
                                mclVv(dNF, "dNF"), "{?}", mclVv(i, "i")),
                              mlfIndexRef(
                                mclVa(IWZ, "IWZ"),
                                "{?,?,?}",
                                mclVv(i, "i"),
                                mclVv(j, "j"),
                                mclVv(ts, "ts")),
                              mlfIndexRef(
                                mclVa(N, "N"),
                                "{?,?}",
                                mclVv(i, "i"),
                                mclVv(ts, "ts")),
                              NULL),
                            mlfIndexRef(
                              mclVv(gN, "gN"),
                              "{?,?}",
                              mclVv(i, "i"),
                              mclVv(ts, "ts")),
                            NULL));
                    /*
                     * end
                     */
                    }
                    mclDestroyForLoopIterator(viter__4);
                }
                /*
                 * 
                 * % ...to Layer Weights
                 * for j=LCF{i}
                 */
                {
                    mclForLoopIterator viter__5;
                    for (mclForStart(
                           &viter__5,
                           mlfIndexRef(mclVv(LCF, "LCF"), "{?}", mclVv(i, "i")),
                           NULL,
                           NULL);
                         mclForNext(&viter__5, &j);
                         ) {
                        /*
                         * gLWZ{i,j,ts} = feval(dNF{i},LWZ{i,j,ts},N{i,ts}) .* gN{i,ts};
                         */
                        mlfIndexAssign(
                          &gLWZ,
                          "{?,?,?}",
                          mclVv(i, "i"),
                          mclVv(j, "j"),
                          mclVv(ts, "ts"),
                          mclFeval(
                            mclValueVarargout(),
                            mlxTimes,
                            mlfFeval(
                              mclValueVarargout(),
                              mlfIndexRef(
                                mclVv(dNF, "dNF"), "{?}", mclVv(i, "i")),
                              mlfIndexRef(
                                mclVa(LWZ, "LWZ"),
                                "{?,?,?}",
                                mclVv(i, "i"),
                                mclVv(j, "j"),
                                mclVv(ts, "ts")),
                              mlfIndexRef(
                                mclVa(N, "N"),
                                "{?,?}",
                                mclVv(i, "i"),
                                mclVv(ts, "ts")),
                              NULL),
                            mlfIndexRef(
                              mclVv(gN, "gN"),
                              "{?,?}",
                              mclVv(i, "i"),
                              mclVv(ts, "ts")),
                            NULL));
                    /*
                     * end
                     */
                    }
                    mclDestroyForLoopIterator(viter__5);
                }
            /*
             * end
             */
            }
            mclDestroyForLoopIterator(viter__2);
        /*
         * end
         */
        }
        mclDestroyForLoopIterator(viter__);
    }
    /*
     * 
     * % Shortcuts
     * inputWeightCols = net.hint.inputWeightCols;
     */
    mlfAssign(
      &inputWeightCols,
      mlfIndexRef(mclVa(net, "net"), ".hint.inputWeightCols"));
    /*
     * layerWeightCols = net.hint.layerWeightCols;
     */
    mlfAssign(
      &layerWeightCols,
      mlfIndexRef(mclVa(net, "net"), ".hint.layerWeightCols"));
    /*
     * 
     * % Bias and Weight Gradients
     * for ts=1:TS
     */
    {
        int v_ = mclForIntStart(1);
        int e_ = mclForIntEnd(mclVa(TS, "TS"));
        if (v_ > e_) {
            mlfAssign(&ts, _mxarray2_);

⌨️ 快捷键说明

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