ic_gan / BigGAN_PyTorch /logs /process_training.m
ArantxaCasanova
First model version
a00ee36
raw history blame
No virus
3.45 kB
% Copyright (c) Facebook, Inc. and its affiliates.
% All rights reserved.
%
% All contributions by Andy Brock:
% Copyright (c) 2019 Andy Brock
%
% MIT License
%
clc
clear all
close all
fclose all;
%% Get all training logs for a given run
target_dir = '.';
s = {};
nm = {};
d = dir(target_dir);
j = 1;
for i = 1:length(d)
if any(strfind(d(i).name,'.log'))
s = [s; sprintf('%s\\%s', target_dir, d(i).name)];
nm = [nm; d(i).name];
end
end
%% Loop over training logs and acquire data
D_count = 0;
G_count = 0;
for i = 1:length(s)
fname = s{i,1};
fid = fopen(s{i,1},'r');
% Prepare bookkeeping for sv0
if any(strfind(s{i,1},'sv'))
if any(strfind(s{i,1},'G_'))
G_count = G_count +1;
else
D_count = D_count + 1;
end
end
itr = [];
val = [];
j = 1;
while ~feof(fid);
line = fgets(fid);
parsed = sscanf(line, '%d: %e');
itr(j) = parsed(1);
val(j) = parsed(2);
j = j + 1;
end
s{i,2} = itr;
s{i,3} = val;
fclose(fid);
end
%% Plot SVs and losses
close all;
Gcc = hsv(G_count);
Dcc = hsv(D_count);
gi = 1;
di = 1;
li = 1;
legendG = {};
legendD = {};
legendL = {};
thresh=2; % wavelet denoising threshold
losses = {};
for i=1:length(s)
if any(strfind(s{i,1},'D_loss_real.log')) || any(strfind(s{i,1},'D_loss_fake.log')) || any(strfind(s{i,1},'G_loss.log'))
% Select colors
if any(strfind(s{i,1},'D_loss_real.log'))
color1 = [0.7,0.7,1.0];
color2 = [0, 0, 1];
dlr = {s{i,2}, s{i,3}, wden(s{i,3},'sqtwolog','s','mln', thresh, 'sym4'), color1, color2};
losses = [losses; dlr];
elseif any(strfind(s{i,1},'D_loss_fake.log'))
color1 = [0.7,1.0,0.7];
color2 = [0, 1, 0];
dlf = {s{i,2},s{i,3} wden(s{i,3},'sqtwolog','s','mln', thresh, 'sym4'), color1, color2};
losses = [losses; dlf];
else % g loss
color1 = [1.0, 0.7,0.7];
color2 = [1, 0, 0];
gl = {s{i,2},s{i,3}, wden(s{i,3},'sqtwolog','s','mln', thresh, 'sym4'), color1 color2};
losses = [losses; gl];
end
figure(1); hold on;
% Plot the unsmoothed losses; we'll plot the smoothed losses later
plot(s{i,2},s{i,3},'color', color1, 'HandleVisibility','off');
legendL = [legendL; nm{i}];
continue
end
if any(strfind(s{i,1},'G_'))
legendG = [legendG; nm{i}];
figure(2); hold on;
plot(s{i,2},s{i,3},'color',Gcc(gi,:),'linewidth',2);
gi = gi+1;
elseif any(strfind(s{i,1},'D_'))
legendD = [legendD; nm{i}];
figure(3); hold on;
plot(s{i,2},s{i,3},'color',Dcc(di,:),'linewidth',2);
di = di+1;
else
s{i,1} % Debug print to show the name of the log that was not processed.
end
end
figure(1);
% Plot the smoothed losses last
for i = 1:3
% plot(losses{i,1}, losses{i,2},'color', losses{i,4}, 'HandleVisibility','off');
plot(losses{i,1},losses{i,3},'color',losses{i,5});
end
legend(legendL, 'Interpreter', 'none'); title('Losses'); xlabel('Generator itr'); ylabel('loss'); axis([0, max(s{end,2}), -1, 4]);
figure(2); legend(legendG,'Interpreter','none'); title('Singular Values in G'); xlabel('Generator itr'); ylabel('SV0');
figure(3); legend(legendD, 'Interpreter', 'none'); title('Singular Values in D'); xlabel('Generator itr'); ylabel('SV0');