运行谷歌开源BERT程序时遇到的bug修改记录
运行谷歌开源BERT程序时遇到的bug修改记录
一、没有对应的模块
采用anaconda的python3.8做为解释器,其实以及包含基本的第三方库了,但是在运行run_classifier.py
文件时,仍然报错has no attribute XXX
解决方式:
# import tensorflow as tf
import tensorflow.compat.v1 as tf
二、传入参数错误
在将谷歌开源的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/
提示: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 # 保存训练模型的位置
三、提示‘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
重新下载低版本的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
将Pycharm中的解释器进行更换。
终于可以运行了!!!
CPU已经跑满了