losses['dis'].append(epochDisLoss / i) #### Test dae.eval() dis.eval() #get test outuputs and losses xTest, yTest = prep_data(iter(testLoader).next(), useCUDA=dae.useCUDA) zTest, recTest = dae.forward(xTest) #N.B. corruption in here recLossTest = dae.rec_loss(recTest, xTest) #Plot losses losses['test rec'].append(recLossTest.data[0]) if e > 0: #only one point for test rec otherwise plot_losses(losses, exDir, epochs=e + 1) plot_norm_losses(losses, exDir) #save parameters dae.save_params(exDir) dis.save_params(exDir) #Save images of original and rec save_image(xTest.data, join(exDir, 'original.png')) save_image(recTest.data, join(exDir, 'rec.png')) #Save samples sampleDir = join(exDir, 'epoch_' + str(e)) os.mkdir(sampleDir) print 'sample dir:', sampleDir dae.sample_x(opts.M, sampleDir)
bceLossTest, klLossTest = vae_loss_fn(rec_x=outputs.data, x=xTest, mu=outMu, logVar=outLogVar) maxVal, predLabel = torch.max(outY, 1) classScoreTest = torch.eq(predLabel, yTest).float().sum() / yTest.size(0) print 'classification test:', classScoreTest.data[0] save_image(xTest, join(exDir, 'input.png')) save_image(outputs.data, join(exDir, 'output_' + str(e) + '.png')) label_switch(xTest, yTest, cvae, exDir=exDir) cvae.save_params(exDir=exDir) losses['total'].append(epochLoss / Ns) losses['kl'].append(epochLoss_kl / Ns) losses['bce'].append(epochLoss_bce / Ns) losses['test_bce'].append( (bceLossTest).data[0] / xTest.size(0)) #append every epoch losses['dis'].append(epochLoss_dis / Ns) losses['gen'].append(epochLoss_gen / Ns) losses['class'].append(epochLoss_class / Ns) losses['test_class'].append(classScoreTest.data[0]) if e > 1: plot_losses(losses, exDir, epochs=e + 1) plot_norm_losses(losses, exDir, epochs=1 + e)
xTest, yTest = prep_data(testData, classer.useCUDA) ####### eval VAE ####### recTest, outMu, outLogVar = vae(xTest) bceLossTest, klLossTest = vae.loss(recTest, xTest, outMu, outLogVar) save_image(xTest.data, join(exDir, 'input.png')) save_image(recTest.data, join(exDir, 'output_' + str(e) + '.png')) ####### eval CLASSER ####### yPredTrain = classer(xTrain) yPredTest = classer(xTest) classTrain = score(yPredTrain, yTrain).data[0] classTest = score(yPredTest, yTest).data[0] vaeLosses['test_bce'].append(bceLossTest.mean().data[0]) vaeLosses['test_kl'].append(bceLossTest.mean().data[0]) classerLosses['train_acc'].append(classTrain) classerLosses['test_acc'].append(classTest) viz_DZ(deltaZ.data[0].cpu().numpy(), exDir) if e > 0: plot_norm_losses(vaeLosses, exDir, e, title='VAE') plot_losses(classerLosses, exDir, e, title='CLASSER') plot_losses(deltaZLosses, exDir, e, title='DELTAZ') #Evaluate the results: eval_results(vae, classer, deltaZ, testLoader, exDir) inception_score(vae, classer, deltaZ, testLoader, exDir)
(e, i, epochLoss/i, epochLoss_dis/i, epochLoss_gen/i, epochLoss_bce/i, epochLoss_kl/i, epochLoss_aux/i, time() - TIME) #generate samples after each 10 epochs normbceLossTest, classScoreTest = evaluate(cvae, testLoader, exDir, e=e) cvae.save_params(exDir=exDir) losses['total'].append(epochLoss / Ns) losses['kl'].append(epochLoss_kl / Ns) losses['bce'].append(epochLoss_bce / Ns) losses['test_bce'].append(normbceLossTest) #append every epoch losses['dis'].append(epochLoss_dis / Ns) losses['gen'].append(epochLoss_gen / Ns) losses['class'].append(epochLoss_class / Ns) losses['test_class'].append(classScoreTest) losses['aux'].append(epochLoss_aux / Ns) losses['auxEnc'].append(epochLoss_auxEnc / Ns) if e > 1: plot_losses(losses, exDir, epochs=e + 1) plot_norm_losses(losses, exDir, epochs=e + 1) normbceLossTest, classScoreTest = evaluate(cvae, testLoader, exDir, e='evalMode')