【发布时间】:2019-08-28 01:23:33
【问题描述】:
我是深度学习和 NLP 的新手,现在尝试开始使用预训练的 Google BERT 模型。由于我打算用 BERT 构建一个 QA 系统,所以我决定从 SQuAD 相关的微调开始。
我按照the official Google BERT GitHub repository 中的 README.md 中的说明进行操作。
我输入的代码如下:
export BERT_BASE_DIR=/home/bert/Dev/venv/uncased_L-12_H-768_A-12/
export SQUAD_DIR=/home/bert/Dev/venv/squad
python run_squad.py \
--vocab_file=$BERT_BASE_DIR/vocab.txt \
--bert_config_file=$BERT_BASE_DIR/bert_config.json \
--init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt \
--do_train=True \
--train_file=$SQUAD_DIR/train-v1.1.json \
--do_predict=True \
--predict_file=$SQUAD_DIR/dev-v1.1.json \
--train_batch_size=12 \
--learning_rate=3e-5 \
--num_train_epochs=2.0 \
--max_seq_length=384 \
--doc_stride=128 \
--output_dir=/tmp/squad_base/
几分钟后(培训开始时),我得到了这个:
a lot of output omitted
INFO:tensorflow:start_position: 53
INFO:tensorflow:end_position: 54
INFO:tensorflow:answer: february 1848
INFO:tensorflow:***** Running training *****
INFO:tensorflow: Num orig examples = 87599
INFO:tensorflow: Num split examples = 88641
INFO:tensorflow: Batch size = 12
INFO:tensorflow: Num steps = 14599
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Running train on CPU
INFO:tensorflow:*** Features ***
INFO:tensorflow: name = end_positions, shape = (12,)
INFO:tensorflow: name = input_ids, shape = (12, 384)
INFO:tensorflow: name = input_mask, shape = (12, 384)
INFO:tensorflow: name = segment_ids, shape = (12, 384)
INFO:tensorflow: name = start_positions, shape = (12,)
INFO:tensorflow: name = unique_ids, shape = (12,)
INFO:tensorflow:Error recorded from training_loop: Unsuccessful TensorSliceReader constructor: Failed to find any matching files for /home/bert/Dev/venv/uncased_L-12_H-768_A-12//bert_model.ckpt
INFO:tensorflow:training_loop marked as finished
WARNING:tensorflow:Reraising captured error
Traceback (most recent call last):
File "run_squad.py", line 1283, in <module>
tf.app.run()
File "/home/bert/Dev/venv/lib/python3.5/site-packages/tensorflow/python/platform/app.py", line 125, in run
_sys.exit(main(argv))
File "run_squad.py", line 1215, in main
estimator.train(input_fn=train_input_fn, max_steps=num_train_steps)
File "/home/bert/Dev/venv/lib/python3.5/site-packages/tensorflow/contrib/tpu/python/tpu/tpu_estimator.py", line 2400, in train
rendezvous.raise_errors()
File "/home/bert/Dev/venv/lib/python3.5/site-packages/tensorflow/contrib/tpu/python/tpu/error_handling.py", line 128, in raise_errors
six.reraise(typ, value, traceback)
File "/home/bert/Dev/venv/lib/python3.5/site-packages/six.py", line 693, in reraise
raise value
File "/home/bert/Dev/venv/lib/python3.5/site-packages/tensorflow/contrib/tpu/python/tpu/tpu_estimator.py", line 2394, in train
saving_listeners=saving_listeners
File "/home/bert/Dev/venv/lib/python3.5/site-packages/tensorflow/python/estimator/estimator.py", line 356, in train
loss = self._train_model(input_fn, hooks, saving_listeners)
File "/home/bert/Dev/venv/lib/python3.5/site-packages/tensorflow/python/estimator/estimator.py", line 1181, in _train_model
return self._train_model_default(input_fn, hooks, saving_listeners)
File "/home/bert/Dev/venv/lib/python3.5/site-packages/tensorflow/python/estimator/estimator.py", line 1211, in _train_model_default
features, labels, model_fn_lib.ModeKeys.TRAIN, self.config)
File "/home/bert/Dev/venv/lib/python3.5/site-packages/tensorflow/contrib/tpu/python/tpu/tpu_estimator.py", line 2186, in _call_model_fn
features, labels, mode, config)
File "/home/bert/Dev/venv/lib/python3.5/site-packages/tensorflow/python/estimator/estimator.py", line 1169, in _call_model_fn
model_fn_results = self._model_fn(features=features, **kwargs)
File "/home/bert/Dev/venv/lib/python3.5/site-packages/tensorflow/contrib/tpu/python/tpu/tpu_estimator.py", line 2470, in _model_fn
features, labels, is_export_mode=is_export_mode)
File "/home/bert/Dev/venv/lib/python3.5/site-packages/tensorflow/contrib/tpu/python/tpu/tpu_estimator.py", line 1250, in call_without_tpu
return self._call_model_fn(features, labels, is_export_mode=is_export_mode)
File "/home/bert/Dev/venv/lib/python3.5/site-packages/tensorflow/contrib/tpu/python/tpu/tpu_estimator.py", line 1524, in _call_model_fn
estimator_spec = self._model_fn(features=features, **kwargs)
File "run_squad.py", line 623, in model_fn
) = modeling.get_assignment_map_from_checkpoint(tvars, init_checkpoint)
File "/home/bert/Dev/venv/bert/modeling.py", line 330, in get_assignment_map_from_checkpoint
init_vars = tf.train.list_variables(init_checkpoint)
File "/home/bert/Dev/venv/lib/python3.5/site-packages/tensorflow/python/training/checkpoint_utils.py", line 95, in list_variables
reader = load_checkpoint(ckpt_dir_or_file)
File "/home/bert/Dev/venv/lib/python3.5/site-packages/tensorflow/python/training/checkpoint_utils.py", line 64, in load_checkpoint
return pywrap_tensorflow.NewCheckpointReader(filename)
File "/home/bert/Dev/venv/lib/python3.5/site-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 314, in NewCheckpointReader
return CheckpointReader(compat.as_bytes(filepattern), status)
File "/home/bert/Dev/venv/lib/python3.5/site-packages/tensorflow/python/framework/errors_impl.py", line 526, in __exit__
c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.NotFoundError: Unsuccessful TensorSliceReader constructor: Failed to find any matching files for /home/bert/Dev/venv/uncased_L-12_H-768_A-12//bert_model.ckpt
似乎tensorflow找不到检查点文件,但据我所知,一个tensorflow检查点“文件”实际上是三个文件,这是正确的调用方式(带有路径和前缀)。
我相信我将文件放置在正确的位置:
(venv) bert@bert-System-Product-Name:~/Dev/venv/uncased_L-12_H-768_A-12$ pwd
/home/bert/Dev/venv/uncased_L-12_H-768_A-12
(venv) bert@bert-System-Product-Name:~/Dev/venv/uncased_L-12_H-768_A-12$ ls
bert_config.json bert_model.ckpt.data-00000-of-00001 bert_model.ckpt.index bert_model.ckpt.meta vocab.txt
我在 Ubuntu 16.04 LTS 上运行 , 使用 NVIDIA GTX 1080 Ti (CUDA 9.0) , 使用 Anaconda python 3.5 发行版 ,在虚拟环境中使用 tensorflow-gpu 1.11.0。
我希望代码能够顺利运行并开始训练(微调),因为它是官方代码,并且我将文件作为说明放置。
【问题讨论】:
-
您好,请阅读自述文件,但在调用 run train 脚本时看不到即时问题。会不会是环境问题?只是一个建议
-
@NathanMcCoy 嘿,我刚刚通过简单地删除 $BERT_BASE_DIR 中的斜杠(“/”)解决了这个问题,所以变量从 '/home/bert/Dev/venv/uncased_L -12_H-768_A-12/' 到 '/home/bert/Dev/venv/uncased_L-12_H-768_A-12'。所以前缀“/home/bert/Dev/venv/uncased_L-12_H-768_A-12//bert_model.ckpt”中不再有双斜杠。它奏效了!我只是不明白为什么这个斜线甚至可以产生任何影响。对于路径中的单斜杠或双斜杠,shell 会同等解释。
-
很高兴知道!
标签: python tensorflow nlp