コード例 #1
0
ファイル: Tensor.For.cs プロジェクト: stuarthillary/TheaNet
        /// <summary> Add a recursive For to the loop. Returns the For created. </summary>
        public IFor AddRecursive_(ITensor expr, ITensor seed, string name)
        {
            if (seed == null)
            {
                throw new ArgumentException($"{nameof(seed)} can't be null, use AddOutput instead", nameof(seed));
            }

            ITensorVar variable = seed.Match(
                (Tensor <float> exprF) => new Tensor <float> .Var(seed.Shape, name),
                (Tensor <int> exprI) => new Tensor <int> .Var(seed.Shape, name),
                () => { throw new NotImplementedException(); return((ITensorVar)null); }
                );

            return(AddRecursive_(expr, seed, variable));
        }
コード例 #2
0
ファイル: Tensor.For.cs プロジェクト: stuarthillary/TheaNet
        /// <summary> Add a recursive For to the loop. Returns the For created. </summary>
        public IFor AddRecursive_(ITensor expr, ITensor seed, ITensorVar variable)
        {
            if (seed == null)
            {
                throw new ArgumentException($"{nameof(seed)} can't be null, use AddOutput instead", nameof(seed));
            }
            SequencesLocked = true;

            var f = expr.Match(
                (Tensor <float> exprF) => (IFor) new Tensor <float> .For(this, Fors.Count, exprF, (Tensor <float>)seed, (Tensor <float> .Var)variable),
                (Tensor <int> exprI) => new Tensor <int> .For(this, Fors.Count, exprI, (Tensor <int>)seed, (Tensor <int> .Var)variable),
                null
                );

            Fors.Add(f);
            _variables.Add(f, variable);
            return(f);
        }
コード例 #3
0
ファイル: Tensor.For.cs プロジェクト: stuarthillary/TheaNet
        private static ITensorVar _patchVar(ITensorVar v, Patch substitutions)
        {
            var lastChar      = v.Name[v.Name.Length - 1];
            var endsWithDigit = lastChar >= '0' && lastChar <= '9';
            var name          = v.Name;

            if (endsWithDigit)
            {
                name = v.Name.Substring(0, v.Name.Length - 1) + (char)((lastChar - '0') + 1);
            }
            else
            {
                name += "_1";
            }
            ITensorVar res;

            if (v is Tensor <float> .Var)
            {
                res = new Tensor <float> .Var(v.Shape.Patch(substitutions), name);
            }
            else if (v is Tensor <int> .Var)
            {
                res = new Tensor <int> .Var(v.Shape.Patch(substitutions), name);
            }
            else if (v is Tensor <double> .Var)
            {
                res = new Tensor <double> .Var(v.Shape.Patch(substitutions), name);
            }
            else
            {
                throw new NotImplementedException();
            }

            substitutions.Add_(v, res);
            return(res);
        }
コード例 #4
0
ファイル: Tensor.For.cs プロジェクト: stuarthillary/TheaNet
 public bool IsVariable(ITensorVar expr) => _variables.ContainsValue(expr);