view model training
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
import os
|
||||
import sys
|
||||
|
||||
os.environ["CUDA_VISIBLE_DEVICES"] = '0'
|
||||
# os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
|
||||
|
||||
import torch
|
||||
import numpy as np
|
||||
from torch import nn, Tensor
|
||||
from torch.nn import functional as F
|
||||
from functools import partial
|
||||
from typing import Any, Callable, List, Optional, Sequence
|
||||
|
||||
torch.set_float32_matmul_precision('high')
|
||||
|
||||
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..')
|
||||
|
||||
|
||||
|
||||
class ViewEncoder(nn.Module):
|
||||
def __init__(self, bottleneck_size):
|
||||
super(ViewEncoder, self).__init__()
|
||||
self.bottleneck_size = bottleneck_size
|
||||
|
||||
# Encoder
|
||||
self.encoder = nn.Sequential(
|
||||
nn.Linear(3*3, 64),
|
||||
nn.ReLU(),
|
||||
nn.Linear(64, 128),
|
||||
nn.ReLU(),
|
||||
nn.Linear(128, 256),
|
||||
nn.ReLU(),
|
||||
nn.Linear(256, 512),
|
||||
nn.ReLU(),
|
||||
nn.Linear(512, bottleneck_size),
|
||||
nn.ReLU()
|
||||
)
|
||||
|
||||
# Decoder
|
||||
self.decoder = nn.Sequential(
|
||||
nn.Linear(bottleneck_size, 512),
|
||||
nn.ReLU(),
|
||||
nn.Linear(512, 256),
|
||||
nn.ReLU(),
|
||||
nn.Linear(256, 128),
|
||||
nn.ReLU(),
|
||||
nn.Linear(128, 64),
|
||||
nn.ReLU(),
|
||||
nn.Linear(64, 3*3),
|
||||
nn.Tanh(),
|
||||
)
|
||||
|
||||
def forward(self, x):
|
||||
# Encode
|
||||
matrix = self.encoder(x.view(-1, 3*3))
|
||||
|
||||
# Decode
|
||||
x = self.decoder(matrix)
|
||||
x = x * np.pi
|
||||
return x.view(-1, 3, 3), matrix
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# test the model
|
||||
model = ViewEncoder(bottleneck_size=128).to('cuda')
|
||||
# model = torch.compile(model)
|
||||
print(model)
|
||||
print(sum(p.numel() for p in model.parameters() if p.requires_grad))
|
||||
print(sum(p.numel() for p in model.parameters()))
|
||||
|
||||
x = torch.rand((4, 3, 3)).to('cuda')
|
||||
output = model(x)
|
||||
|
||||
# from torchviz import make_dot
|
||||
# graph = make_dot(output, params=dict(model.named_parameters()))
|
||||
# graph.render("model_graph", format="pdf")
|
||||
|
||||
pass
|
||||
Reference in New Issue
Block a user