Spaces:
Sleeping
Sleeping
File size: 2,312 Bytes
36a5d2b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | 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 |