public IWeightTensor AddTanh(IWeightTensor w1, IWeightTensor w2, IWeightTensor w3) { WeightTensor m1 = w1 as WeightTensor; WeightTensor m2 = w2 as WeightTensor; WeightTensor m3 = w3 as WeightTensor; WeightTensor res = m_weightTensorFactory.CreateWeightTensor(m1.Sizes, m_deviceId, name: $"{GetHashString(w1.Name, w2.Name, w3.Name)}.AddTanh"); VisualizeNodes(new IWeightTensor[] { w1, w2, w3 }, res); Ops.AddTanh3(res.TWeight, m1.TWeight, m2.TWeight, m3.TWeight); if (m_needsBackprop) { Action backward = () => { m1.AddTanhGradient(res); m2.AddTanhGradient(res); m3.AddTanhGradient(res); res.Dispose(); }; m_backprop.Add(backward); } return(res); }