コード例 #1
0
 public void Matrix_WeightAdd_EX_Full(CudaPieceFloat gpu_floats_a, CudaPieceFloat gpu_floats_b, CudaPieceInt inver_neg_index,
                                      CudaPieceInt inver_neg_value, int nTrial, int BATCHSIZE, int batchsize, int dimension, CudaPieceFloat mweight,
                                      int start, int keep)
 {
     BasicMathlib.Matrix_WeightAdd_EX_Full(gpu_floats_a.MemPtr, gpu_floats_b.MemPtr, inver_neg_index.MemPtr,
                                           inver_neg_value.MemPtr, nTrial, BATCHSIZE, batchsize, dimension, mweight.MemPtr, start, keep);
 }
コード例 #2
0
        /// <summary>
        /// End of Batch Grad.
        /// </summary>
        public override void EndBatch()
        {
            if (GradIdx == 0)
            {
                MathOperatorManager.GlobalInstance.Zero(direction, Num);
                MathOperatorManager.GlobalInstance.Matrix_Add_OFFSET(direction, 0, grad_list[GradIdx % GradHistory], 0, Num, 1);
            }
            else
            {
                //yk = gk+1−gk   -yk = gk - gk+1
                //βHS(k) = gT(k+1)y(k) / dT(k) y(k)  (1952) in the original (linear) CG paper of Hestenes and Stiefel [59]

                //Cudalib.Matrix_Add_OFFSET(grad_list[(GradIdx - 1) % GradHistory].CudaPtr, 0, grad_list[GradIdx % GradHistory].CudaPtr, 0, Num, -1);

                /*grad_list[(GradIdx - 1) % GradHistory].CopyOutFromCuda();
                 * direction.CopyOutFromCuda();
                 * grad_list[GradIdx % GradHistory].CopyOutFromCuda();
                 *
                 * float g1 = BasicMathlib.VectorInnerProduct(grad_list[GradIdx % GradHistory].MemPtr, 0, grad_list[GradIdx % GradHistory].MemPtr, 0, Num);
                 * float g2 = BasicMathlib.VectorInnerProduct(grad_list[GradIdx % GradHistory].MemPtr, 0, grad_list[(GradIdx - 1) % GradHistory].MemPtr, 0, Num);
                 * float s1 = BasicMathlib.VectorInnerProduct(direction.MemPtr, 0, grad_list[(GradIdx ) % GradHistory].MemPtr, 0, Num);
                 * float s2 = BasicMathlib.VectorInnerProduct(direction.MemPtr, 0, grad_list[(GradIdx - 1) % GradHistory].MemPtr, 0, Num);
                 * //float dy = BasicMathlib.VectorInnerProduct(direction.MemPtr, 0, grad_list[(GradIdx - 1) % GradHistory].MemPtr, 0, Num);
                 *
                 * float beta = 0;
                 * if (Math.Abs(s1-s2) > float.Epsilon)
                 * {
                 *  beta = (g1 - g2) / (s1 - s2);
                 * }
                 */

                grad_list[(GradIdx - 1) % GradHistory].CopyOutFromCuda();
                grad_list[GradIdx % GradHistory].CopyOutFromCuda();
                float gk   = BasicMathlib.VectorInnerProduct(grad_list[GradIdx % GradHistory].MemPtr, 0, grad_list[GradIdx % GradHistory].MemPtr, 0, Num);
                float gk_1 = BasicMathlib.VectorInnerProduct(grad_list[(GradIdx - 1) % GradHistory].MemPtr, 0, grad_list[(GradIdx - 1) % GradHistory].MemPtr, 0, Num);
                float beta = gk * 1.0f / (gk_1 + float.Epsilon);

                Console.WriteLine("Beta Value ....................." + beta.ToString());
                //dk+1 =−gk+1 + βk dk, d0 =−g0
                MathOperatorManager.GlobalInstance.Scale_Matrix(direction, 1, Num, beta); // grad_list[GradIdx % GradHistory].CudaPtr, 0, Num, 1);
                MathOperatorManager.GlobalInstance.Matrix_Add(direction, grad_list[GradIdx % GradHistory], 1, Num, 1.0f);
            }

            //xk+1 = xk + αk dk
            MathOperatorManager.GlobalInstance.Matrix_Add(parameters, direction, 1, Num, -LearnRate);
        }
