CDGPT2-Deployment / utility.py
Ziad Meligy
Pushing deployment to space
36a5d2b
raw
history blame
2.31 kB
import numpy as np
import os
import pandas as pd
import torch
import torch.nn as nn
from torch.utils.data import DataLoader
from generator import AugmentedImageSequence
import torch.optim as optim
from tensorflow.keras.models import model_from_json # type: ignore
def get_dataloader(csv, batch_size, FLAGS, tokenizer_wrapper, augmenter=None):
"""
Replaces the TensorFlow enqueuer with PyTorch DataLoader.
"""
data_generator = AugmentedImageSequence(
dataset_csv_file=csv,
class_names=FLAGS.csv_label_columns,
tokenizer_wrapper=tokenizer_wrapper,
source_image_dir=FLAGS.image_directory,
batch_size=batch_size,
target_size=FLAGS.image_target_size,
augmenter=augmenter,
shuffle_on_epoch_end=True,
)
dataloader = DataLoader(data_generator, shuffle=True, num_workers=0)
return dataloader, data_generator.steps
def get_layers(layer_sizes, activation='relu'):
"""
Builds a list of layers in PyTorch based on specified sizes.
Dropout layers are specified with values < 1, Dense (Linear) layers otherwise.
"""
layers = []
activation_fn = getattr(nn, activation.capitalize(), nn.ReLU) # Set default activation to ReLU if none specified
for layer_size in layer_sizes:
if layer_size < 1:
layers.append(nn.Dropout(layer_size))
else:
layers.append(nn.Linear(in_features=layer_size, out_features=layer_size))
layers.append(activation_fn())
return nn.Sequential(*layers) # Return as a sequential module for easy stacking
def get_optimizer(optimizer_type, learning_rate, lr_decay=0):
optimizer_class = getattr(optim, optimizer_type)
dummy_param = torch.nn.Parameter(torch.empty(0))
optimizer = optimizer_class(params = [dummy_param], lr=learning_rate, weight_decay=lr_decay)
return optimizer
def load_model(load_path, model_name):
path = os.path.join(load_path, model_name)
# load json and create model
json_file = open('{}.json'.format(path), 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)
# # load weights into new model
loaded_model.load_weights("{}.h5".format(path))
print("Loaded model from disk")
return loaded_model