Ejemplo n.º 1
0
        /// <summary>
        /// 两个Tensor相乘,结果返回为新的Tensor。
        /// 目前仅支持scalar、vector、matrix的乘法
        /// </summary>
        /// <param name="a">Tensor1</param>
        /// <param name="b">Tensor2</param>
        /// <returns>包含结果的新的Tensor</returns>
        public static TensorOld Multiple(TensorOld a, TensorOld b)
        {
            if (a.ElementCount == 1)
            {
                return(Multiple(b, a.GetValue()));
            }
            if (b.ElementCount == 1)
            {
                return(Multiple(a, b.GetValue()));
            }

            if (a.Rank == 1)
            {
                a = a.Reshape(1, a.ElementCount);
            }
            if (b.Rank == 1)
            {
                b = b.Reshape(b.ElementCount, 1);
            }

            CheckMultipleShape(a, b);
            var result = new TensorOld(a.shape[0], b.shape[1]);

            Multiple(a, b, result);

            return(result);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 把t加到当前Tensor,t和当前Tensor必须要有相同的结构
        /// </summary>
        /// <param name="t">要加的Tensor</param>
        /// <returns>当前Tensor</returns>
        public TensorOld Add(TensorOld t)
        {
            if (t.ElementCount == 1)
            {
                return(Add(t.GetValue()));
            }

            CheckShape(shape, t.shape);

            Add(this, t, this);
            return(this);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 当前Tensor和t的点积,结果保存在当前Tensor,要求两个Tensor结构一致
        /// </summary>
        /// <param name="t">乘上的Tensor</param>
        /// <returns>当前Tensor</returns>
        public TensorOld MultipleElementWise(TensorOld t)
        {
            if (t.ElementCount == 1)
            {
                return(Multiple(t.GetValue()));
            }

            CheckShape(shape, t.shape);

            MultipleElementWise(this, t, this);
            return(this);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 两个Tensor的点积,结果返回为新的Tensor,要求两个Tensor结构一致
        /// </summary>
        /// <param name="a">Tensor1</param>
        /// <param name="b">Tensor2</param>
        /// <returns>包含结果的新的Tensor</returns>
        public static TensorOld MultipleElementWise(TensorOld a, TensorOld b)
        {
            if (a.ElementCount == 1)
            {
                return(Multiple(b, a.GetValue()));
            }
            if (b.ElementCount == 1)
            {
                return(Multiple(a, b.GetValue()));
            }

            var result = a.GetSameShape();

            MultipleElementWise(a, b, result);
            return(result);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Tensor和Tensor对应元素相加,结果返回为新的Tensor,要求两个Tensor结构相同
        /// </summary>
        /// <param name="a">Tensor</param>
        /// <param name="b">Tensor</param>
        /// <returns>相加后的结果</returns>
        public static TensorOld Add(TensorOld a, TensorOld b)
        {
            if (a.ElementCount == 1)
            {
                return(Add(b, a.GetValue()));
            }
            if (b.ElementCount == 1)
            {
                return(Add(a, b.GetValue()));
            }

            CheckShape(a, b);
            var result = a.GetSameShape();

            Add(a, b, result);
            return(result);
        }