Added a way to detach models and create them standalone
This commit is contained in:
32
Project_Model/Libs/Transformer/Models/NanoSocraDecoder.py
Normal file
32
Project_Model/Libs/Transformer/Models/NanoSocraDecoder.py
Normal file
@@ -0,0 +1,32 @@
|
||||
import torch
|
||||
import Project_Model.Libs.Embedder as Embedder
|
||||
from ..Classes import DeToken
|
||||
|
||||
class NanoSocraDecoder(torch.nn.Module):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
decoder_embedder: Embedder.NanoSocratesEmbedder,
|
||||
decoder_layers: torch.nn.Sequential,
|
||||
detokener: DeToken
|
||||
) -> None:
|
||||
super().__init__()
|
||||
|
||||
|
||||
self.__decoder_embedder = decoder_embedder
|
||||
self.__decoder = decoder_layers
|
||||
self.__detokener = detokener
|
||||
|
||||
def forward(self, args: tuple[torch.Tensor, torch.Tensor]):
|
||||
|
||||
decoder_embedder_input, tgt_padding = args
|
||||
|
||||
decoder_tensor = self.__decoder_embedder(decoder_embedder_input)
|
||||
|
||||
decoder_output, _, _, _, _, _ = self.__decoder(
|
||||
(decoder_tensor, decoder_tensor, decoder_tensor, tgt_padding, tgt_padding, False)
|
||||
)
|
||||
|
||||
logits: torch.Tensor = self.__detokener(decoder_output)
|
||||
|
||||
return logits
|
||||
29
Project_Model/Libs/Transformer/Models/NanoSocratEncoder.py
Normal file
29
Project_Model/Libs/Transformer/Models/NanoSocratEncoder.py
Normal file
@@ -0,0 +1,29 @@
|
||||
import torch
|
||||
import Project_Model.Libs.Embedder as Embedder
|
||||
from ..Classes import DeToken
|
||||
|
||||
class NanoSocratEncoder(torch.nn.Module):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
encoder_embedder: Embedder.NanoSocratesEmbedder,
|
||||
encoder_layers: torch.nn.Sequential,
|
||||
detokener: DeToken
|
||||
) -> None:
|
||||
super().__init__()
|
||||
|
||||
self.__encoder_embedder = encoder_embedder
|
||||
self.__encoder = encoder_layers
|
||||
self.__detokener = detokener
|
||||
|
||||
def forward(self, args: tuple[torch.Tensor, torch.Tensor]):
|
||||
|
||||
encoder_embedder_input, src_padding = args
|
||||
|
||||
encoder_tensor = self.__encoder_embedder(encoder_embedder_input)
|
||||
|
||||
encoder_output, _ = self.__encoder((encoder_tensor, src_padding))
|
||||
|
||||
logits: torch.Tensor = self.__detokener(encoder_output)
|
||||
|
||||
return logits
|
||||
@@ -46,10 +46,17 @@ class TrainingModel(torch.nn.Module):
|
||||
|
||||
encoder_output, _ = self.__encoder((encoder_tensor, src_padding))
|
||||
|
||||
decoder_output, _, _, _, _ = self.__decoder(
|
||||
(decoder_tensor, encoder_output, encoder_output, src_padding, tgt_padding)
|
||||
decoder_output, _, _, _, _, _ = self.__decoder(
|
||||
(decoder_tensor, encoder_output, encoder_output, src_padding, tgt_padding, False)
|
||||
)
|
||||
|
||||
logits: torch.Tensor = self.__detokener(decoder_output)
|
||||
|
||||
return logits
|
||||
|
||||
def take_pieces(self):
|
||||
|
||||
return (
|
||||
(self.__encoder_embedder, self.__encoder),
|
||||
(self.__decoder_embedder, self.__decoder, self.__detokener)
|
||||
)
|
||||
@@ -1,5 +1,9 @@
|
||||
from .TrainingModel import TrainingModel
|
||||
from .NanoSocratEncoder import NanoSocratEncoder
|
||||
from .NanoSocraDecoder import NanoSocraDecoder
|
||||
|
||||
__all__ = [
|
||||
"TrainingModel"
|
||||
"TrainingModel",
|
||||
"NanoSocratEncoder",
|
||||
"NanoSocraDecoder"
|
||||
]
|
||||
Reference in New Issue
Block a user