• 运行谷歌开源BERT程序时遇到的bug修改记录


    运行谷歌开源BERT程序时遇到的bug修改记录

    一、没有对应的模块

    采用anaconda的python3.8做为解释器,其实以及包含基本的第三方库了,但是在运行run_classifier.py文件时,仍然报错has no attribute XXX
    解决方式:

    # import tensorflow as tf
    import tensorflow.compat.v1 as tf
    
    • 1
    • 2
    二、传入参数错误

    在将谷歌开源的github当中提示的参数配置到Edit Configuration当中的Parameters时,例如

      --task_name=MRPC \
      --do_train=true \
      --do_eval=true \
      --data_dir=$GLUE_DIR/MRPC \
      --vocab_file=$BERT_BASE_DIR/vocab.txt \
      --bert_config_file=$BERT_BASE_DIR/bert_config.json \
      --init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt \
      --max_seq_length=128 \
      --train_batch_size=32 \
      --learning_rate=2e-5 \
      --num_train_epochs=3.0 \
      --output_dir=/tmp/mrpc_output/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    提示:Non-boolean argument to boolean flag', 'true\\
    解决方式: 去除掉 \
    在这里插入图片描述

    --task_name=MRPC # MRPC
    --do_train=true # 是否进行训练
    --do_eval=true # 是否进行验证
    --data_dir=../GLUE/glue_data/MRPC 
    --vocab_file=../GLUE/BERT_BASE_DIR/uncased_L-12_H-768_A-12/vocab.txt # 语料标表
    --bert_config_file=../GLUE/BERT_BASE_DIR/uncased_L-12_H-768_A-12/bert_config.json # 预训练配置文件
    --init_checkpoint=../GLUE/BERT_BASE_DIR/uncased_L-12_H-768_A-12/bert_model.ckpt # 微调
    --max_seq_length=128 # 每句话的最长长度
    --train_batch_size=6 # 调小
    --learning_rate=2e-5 # 学习率
    --num_train_epochs=3.0 # 学习用1-3
    --output_dir=../GLUE/output # 保存训练模型的位置
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    三、提示‘utf-8’编码错误

    在这里插入图片描述
    将第二步的配置修改好后,就不会报错了。第二步的配置一定不能复制官网原文,要结合自身的文件结构修改。

    四、提示没有contrib

    提示:module 'tensorflow.compat.v1' has no attribute 'contrib'

    我们都知道这是因为tensorflow版本的问题,所以最好的解决方法是去tensorflow的官网去查看对应的函数改版前后的变化。
    tensorflow官网
    https://tensorflow.google.cn/guide/migrate/tpu_estimator
    在这里插入图片描述
    在官网中给的案例看来,
    原本的tf.contrib.tpu已经转变成tf.estimator.tpu
    原本的tf.contrib.data已经转变为tf.data.experimental.map_and_batch
    原本的tf.contrib.layers.layer_norm已经转变为tf.keras.layers.LayerNormalization()
    但此时发现一件裂开的事,tf.contrib.layers.layer_norm方法和tf.keras.layers.LayerNormalization()方法当中的参数完全不一样,不进行简单的替换。

    综合考虑之后,决定卸载原来的tensorflow,降至低版本

    卸载

    pip uninstall tensorflow
    
    • 1

    在这里插入图片描述
    重新下载低版本的tensorflow
    https://github.com/tensorflow/tensorflow/tags?after=v2.2.0-rc0
    在这里插入图片描述
    在这里插入图片描述
    此时又发现一件裂开的事:tensorflow1.X的版本最高只支持Python3.7,因此我需要装Python3.7。。。

    经过一顿操作,最终选择了1.15.0版本的tensorflow。

    pip install D:\Anaconda\conda3.7\Scripts\tensorflow-1.15.3-cp37-cp37m-win_amd64.whl
    
    • 1

    在这里插入图片描述
    将Pycharm中的解释器进行更换。
    在这里插入图片描述
    终于可以运行了!!!
    在这里插入图片描述
    CPU已经跑满了
    在这里插入图片描述

  • 相关阅读:
    jenkins-用户权限管理
    元素居中大合集
    浏览器原理 之 浏览器安全
    在js中使用proxy的棘手问题
    深耕业财一体化,激活企业全面预算管理新动能
    题目0099-计算堆栈中的剩余数字
    R语言做生信分析系列(一)—— R软件简单安装
    计算机毕业设计Java山西工艺美术馆(源码+系统+mysql数据库+lw文档)
    C语言 牛客网习题 10.20 day2
    Nested嵌套对象类型还挺实用
  • 原文地址:https://blog.csdn.net/qq_45556665/article/details/127423374