Spaces:
Sleeping
Sleeping
| 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 |