public TorchTensor forward(TorchTensor t, TorchTensor mask) { var src = pos_encoder.forward(encoder.forward(t) * MathF.Sqrt(ninputs)); var enc = transformer_encoder.forward(src, mask); return(decoder.forward(enc)); }
private torch.Tensor ForwardEmbedding(torch.Tensor tokens, torch.Tensor segmentLabels, torch.Tensor positions) { using var disposeScope = torch.NewDisposeScope(); var x = TokenEmbedding.forward(tokens); if (EmbedScale != null) { x.mul_(EmbedScale); } if (PositionalEmbedding != null) { var positionalEmbedding = PositionalEmbedding.forward(tokens, new Dictionary <string, object> { { PositionalEmbedding.PositionKey, positions } }); x.add_(positionalEmbedding); } if (SegmentEmbedding != null && segmentLabels.IsNotNull()) { var segmentEmbedding = SegmentEmbedding.forward(segmentLabels); x.add_(segmentEmbedding); } if (EmbeddingLayerNorm != null) { x = EmbeddingLayerNorm.forward(x); } x = EmbedTransfer.forward(x, (int)x.size()[x.size().Length - 1]); x = DropoutLayer.forward(x); return(x.MoveToOuterDisposeScope()); }
public override torch.Tensor forward(torch.Tensor input, Dictionary <string, object> param = null) { using var disposeScope = torch.NewDisposeScope(); ParseArguments(param, out var incrementalState, out var positions); if (positions.IsNull()) { positions = incrementalState ? torch.tensor(PadPositionIndex + input.size(1)) : MakePositions(input, PadTokenIndex); } var embedding = Embedding.forward(positions); return(embedding.MoveToOuterDisposeScope()); }