cipherGAN Tensorflow代码复现遇到的问题

0.背景

    2018年,Aidan N. Gomez往ICLR会议投稿Unsupervised cipher cracking using discrete GANs论文,此论文主要介绍了利用GAN破译移位密码和维吉尼亚密码,将GAN应用于离散数据。虽然移位密码和维吉尼亚密码属于古典密码,已属于能够被破译的密码,但是此篇是首次将密码分析和GAN联系起来。

   本文主要讨论复现代码过程中遇到的问题。

 原论文链接:《UNSUPERVISED CIPHER CRACKING USING DISCRETE GANS》

1801.04883.pdf (arxiv.org)

论文代码链接:GitHub - for-ai/CipherGAN: TensorFlow implementation of CipherGAN

环境:tensorflow 1.15.2(CPU版)

(但是其实源代码要求是GPU版本)

1. 复现过程中遇到的问题

        我在调试代码过程中,遇到了接连两个Windows fatal exception: access violation的错误,被困了好久,在这里记录一下解决办法,希望能帮助到一些人。o(* ̄▽ ̄*)ブ

1.1 Windows fatal exception: access violation之 _preread_check

  在train.py执行过程中,输入以下示例命令:

python -m CipherGAN-master.train --output_dir=runs\vig345 --test_name="vigenere345-brown200-eval*"  --train_name="vigenere345-brown-train*" --hparam_sets=vigenere_brown_vocab_200

报错如下:

Windows fatal exception: access violation

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\tensorflow_core\python\lib\io\file_io.py", line 84 in _preread_check

详细信息如下所示:

Windows fatal exception: access violation

Current thread 0x00002cb8 (most recent call first):

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\tensorflow_core\python\lib\io\file_io.py", line 84 in _preread_check

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\tensorflow_core\python\lib\io\file_io.py", line 178 in readline

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\tensorflow_core\python\lib\io\file_io.py", line 214 in next

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\tensorflow_core\python\lib\io\file_io.py", line 220 in __next__

  File "C:\Users\admin\Downloads\CipherGAN-master\CipherGAN-master\train_utils\vocab_utils.py", line 15 in read_vocab

  File "C:\Users\admin\Downloads\CipherGAN-master\CipherGAN-master\train.py", line 47 in _run_locally

  File "C:\Users\admin\Downloads\CipherGAN-master\CipherGAN-master\train.py", line 85 in main

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\tensorflow_core\python\lib\io\file_io.py", line 178 in readline

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\tensorflow_core\python\lib\io\file_io.py", line 214 in next

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\tensorflow_core\python\lib\io\file_io.py", line 220 in __next__

  File "C:\Users\admin\Downloads\CipherGAN-master\CipherGAN-master\train_utils\vocab_utils.py", line 15 in read_vocab

  File "C:\Users\admin\Downloads\CipherGAN-master\CipherGAN-master\train.py", line 47 in _run_locally

  File "C:\Users\admin\Downloads\CipherGAN-master\CipherGAN-master\train.py", line 85 in main

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\absl\app.py", line 254 in _run_main

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\absl\app.py", line 308 in run

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\tensorflow_core\python\platform\app.py", line 40 in run

  File "C:\Users\admin\Downloads\CipherGAN-master\CipherGAN-master\train.py", line 89 in <module>

  File "E:\envi\anaconda3\envs\tf\lib\runpy.py", line 85 in _run_code

  File "E:\envi\anaconda3\envs\tf\lib\runpy.py", line 193 in _run_module_as_main

解决:

  该问题本质就是  read_vocab 函数内部,当尝试读取文件时,发生了错误。进一步调试代码,将语料库的文件路径打印,发现是路径出错。

  因此直接将filepath修改为语料库所在的绝对路径

(同时如果还报错就将读文件的gfile.FastGFile方式修改为open)

但是!!又报错权限不够:“PermissionError: [Errno 13] Permission denied:”

PermissionError: [Errno 13] Permission denied:

'C:\\Users\\admin\\Downloads\\CipherGAN-master\\CipherGAN-master\\data\\tmp\\data'

  这里是因为路径最终只定位到了文件夹,需要把txt文件的完整名称也加上。

  最终修改后如下所示:

1.2 Windows fatal exception: access violation 之 get_matching_files_v2

  然后又遇到了这个报错,详细信息如下:

Windows fatal exception: access violation

Current thread 0x00002e58 (most recent call first):

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\tensorflow_core\python\lib\io\file_io.py", line 384 in get_matching_files_v2

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\tensorflow_core\python\lib\io\file_io.py", line 363 in get_matching_files

  File "E:\mxz\CipherGAN-master\CipherGAN-master\data\cipher_reader.py", line 26 in _input_fn

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\tensorflow_core\contrib\learn\python\learn\estimators\estimator.py", line 1038 in _train_model

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\tensorflow_core\contrib\learn\python\learn\estimators\estimator.py", line 524 in fit

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\tensorflow_core\python\util\deprecation.py", line 507 in new_func

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\tensorflow_core\contrib\learn\python\learn\experiment.py", line 886 in _call_train

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\tensorflow_core\contrib\learn\python\learn\experiment.py", line 389 in train

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\tensorflow_core\contrib\learn\python\learn\experiment.py", line 672 in train_and_evaluate

  File "E:\mxz\CipherGAN-master\CipherGAN-master\train.py", line 84 in _run_locally

  File "E:\mxz\CipherGAN-master\CipherGAN-master\train.py", line 88 in main

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\absl\app.py", line 254 in _run_main

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\absl\app.py", line 308 in run

  File "E:\envi\anaconda3\envs\tf\lib\site-packages\tensorflow_core\python\platform\app.py", line 40 in run

  File "E:\mxz\CipherGAN-master\CipherGAN-master\train.py", line 92 in <module>

  File "E:\envi\anaconda3\envs\tf\lib\runpy.py", line 85 in _run_code

  File "E:\envi\anaconda3\envs\tf\lib\runpy.py", line 193 in _run_module_as_main

解决:

        首先将flag的默认参数中dir的’/’改为’\\’

        然后将代码中的训练集和测试集的路径打印出来,如下图所示

        发现文件层次出现错误(就是按照当前的路径找不到)

        所以直接将生成的数据集tmp\data整体移到项目路径下(省事儿)

1.3 AttributeError: 'HParams' object has no attribute 'sample_length'

   详细报错信息如下:即在 HParams 对象中找不到名为 'sample_length' 的属性。

File "C:\Users\admin\Downloads\CipherGAN-master\CipherGAN-master\data\cipher_reader.py", line 63, in _input_fn

    X = tf.pad(X, [[0, 0], [0, params.sample_length - tf.shape(X)[1]]])

AttributeError: 'HParams' object has no attribute 'sample_length'

解决:

首先打印超参数如下,发现确实没有sample_length 属性╮(╯▽╰)╭

然后去看代码,发现应该是因为采用了default的超参数集合,所以导致了没有设置sample_length

  而我们需要使用的超参数合集应该是如下所示的:

根据超参数的设置,我们在输入的命令中加入超参数集的选定 ,即:

--hparam_sets=vigenere_brown_vocab_200

 

  最终得到的完整输入命令如下所示:

python -m CipherGAN-master.train --output_dir=runs\vig345 --test_name="vigenere345-brown200-eval*"  --train_name="vigenere345-brown-train*" --hparam_sets=vigenere_brown_vocab_200  --hparam_sets=vigenere_brown_vocab_200

​  然后程序终于跑通了,泪目/(ㄒoㄒ)/~~

  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值