collageFn = {
return pixels => {
return tf.tidy(() => {
let activation = models[layerId].predict(pixels.expandDims(0)).squeeze();
if (channelNormalize) {
const strides = 1;
const pad = 0;
const maxpool = activation.maxPool([activation.shape[0], activation.shape[1]], strides, pad);
const minpool = activation.neg().maxPool(
[activation.shape[0], activation.shape[1]], strides, pad).neg()
.add(tf.scalar(.0000001));
activation = activation.sub(minpool).div(maxpool.sub(minpool));
}
const reshaped = activation.transpose([2, 0, 1]).reshape(
[collageDims[layerId][0], collageDims[layerId][1], activation.shape[0], activation.shape[1]]);
const transposed = reshaped.transpose([0, 2, 1, 3]);
let output = transposed.reshape(
[transposed.shape[0] * transposed.shape[1], transposed.shape[2] * transposed.shape[3]]);
if (!channelNormalize) {
const min = output.min();
const max = output.max();
output = output.sub(min).div(max.sub(min));
}
return output.maximum(tf.scalar(0)).minimum(tf.scalar(1));
});
}
}