博文

使用Matplotlib创建动图

图片
使用Matplotlib创建动图 最近在实验中需要利用来 生成对抗网络(generative adversary network) 来伪造相应数据,在查阅资料的过程中发现在训练过程中使用动图来表示生成器迭代次数效果图对于实验很有帮助. 例如下图生成正弦函数示意图: 但是,在 Jupyter Notebook 一个循环当中简单的调用 pyplot.plot(x, y) 只会在当前 单元(cell) 下不断产生新的图像,达不到预期效果. 经过一番资料查找,找到了如下的解决方案. IPython Display iPython 通常和 Jupyter Notebook 在一块,作为一个通用的科学计算发行包绑定在一块,而 iPython 内置了许多 魔法指令(magic command) 和包函数可以用来帮助达到我们的目的. 首先为了能够在 Jupyter Notebook 单元中产生图像,并且 将该图像保存在文档 中,需要在当前单元中使用魔法指令: %matplotlib inline . 这样当前 matplotlib 绘图后端被设置为 inline ,从而可以直接在当前单元下展示图像. 接着我们想要在同一个单元下反复画图,这样才能产生一种迭代效果.,因此我们还需要从 iPython 中导入 display 模块,对当前单元进行调整: 首先在循环开始前,需要先清空当前 图像(figure) 图像中的所有信息,因此我们需要调用 plt.clf() . 然后我们想要当前单元只产生一个图像,因此需要将其他的产生的图像清空,这时候需要使用 display.clear_output(wait=True) . 其中设置选项 wait=True 是为了等到下一个图像出现时才清除前一个图像,这样可以让图像之前的转化更加平滑. 最后我们需要展示当前图像,这时候使用 display.disply(plt.gcf()) 来展示当前图像. 其中 display.display(*objs) 在所有前端上显示目标,而 plt.gcf() 表示当前图像. 完整的实例代码如下: ​ x import matplotlib . pyplot as plt from IPython import display import numpy as np % matplot...

Marlin ZK-SNARK简易教程

Marlin ZK-SNARK Marlin是一个零知识简洁证明(Zero Knowledge Succinct Non Interactive Argument of Knowledge, ZK-SNARK)系统,它能够对满足 一阶限制系统 (Rank One Constraint System,R1CS)条件的表达进行零知识证明. R1CS是指满足以下条件的变量: < A , W > ⋅ < B , W > = < C , W > <A, W>\cdot <B, W> = <C, W> < A , W > ⋅ < B , W >=< C , W > 其中 W W W 为 变量向量 (variable vector)其包括隐私变量(witness)和公共变量(public input). < ⋅ , ⋅ > <\cdot,\cdot> < ⋅ , ⋅ > 表示两个向量之间的内积. A , B , C A,B,C A , B , C 表示 W W W 中变量对应的线性组合系数. ZK-SNARK的目的就是在 保护隐私变量 的情况下,仅使用公共变量证明存在隐私变量使得上述R1CS限制系统成立. 举个例子,考虑如下二元一次方程: x − y + 3 z 2 = o u t x-y+3z^2=out x − y + 3 z 2 = o u t 其中 o u t out o u t 任意常数. 假设我们需要向第三方证明自己知道存在 ( x , y , z ) (x,y,z) ( x , y , z ) 上述表达式成立,但是又不想泄漏 ( x , y , z ) (x,y,z) ( x , y , z ) 的值,这时我们可以使用Marlin(或者任何其他ZK-SNARK系统)来达到这一点. 由于Marlin采用的是R1CS限制系统,我们首先要将其改写成R1CS表示形式: w 1 + y = x 3 z 2 = w 2 w 1 + w 2 = 1 w_1 + y = x \\ 3z^2=w_2 \\ w_1+w_2=1 w 1 ​ + y = x 3 z 2 = w 2 ​ w...