コード例 #3
0
 public void Matrix_Add_OFFSET(CudaPieceFloat a, int offset_a, CudaPieceFloat b, int offset_b, int len, float mweight)
 {
     BasicMathlib.Matrix_Add_OFFSET(a.MemPtr, offset_a, b.MemPtr, offset_b, len, mweight);
 }
コード例 #4
0
 public void InnerProduct_Similarity(CudaPieceFloat a, CudaPieceFloat b, CudaPieceFloat c, int batchsize, int dimension)
 {
     BasicMathlib.InnerProduct_Similarity(a.MemPtr, b.MemPtr, c.MemPtr, batchsize, dimension);
 }
コード例 #5
0
 public void SoftMax(CudaPieceFloat a, CudaPieceFloat b, int labelDim, int batchsize, float gamma)
 {
     BasicMathlib.SoftMax(a.MemPtr, b.MemPtr, labelDim, batchsize, gamma);
 }
コード例 #6
0
 public void Matrix_Aggragate(CudaPieceFloat a, CudaPieceFloat b, int batchsize, int m)
 {
     BasicMathlib.Matrix_Aggragate(a.MemPtr, b.MemPtr, batchsize, m);
 }
コード例 #7
0
 public void Matrix_Add(CudaPieceFloat matrix, CudaPieceFloat updates, int inputDimension, int outputDimnsion, float learning_rate)
 {
     BasicMathlib.Matrix_Add(matrix.MemPtr, updates.MemPtr, inputDimension, outputDimnsion, learning_rate);
 }
コード例 #8
0
 public void Matrix_Product(CudaPieceFloat lowerOutput, CudaPieceFloat upperOutputErrorDeriv, CudaPieceFloat weightDeriv, int batchsize, int inputDimension, int outputDimension)
 {
     BasicMathlib.Matrix_Product(lowerOutput.MemPtr, upperOutputErrorDeriv.MemPtr, weightDeriv.MemPtr,
                                 batchsize, inputDimension, outputDimension);
 }
コード例 #9
0
 public void Calculate_Alpha_NCE2(CudaPieceFloat alpha, CudaPieceFloat dist, int nTrailPlus1, int BATCH_SIZE, int batchsize, float GAMMA)
 {
     BasicMathlib.Calculate_Alpha_NCE2(alpha.MemPtr, dist.MemPtr, nTrailPlus1, BATCH_SIZE, batchsize, GAMMA);
 }
コード例 #10
0
 public void Cosine_Similarity_EX(CudaPieceFloat srcTopLayerOutput, CudaPieceFloat tgtTopLayerOutput, CudaPieceInt GPU_negative_index, CudaPieceFloat alpha, int nTrailPlus1, int BATCH_SIZE, int mIndex, int batchsize, int topLayerSize, float eps)
 {
     BasicMathlib.Cosine_Similarity_EX(srcTopLayerOutput.MemPtr,
                                       tgtTopLayerOutput.MemPtr, GPU_negative_index.MemPtr, alpha.MemPtr, nTrailPlus1, BATCH_SIZE, mIndex,
                                       batchsize, topLayerSize, eps);
 }
コード例 #11
0
 public void Matrix_Rectified_Vector(CudaPieceFloat output, CudaPieceFloat bias, int batchsize, int outputDimension)
 {
     BasicMathlib.Matrix_Rectified_Vector(output.MemPtr, bias.MemPtr, batchsize, outputDimension);
 }
コード例 #12
0
 public void Matrix_Add_Tanh(CudaPieceFloat output, CudaPieceFloat bias, int batchsize, int outputDimension)
 {
     BasicMathlib.Matrix_Add_Tanh(output.MemPtr, bias.MemPtr, batchsize, outputDimension);
 }
コード例 #13
0
 public void Matrix_Multipy(CudaPieceFloat input, CudaPieceFloat weight, CudaPieceFloat output, int batchsize, int inputDimension, int outputDimension, int inverse)
 {
     BasicMathlib.Matrix_Multipy(input.MemPtr, weight.MemPtr, output.MemPtr, batchsize, inputDimension, outputDimension, inverse);
 }
コード例 #14
0
 public void Max_Pooling(CudaPieceFloat layerPoolingOutput, BatchSample_Input data, CudaPieceFloat output, CudaPieceInt layerMaxPooling_Index, int outputDimension)
 {
     BasicMathlib.Max_Pooling(layerPoolingOutput.MemPtr, data.Sample_Idx_Mem, data.batchsize, output.MemPtr, layerMaxPooling_Index.MemPtr, outputDimension);
 }
