Jpy5

Results 18 comments of Jpy5

似乎是一个域名污染问题,dns无法解析域名raw.githubusercontent.com,导致下载不了图片 通过如下blog我解决了该问题 https://blog.csdn.net/qq_38232598/article/details/91346392

谢谢您的解答~ 另外关于FreeLB里的这段代码,我做了点修改,加了一个判断,当扰动的范数超过epsilon ball的范围时,再进行缩放。 似乎论文里是这么说的,您看下是否正确~ `cur_r = (acc_r + tmp_r) * tf.divide(ARGS.epsilon, norm)` -> `cur_r = tf.cond(norm > ARGS.epsilon, lambda: (acc_r + tmp_r) * tf.divide(ARGS.epsilon, norm), lambda: (acc_r + tmp_r))`

感谢您的解答~ 还有这几天在自己尝试实现dropout mask,阅读了一下tf.nn.Dropout的源码,发现其mask是由如下两行代码(来源于贴出的tensorflow中的Dropout实现)实现的; `random_tensor = random_ops.random_uniform( noise_shape, seed=seed, dtype=x.dtype)` `keep_mask = random_tensor >= rate` 但是其只是返回了ret结果,如果我想要获得mask,可能需要修改tensorflow的源码,在dropout_v2参数中增加keep_mask参数,并在返回值中增加keep_mask,请问这个思路正确吗? `ret = x * scale * math_ops.cast(keep_mask, x.dtype)` 我还发现dropout_v2()函数有一个参数是seed,但是查阅API后发现他只是让多次会话时,可以生成的keep mask可以保持一致,但是对于某一次会话,不同step之间生成的keep mask还是会不同。 想请问您说的使用额外的随机参数记录dropout,具体该怎么做呢~ tensorflow中的Dropout实现: [Dropout](https://github.com/tensorflow/tensorflow/blob/v1.15.0/tensorflow/python/ops/nn_ops.py#L4178-L4229)

您好~谢谢您的回复 按照您的思路,我尝试写了如下代码,x1、x2想模拟正常样本和对抗样本,但是发现对x1、x2,mask以后只有x1_mask和keep_mask保持一致,而x2_mask则没有。不知道问题出在了哪里~ 也许是因为我对 init_op = tf.variables_initializer([random_tensor]) with tf.control_dependencies([init_op]): 这两行的操作理解的还不够深。 在您的freelb的代码中的init_r于此类似,我仔细调试您的代码后了解到,init_r会在sess.run(self._train_op)前被初始化一次,利用 local_init_op = tf.variables_initializer(variables) module.sess.run(local_init_op)来实现,在https://github.com/geyingli/unif/blob/33280b5826a610427fdf62fa6185d5f3dfa03851/uf/processing.py#L71此处。 我感觉这行代码 init_op = tf.variables_initializer([random_tensor]) 是对random_tensor再次随机初始化一次, 然后通过with tf.control_dependencies([init_op]) 控制依赖,让之后的keep_mask依赖这次初始化的random_tensor。 但是我的结果中只有x1_mask依赖成功了,而x2_mask失败了,想请教您这是什么导致的呢~ `import tensorflow as tf x1 = tf.constant([[[1.,...

谢谢您的指点,目前已经跑通了dropout mask的这种方式~ 通过您的讲解,我了解到我出错的原因应该是因为每次sess.run(op)的时候,都会重新对计算图执行一遍,所以每次都会执行一次init_op,因此random_tensor初始化了多次,加深了理解,感恩~ 另我又多跑了几遍,结果keep_mask和x1_mask,在mask位置上的结果是一致的 比如我的keep_mask是上面的 [[[1. 1.] [1. 1.]] [[0. 0.] [0. 1.]]] 其x1_mask,在对应位置上是按keep_mask进行mask的(我想表达的是,比如mask矩阵(2 * 2 * 2)的第一个2*2矩阵中,四个元素均为1,而x1_mask,在第一个矩阵上的结果也都和原先的值相同,说明其对应元素是和mask中的四个1对应相乘了,即有按keep_mask进行mask) [[[1. 2.] [3. 4.]] [[0. 0.] [0. 8.]]] 对此我感到疑惑,当我sess.run(keep_mask)时,它的值依赖于random_tensor,而random_tensor的值又依赖于sess.run(local_init_op),第一次初始化全部变量值时所赋予的; 当我sess.run(x1_mask)时,random_tensor的值理应会因为init_op的初始化而发生变化,从而使得keep_mask发生变化,但结果却没有,这是为什么呢,还请您指点一下~ 如下代码表达了我的想法: `import...

确认了~ 我分别使用1.12(windows)和1.13(Linux)版本进行了测试,结果是一样的 难道是版本问题吗

那看来是我测试的次数还是太少了~ 您分析的很有道理,不纠结啦~

是滴,哈哈,多向您学习 祝您也顺利~

还想向您请教一下,我自己实现dropout以后,虽然代码可以跑,但是loss下降却有问题,使用tf.nn.dropout()在200个step时,我的loss可以下降到9左右,而用自己实现的dropout却为30左右。 以下是我代码中关于dropout的这部分,关键代码用(##关键代码)表示。其中version 1. 版本为使用tf.nn.dropout()进行dropout,此方式测试过loss是正常的,我尝试用此方式测试其余代码的正确性。 使用version 2. 进行dropout时,就出现了loss问题, 我进行了如下步骤(分类任务): 1. 定义了变量random_tensor 2. 对其进行初始化,得到init_dp_op 3. 依赖init_dp_op,model.build()进行前向传播,得到文章最后的向量表示actual_h_pool_flat 4. 把dropout_keep转换为tensor 5. 计算scale,用于dropout后的非零元素的放大 6. 计算keep_mask 7. 将scale、keep_mask与文章表示向量actual_h_pool_flat相乘,得到dropout后的文章表示向量actual_h_dropout 8. 过最后一层全连接层,得到用于分类的scores向量 9. 计算loss 10. 计算梯度,得到扰动 11. 生成对抗样本...

以下结果均注释了```with tf.control_dependencies([init_dp_op])```(加上后经测试,结论也和以下实验一样) 如下为使用tf.nn.dropout()的正常结果(每1000个batch进行一次验证,如下为第一次验证): [INFO] [20210327 20:22:56]: epoch:0, gstep:995, b-loss:6.2543, b-acc:0.1484, lr:0.001000, step_time:0.10s. [INFO] [20210327 20:22:56]: epoch:0, gstep:996, b-loss:6.1792, b-acc:0.2188, lr:0.001000, step_time:0.10s. [INFO] [20210327 20:22:56]: epoch:0, gstep:997, b-loss:6.0566, b-acc:0.2266, lr:0.001000, step_time:0.10s....