def load_and_setup_model(model_name, parser, checkpoint, device, logger, forward_is_infer=False, ema=True, jitable=False): model_parser = models.parse_model_args(model_name, parser, add_help=False) model_args, model_unk_args = model_parser.parse_known_args() model_config = models.get_model_config(model_name, model_args) model = models.get_model(model_name, model_config, device, logger, forward_is_infer=forward_is_infer, jitable=jitable) model.eval() if checkpoint is not None: checkpoint_data = torch.load(checkpoint, map_location="cpu") if 'state_dict' in checkpoint_data: sd = checkpoint_data['state_dict'] if any(key.startswith('module.') for key in sd): sd = {k.replace('module.', ''): v for k,v in sd.items()} TEMP_NUM_SPEAKERS = 5 symbols_embedding_dim = 384 model.speaker_emb = nn.Embedding(TEMP_NUM_SPEAKERS, symbols_embedding_dim).to(device) if "speaker_emb.weight" not in sd: sd["speaker_emb.weight"] = torch.rand((TEMP_NUM_SPEAKERS, 384)) model.load_state_dict(sd, strict=False) if 'model' in checkpoint_data: model = checkpoint_data['model'] else: model = checkpoint_data print(f'Loaded {model_name}') if model_name == "WaveGlow": model = model.remove_weightnorm(model) model.eval() model.device = device return model.to(device)
def load_and_setup_big_WN(model_name, parser, checkpoint, device, logger, forward_is_infer=False, ema=True, jitable=False): model_parser = models.parse_model_args(model_name, parser, add_help=False) model_args, model_unk_args = model_parser.parse_known_args() model_config = models.get_model_config(model_name, model_args) model = models.get_model(model_name, model_config, device, logger, forward_is_infer=forward_is_infer, jitable=jitable) if checkpoint is not None: checkpoint_data = torch.load(checkpoint, map_location="cpu") status = '' if 'state_dict' in checkpoint_data: # torch.save(checkpoint_data['state_dict'], f'{"/".join(checkpoint.split("/")[:-1])}/minimal-{checkpoint.split("/")[-1].split("-")[-1]}') sd = checkpoint_data['state_dict'] if any(key.startswith('module.') for key in sd): sd = {k.replace('module.', ''): v for k,v in sd.items()} status += ' ' + str(model.load_state_dict(sd, strict=True)) else: model = checkpoint_data['model'] print(f'Loaded {model_name}{status}') if model_name == "WaveGlow": model = model.remove_weightnorm(model) model.device = device model.eval() return model.to(device)
def example_imagenet_train(): import tensorflow as tf import keras from python import models from python import approx_conv_v2 as aconv # both are necessary to actually get consistent output np.random.seed(123) tf.random.set_random_seed(123) model = models.get_model(models.VGG16, weights=None, input_shape=(224, 224, 3)) # swap out normal conv layer with our custom layer model = models.replace_layer_classes( model, {keras.layers.Conv2D: aconv.MyConv2D}) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.summary() train_generator, val_generator, test_generator = load_flow_example() model.fit_generator(train_generator, steps_per_epoch=10, epochs=1, validation_steps=1, validation_data=val_generator) model.evaluate_generator(test_generator, steps=2)