コード例 #15
0
 public void Convolution_Sparse_Matrix_Multiply_INTEX(BatchSample_Input data, CudaPieceFloat weight, CudaPieceFloat layerPoolingOutput, int inputDimension, int outputDimension, int winSize)
 {
     BasicMathlib.Convolution_Sparse_Matrix_Multiply_INTEX(data.Sample_Idx_Mem, data.batchsize, data.Seg_Idx_Mem, data.Seg_Margin_Mem, data.Seg_Len_Mem, data.segsize, data.Fea_Idx_Mem, data.Fea_Value_Mem, data.elementsize,
                                                           weight.MemPtr, layerPoolingOutput.MemPtr, inputDimension, outputDimension, winSize);
 }
コード例 #16
0
 public void SEQ_Sparse_Matrix_Transpose_Multiply_INTEX(BatchSample_Input input_batch, CudaPieceFloat weightDeriv, CudaPieceFloat upperOutputErrorDeriv, int inputDimension, int outputDimension, int winSize)
 {
     BasicMathlib.SEQ_Sparse_Matrix_Transpose_Multiply_INTEX(input_batch.Sample_Idx_Mem, input_batch.batchsize, input_batch.Seg_Idx_Mem, input_batch.Seg_Margin_Mem, input_batch.Seg_Len_Mem, input_batch.segsize, input_batch.Fea_Idx_Mem, input_batch.Fea_Value_Mem, input_batch.elementsize,
                                                             weightDeriv.MemPtr, upperOutputErrorDeriv.MemPtr, inputDimension, outputDimension, winSize);
 }
コード例 #17
0
 public void Convolution_Sparse_Matrix_Product_INTEX(CudaPieceFloat upperOutputErrorDeriv, CudaPieceInt layerMaxPooling_Index, BatchSample_Input input_batch, int winSize, int batchsize, int outputDimension, CudaPieceFloat weightDeriv, int inputDimension)
 {
     BasicMathlib.Convolution_Sparse_Matrix_Product_INTEX(upperOutputErrorDeriv.MemPtr, layerMaxPooling_Index.MemPtr, input_batch.Seg_Idx_Mem, input_batch.Seg_Margin_Mem, input_batch.segsize, winSize,
                                                          batchsize, outputDimension, input_batch.Fea_Idx_Mem, input_batch.Fea_Value_Mem, weightDeriv.MemPtr, inputDimension);
 }
コード例 #18
0
 public void Calculate_Alpha_PAIRRANK(CudaPieceFloat alpha, int nTrailPlus1, int BATCH_SIZE, int batchsize, float GAMMA)
 {
     BasicMathlib.Calculate_Alpha_PAIRRANK(alpha.MemPtr, nTrailPlus1, BATCH_SIZE, batchsize, GAMMA);
 }
コード例 #19
0
 public void Scale_Matrix(CudaPieceFloat matrix, int inputDimension, int outputDimnsion, float momentum)
 {
     BasicMathlib.Scale_Matrix(matrix.MemPtr, inputDimension, outputDimnsion, momentum);
 }
コード例 #20
0
 public void FillOut_Dist_NCE(CudaPieceFloat dist, CudaPieceInt GPU_negative_index, int nTrailPlus1, int BATCH_SIZE, int mIndex, int batchsize)
 {
     BasicMathlib.FillOut_Dist_NCE(dist.MemPtr, GPU_negative_index.MemPtr, nTrailPlus1, BATCH_SIZE, mIndex, batchsize);
 }
コード例 #21
0
 public void Sparse2Dense_Matrix(BatchSample_Input data, CudaPieceFloat matrix, int batchsize, int outputDimension)
 {
     BasicMathlib.Sparse2Dense_Matrix(data.Seg_Idx_Mem, data.Fea_Idx_Mem, data.Fea_Value_Mem, matrix.MemPtr, batchsize, outputDimension);
 }
コード例 #22
0
 public void Derive_Cosine_Linear(CudaPieceFloat srcTopLayerOutput, CudaPieceFloat tgtTopLayerOutput, CudaPieceFloat srcTopLayerOutputDeriv, CudaPieceFloat tgtTopLayerOutputDeriv, int batchsize, int outputLayerSize, float eps)
 {
     BasicMathlib.Derive_Cosine_Linear(srcTopLayerOutput.MemPtr, tgtTopLayerOutput.MemPtr, srcTopLayerOutputDeriv.MemPtr, tgtTopLayerOutputDeriv.MemPtr, batchsize, outputLayerSize, eps);
 }
