Пример #1
0
        public static bool SetParallel <T>(this ICompressibleFunction <T> compressibleFunction, bool enable) where T : unmanaged, IComparable <T>
        {
            compressibleFunction.IsParallel = enable & OpenCL.Enable;

            if (compressibleFunction.IsParallel)
            {
                string kernelNameBase = compressibleFunction.FunctionName.Replace(" ", "");
                compressibleFunction.ForwardKernelName    = kernelNameBase + "Forward";
                compressibleFunction.BackwardgWKernelName = kernelNameBase + "gWBackward";
                compressibleFunction.BackwardgXKernelName = kernelNameBase + "gXBackward";

                string kernelSource = compressibleFunction.KernelSource;

                if (compressibleFunction.Activation is ICompressibleActivation <T> activator)
                {
                    //アクティベーションを活性化
                    kernelSource = activator.KernelSource + kernelSource.Replace("/*ForwardActivate*/", "ForwardActivate");
                }

                ComputeProgram program = OpenCL.CreateProgram <T>(kernelSource);
                compressibleFunction.ForwardKernel    = program.CreateKernel(compressibleFunction.ForwardKernelName);
                compressibleFunction.BackwardgWKernel = program.CreateKernel(compressibleFunction.BackwardgWKernelName);
                compressibleFunction.BackwardgXKernel = program.CreateKernel(compressibleFunction.BackwardgXKernelName);
            }

            return(compressibleFunction.IsParallel);
        }
        public static Real[] GetActivatedgy(this ICompressibleFunction compressibleFunction, NdArray y)
        {
            Real[] activatedgy = new Real[y.Grad.Length];

            for (int i = 0; i < activatedgy.Length; i++)
            {
                activatedgy[i] = compressibleFunction.Activation.BackwardActivate(y.Grad[i], y.Data[i]);
            }

            return(activatedgy);
        }