clip_max=clip_max)
    images_adv, = batch_eval(model._sess, [model.nodes.input], [n_fgsm],
                             [adv_image_lists[0]],
                             args={'batch_size': batch_size},
                             feed={model._is_training: False})
    adv_image_lists.append(images_adv)


def generate_visualization(i0):
    def get_row(i):
        ims = adv_image_lists[i][i0:i0 + image_count]
        s, m = Cifar10Loader.std, Cifar10Loader.mean
        scale = lambda x: np.clip(x * s + m, 0, 255).astype(np.ubyte)
        return list(map(scale, ims))

    cols = [get_row(i) for i in range(i0, i0 + len(epss))]
    return visualization.compose(cols, format=None)

    images = [im for i in range(i0, i0 + 3) for im in get_row(i)]
    comp_format = "".join([
        str(i) + "," if i % image_count == image_count - 1 else ";"
        for i in range(len(images))
    ])[:-1]
    return visualization.compose(images, format=comp_format)


scaled_eps = eps * np.max(Cifar10Loader.std)
viewer = Viewer("Adversarial examples, scaled eps=" + str(scaled_eps) +
                ", eps=" + str(eps))
viewer.display(np.arange(batch_size), generate_visualization)