def test_VAE_saveState(self): mb_size = 49 # because dummyDataset98.npz is a 98 data size epoch_nb = 11 datasetName = 'dummyDataset98.npz' datasetDir = './dummyDataset/' testDataset = NPZ_Dataset(datasetName, datasetDir, 'Spectrums') train_loader = torch.utils.data.DataLoader(testDataset, batch_size=mb_size, shuffle=True) # define vae structure X_dim = 1024 Z_dim = 6 IOh_dims_Enc = [X_dim, 401, Z_dim] IOh_dims_Dec = [Z_dim, 399, X_dim] NL_types_Enc = ['relu6'] NL_types_Dec = ['relu6', 'sigmoid'] vae = VAE(X_dim, Z_dim, IOh_dims_Enc, IOh_dims_Dec, NL_types_Enc, NL_types_Dec, mb_size) vae.trainVAE(train_loader, epoch_nb) # save it if vae.trained: vae.save(datasetName, datasetDir) self.assertTrue(vae.created and vae.trained and vae.saved)
def vae_train(): # load train x_train = load_dataset('adi') # load test normal and anomaly test_anomaly = load_dataset('vans') test_normal = load_dataset('adi_test') # drfine train and valid iamge for train trains = x_train[10:] valid = x_train[:10] print(trains.shape, valid.shape, test_anomaly.shape, test_normal.shape) # try to plot plt.imshow(x_train[10].reshape(256, 256)) plt.gray() plt.show() # train config = tf.ConfigProto() config.gpu_options.allow_growth = True def step_decay(epoch): initial_lrate = 0.0001 decay_rate = 0.5 decay_steps = 8.0 lrate = initial_lrate * math.pow(decay_rate, math.floor((1 + epoch) / decay_steps)) return lrate callback = [] callback.append( HistoryCheckpoint(filepath='tb/LearningCurve_{history}.png', verbose=1, period=300)) callback.append(LearningRateScheduler(step_decay)) model = VAE() model, loss = model.vae_net() #model.load_weights("vae_model.h5") model.add_loss(loss) model.compile(optimizer=Adam(lr=0.0001)) model.summary() try: model.fit(trains, batch_size=20, epochs=300, callbacks=callback, validation_data=(valid, None)) finally: model.save('weight/vae_model.h5')
def test_gaussianVAE_trainsaveload(self): mb_size = 49 # because dummyDataset98.npz is a 98 data size epoch_nb = 5 # if exists remove 'saveloadTest' folder if os.path.exists('./saveloadTest'): shutil.rmtree('./saveloadTest') # create a VAE X_dim = 1024 Z_dim = 10 IOh_dims_Enc = [X_dim, 600, Z_dim] IOh_dims_Dec = [Z_dim, 600, X_dim] NL_types_Enc = ['relu6'] NL_types_Dec = ['relu6'] vae = VAE(X_dim, Z_dim, IOh_dims_Enc, IOh_dims_Dec, NL_types_Enc, NL_types_Dec, mb_size, bernoulli=False, gaussian=True) # prepare dataset datasetName = 'dummyDataset98.npz' datasetDir = './dummyDataset/' saveDir = './dummySaveTest/' testDataset = NPZ_Dataset(datasetName, datasetDir, 'Spectrums') train_loader = torch.utils.data.DataLoader(testDataset, batch_size=mb_size, shuffle=True) # train it for 10 epochs vae.trainVAE(train_loader, epoch_nb) # save it savefile = vae.save(datasetName, saveDir) # reload the savefile of VAE vae = loadVAE(savefile, saveDir) # continue training # vae.trainVAE(train_loader, 10) # vae.save(datasetName, datasetDir) self.assertTrue(vae.created and vae.loaded and vae.saved)
if args.type == 'bernoulli': vae = VAE(X_dim, Z_dim, IOh_dims_Enc, IOh_dims_Dec, NL_types_Enc, NL_types_Dec, mb_size, bernoulli=True, gaussian=False, beta=beta, Nwu=Nwu, noiseIn=noise, noiseGain=noiseGain) elif args.type == 'gaussian': vae = VAE(X_dim, Z_dim, IOh_dims_Enc, IOh_dims_Dec, NL_types_Enc, NL_types_Dec, mb_size, bernoulli=False, gaussian=True, beta=beta, Nwu=Nwu, noiseIn=noise, noiseGain=noiseGain) else: print("ERROR script: Chose VAE type -> either bernoulli or gaussian") # train it for N epochs vae.trainVAE(train_loader, epoch_nb) # save it vae.save(datasetName, saveDir) elif mode == "load": # get savefile path directory = args.vae_path savefile = directory.split("/")[-1] directory = directory.replace(savefile, "") # load vae vaeLoaded = loadVAE(savefile, directory) # Now do some stuff (e.g. PCA, t-sne, generate ...) # Here for example it generates 200 images. Each image is 200x1024. # It corresponds to 200 stacked spectra (of size 1024). # Hence, x axis corresponds to frequency while y axis is a latent dimension varying from -10 to 10. # When changing image it varies another latent dimension also from -10 to 10.