コード例 #23
0
 public void Cosine_Similarity_SubSpace(CudaPieceFloat a, CudaPieceFloat b, CudaPieceFloat c, int labelDim, int BATCHSIZE, int batchsize, int subspaceDim, float eps)
 {
     BasicMathlib.Cosine_Similarity_SubSpace(a.MemPtr, b.MemPtr, c.MemPtr, labelDim, BATCHSIZE, batchsize, subspaceDim, eps);
 }
コード例 #24
0
 public void Derive_Cosine_Rectified_EX(CudaPieceFloat srcTopLayerOutput, CudaPieceFloat tgtTopLayerOutput, CudaPieceInt GPU_negative_index, CudaPieceFloat srcTopLayerOutputDeriv, CudaPieceFloat tgtTopLayerOutputDeriv, int batchsize, int outputLayerSize, float eps)
 {
     BasicMathlib.Derive_Cosine_Rectified_EX(srcTopLayerOutput.MemPtr, tgtTopLayerOutput.MemPtr, GPU_negative_index.MemPtr, srcTopLayerOutputDeriv.MemPtr, tgtTopLayerOutputDeriv.MemPtr, batchsize, outputLayerSize, eps);
 }
コード例 #25
0
 public void Deriv_Cosine_Subspace(CudaPieceFloat q, CudaPieceFloat d, CudaPieceFloat dcq, CudaPieceFloat dcd, CudaPieceFloat alpha, int act_type, int batchsize, int labelDim, int subspaceDim, float gamma, float eps)
 {
     BasicMathlib.Deriv_Cosine_Subspace(q.MemPtr, d.MemPtr, dcq.MemPtr, dcd.MemPtr, alpha.MemPtr, act_type, batchsize, labelDim, subspaceDim, gamma, eps);
 }
コード例 #26
0
 public void Matrix_WeightAdd(CudaPieceFloat result, CudaPieceFloat addTerm, int batchsize, int outputLayerSize, CudaPieceFloat mweight, int start, int keep)
 {
     BasicMathlib.Matrix_WeightAdd(result.MemPtr, addTerm.MemPtr, batchsize, outputLayerSize, mweight.MemPtr, start, keep);
 }
コード例 #27
0
 public void Deriv_InnerProduct(CudaPieceFloat q, CudaPieceFloat d, CudaPieceFloat dcq, CudaPieceFloat dcd, CudaPieceFloat alpha, int act_type, int batchsize, int Dim, float gamma, float eps)
 {
     BasicMathlib.Deriv_InnerProduct(q.MemPtr, d.MemPtr, dcq.MemPtr, dcd.MemPtr, alpha.MemPtr, act_type, batchsize, Dim, gamma, eps);
 }
コード例 #28
0
 public void Matrix_WeightAdd_EX(CudaPieceFloat result, CudaPieceFloat addTerm, CudaPieceInt GPU_Inver_negative_index, CudaPieceInt GPU_Inver_negative_value, int batchsize, int outputLayerSize, CudaPieceFloat mweight, int start, int keep)
 {
     BasicMathlib.Matrix_WeightAdd_EX(result.MemPtr, addTerm.MemPtr, GPU_Inver_negative_index.MemPtr, GPU_Inver_negative_value.MemPtr, batchsize, outputLayerSize, mweight.MemPtr, start, keep);
 }
コード例 #29
0
 public void Deriv_Rectified(CudaPieceFloat errorDeriv, CudaPieceFloat output, int batchsize, int inputDimension)
 {
     BasicMathlib.Deriv_Rectified(errorDeriv.MemPtr, output.MemPtr, batchsize, inputDimension);
 }
コード例 #30
0
 public void Matrix_WeightAdd_Full(CudaPieceFloat gpu_floats_a, CudaPieceFloat gpu_floats_b, int nTrail, int BATCHSIZE, int batchsize, int dimension,
                                   CudaPieceFloat mweight, int start, int keep)
 {
     BasicMathlib.Matrix_WeightAdd_Full(gpu_floats_a.MemPtr, gpu_floats_b.MemPtr, nTrail, BATCHSIZE, batchsize, dimension,
                                        mweight.MemPtr, start, keep);
 }