Views
No views yet
1from huggingface_hub import snapshot_download
2import sys, torch
3
4repo_dir = snapshot_download(
5 repo_id="amaye15/autoencoder",
6 repo_type="model",
7 allow_patterns=["*.py", "config.json", "*.safetensors"],
8)
9sys.path.append(repo_dir)
10
11from modeling_autoencoder import AutoencoderForReconstruction
12model = AutoencoderForReconstruction.from_pretrained(repo_dir)
13
14x = torch.randn(8, 20)
15out = model(input_values=x)
16print("latent:", out.last_hidden_state.shape, "reconstructed:", out.reconstructed.shape)1from modeling_autoencoder import AutoencoderModel
2from template import ClassicAutoencoderConfig
3
4cfg = ClassicAutoencoderConfig(input_dim=784, latent_dim=64)
5model = AutoencoderModel(cfg)
6
7x = torch.randn(4, 784)
8out = model(x, return_dict=True)
9print(out.last_hidden_state.shape, out.reconstructed.shape)1{
2 "type": "linear",
3 "input_dim": 256,
4 "output_dim": 128,
5 "activation": "relu", # relu, gelu, tanh, sigmoid, etc.
6 "normalization": "batch", # batch, layer, group, instance, none
7 "dropout_rate": 0.1,
8 "use_residual": False, # adds skip connection if input_dim == output_dim
9 "residual_scale": 1.0
10}1{
2 "type": "attention",
3 "input_dim": 128,
4 "num_heads": 8,
5 "ffn_dim": 512, # if None, defaults to 4 * input_dim
6 "dropout_rate": 0.1
7}1{
2 "type": "recurrent",
3 "input_dim": 64,
4 "hidden_size": 128,
5 "num_layers": 2,
6 "rnn_type": "lstm", # lstm, gru, rnn
7 "bidirectional": True,
8 "dropout_rate": 0.1,
9 "output_dim": 128 # final output dimension
10}1{
2 "type": "conv1d",
3 "input_dim": 64, # input channels
4 "output_dim": 128, # output channels
5 "kernel_size": 3,
6 "padding": "same", # "same" or integer
7 "activation": "relu",
8 "normalization": "batch",
9 "dropout_rate": 0.1
10}1{
2 "type": "variational",
3 "input_dim": 128,
4 "latent_dim": 64
5}1from configuration_autoencoder import AutoencoderConfig
2
3enc = [
4 # 1D convolution for local patterns
5 {"type": "conv1d", "input_dim": 64, "output_dim": 128, "kernel_size": 3, "padding": "same", "activation": "relu"},
6 {"type": "conv1d", "input_dim": 128, "output_dim": 128, "kernel_size": 3, "padding": "same", "activation": "relu"},
7
8 # Self-attention for global dependencies
9 {"type": "attention", "input_dim": 128, "num_heads": 8, "ffn_dim": 512, "dropout_rate": 0.1},
10
11 # Final linear projection
12 {"type": "linear", "input_dim": 128, "output_dim": 64, "activation": "relu", "normalization": "batch"}
13]
14
15dec = [
16 {"type": "linear", "input_dim": 32, "output_dim": 64, "activation": "relu", "normalization": "batch"},
17 {"type": "linear", "input_dim": 64, "output_dim": 128, "activation": "relu", "normalization": "batch"},
18 {"type": "linear", "input_dim": 128, "output_dim": 64, "activation": "identity", "normalization": "none"}
19]
20
21cfg = AutoencoderConfig(
22 input_dim=64,
23 latent_dim=32,
24 autoencoder_type="classic",
25 encoder_blocks=enc,
26 decoder_blocks=dec
27)1enc = [
2 # Local features
3 {"type": "linear", "input_dim": 784, "output_dim": 512, "activation": "relu", "normalization": "batch"},
4 {"type": "linear", "input_dim": 512, "output_dim": 256, "activation": "relu", "normalization": "batch"},
5
6 # Mid-level features with residual
7 {"type": "linear", "input_dim": 256, "output_dim": 256, "activation": "relu", "normalization": "batch", "use_residual": True},
8 {"type": "linear", "input_dim": 256, "output_dim": 256, "activation": "relu", "normalization": "batch", "use_residual": True},
9
10 # High-level features
11 {"type": "linear", "input_dim": 256, "output_dim": 128, "activation": "relu", "normalization": "batch"},
12 {"type": "linear", "input_dim": 128, "output_dim": 64, "activation": "relu", "normalization": "batch"}
13]1enc = [
2 {"type": "recurrent", "input_dim": 100, "hidden_size": 128, "num_layers": 2, "rnn_type": "lstm", "bidirectional": True, "output_dim": 256},
3 {"type": "linear", "input_dim": 256, "output_dim": 128, "activation": "tanh", "normalization": "layer"}
4]
5
6dec = [
7 {"type": "linear", "input_dim": 64, "output_dim": 128, "activation": "tanh", "normalization": "layer"},
8 {"type": "linear", "input_dim": 128, "output_dim": 100, "activation": "identity", "normalization": "none"}
9]1from configuration_autoencoder import AutoencoderConfig
2cfg = AutoencoderConfig(
3 input_dim=128,
4 latent_dim=32,
5 autoencoder_type="variational",
6 encoder_blocks=[{"type": "linear", "input_dim": 128, "output_dim": 64, "activation": "relu"}],
7 decoder_blocks=[{"type": "linear", "input_dim": 32, "output_dim": 128, "activation": "identity", "normalization": "none"}],
8)1from modeling_autoencoder import AutoencoderModel
2x = torch.randn(8, 20)
3out = model(x, return_dict=True)
4print(out.last_hidden_state.shape, out.reconstructed.shape)1out = model(x, return_dict=True, output_hidden_states=True)
2latent, mu, logvar = out.hidden_states1from template import PreprocessedAutoencoderConfig
2cfg = PreprocessedAutoencoderConfig(input_dim=64, latent_dim=32, preprocessing_type="neural_scaler")
3model = AutoencoderModel(cfg)1from modeling_autoencoder import AutoencoderModel
2from template import ClassicAutoencoderConfig
3
4cfg = ClassicAutoencoderConfig(input_dim=784, latent_dim=64)
5model = AutoencoderModel(cfg)
6opt = torch.optim.Adam(model.parameters(), lr=1e-3)
7
8for x in dataloader: # x: (B, 784)
9 out = model(x, return_dict=True)
10 loss = torch.nn.functional.mse_loss(out.reconstructed, x)
11 loss.backward(); opt.step(); opt.zero_grad()1from template import VariationalAutoencoderConfig
2cfg = VariationalAutoencoderConfig(input_dim=784, latent_dim=32)
3model = AutoencoderModel(cfg)
4
5for x in dataloader:
6 out = model(x, return_dict=True, output_hidden_states=True)
7 recon = torch.nn.functional.mse_loss(out.reconstructed, x)
8 _, mu, logvar = out.hidden_states
9 kl = -0.5 * torch.mean(1 + logvar - mu.pow(2) - logvar.exp())
10 loss = recon + cfg.beta * kl
11 loss.backward(); opt.step(); opt.zero_grad()1from template import ConvAttentionAutoencoderConfig
2cfg = ConvAttentionAutoencoderConfig(input_dim=64, latent_dim=64)
3model = AutoencoderModel(cfg)
4
5x = torch.randn(8, 50, 64) # (B, T, D)
6out = model(x, return_dict=True)1from modeling_autoencoder import AutoencoderForReconstruction
2
3model.save_pretrained("./my_ae")
4reloaded = AutoencoderForReconstruction.from_pretrained("./my_ae")1from transformers import Trainer, TrainingArguments
2from modeling_autoencoder import AutoencoderForReconstruction
3from template import ClassicAutoencoderConfig
4import torch
5from torch.utils.data import Dataset
6
7# 1) Config and model
8cfg = ClassicAutoencoderConfig(input_dim=64, latent_dim=16)
9model = AutoencoderForReconstruction(cfg)
10
11# 2) Dummy dataset (replace with your own)
12class ToyAEDataset(Dataset):
13 def __init__(self, n=1024, d=64):
14 self.x = torch.randn(n, d)
15 def __len__(self):
16 return self.x.size(0)
17 def __getitem__(self, idx):
18 xi = self.x[idx]
19 return {"input_values": xi, "labels": xi}
20
21train_ds = ToyAEDataset()
22
23# 3) TrainingArguments
24args = TrainingArguments(
25 output_dir="./ae-trainer",
26 per_device_train_batch_size=64,
27 learning_rate=1e-3,
28 num_train_epochs=3,
29 logging_steps=50,
30 save_steps=200,
31 report_to=[], # disable wandb if not configured
32)
33
34# 4) Trainer
35trainer = Trainer(
36 model=model,
37 args=args,
38 train_dataset=train_ds,
39)
40
41# 5) Train
42trainer.train()
43
44# 6) Use the model
45x = torch.randn(4, 64)
46out = model(input_values=x, return_dict=True)
47print(out.last_hidden_state.shape, out.reconstructed.shape)1from configuration_autoencoder import AutoencoderConfig
2from modeling_autoencoder import AutoencoderModel
3import torch
4
5# Encoder: Linear -> Attention -> Linear
6enc = [
7 {"type": "linear", "input_dim": 128, "output_dim": 128, "activation": "relu", "normalization": "batch", "dropout_rate": 0.1},
8 {"type": "attention", "input_dim": 128, "num_heads": 4, "ffn_dim": 512, "dropout_rate": 0.1},
9 {"type": "linear", "input_dim": 128, "output_dim": 64, "activation": "relu", "normalization": "batch"},
10]
11
12# Decoder: Linear -> Linear (final identity)
13dec = [
14 {"type": "linear", "input_dim": 32, "output_dim": 64, "activation": "relu", "normalization": "batch"},
15 {"type": "linear", "input_dim": 64, "output_dim": 128, "activation": "identity", "normalization": "none"},
16]
17
18cfg = AutoencoderConfig(
19 input_dim=128,
20 latent_dim=32,
21 encoder_blocks=enc,
22 decoder_blocks=dec,
23 autoencoder_type="classic",
24)
25
26model = AutoencoderModel(cfg)
27x = torch.randn(4, 128)
28out = model(x, return_dict=True)
29print(out.last_hidden_state.shape, out.reconstructed.shape)1from template import PreprocessedAutoencoderConfig
2cfg = PreprocessedAutoencoderConfig(input_dim=64, latent_dim=32, preprocessing_type="neural_scaler")1from modeling_autoencoder import AutoencoderForReconstruction
2
3# Save
4model.save_pretrained("./my_ae")
5# Load
6reloaded = AutoencoderForReconstruction.from_pretrained("./my_ae")