/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }