提交 6c1b67bc 编写于 作者: Z Zeyu Chen

add sequence label README.md

上级 416c374c
export CUDA_VISIBLE_DEVICES=0 export CUDA_VISIBLE_DEVICES=0
CKPT_DIR="./ckpt_sequence_labeling" CKPT_DIR="./ckpt_sequence_label"
python -u sequence_label.py \ python -u sequence_label.py \
--batch_size 16 \ --batch_size 16 \
--weight_decay 0.01 \ --weight_decay 0.01 \
--checkpoint_dir $CKPT_DIR \
--num_epoch 3 \ --num_epoch 3 \
--checkpoint_dir $CKPT_DIR \
--max_seq_len 256 \ --max_seq_len 256 \
--learning_rate 5e-5 --learning_rate 5e-5
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
"""Finetuning on sequence labeling task.""" """Finetuning on sequence labeling task."""
import argparse import argparse
import ast
import paddle.fluid as fluid import paddle.fluid as fluid
import paddlehub as hub import paddlehub as hub
......
...@@ -133,7 +133,7 @@ hub.finetune_and_eval(task=cls_task, data_reader=reader, feed_list=feed_list, co ...@@ -133,7 +133,7 @@ hub.finetune_and_eval(task=cls_task, data_reader=reader, feed_list=feed_list, co
* `eval_interval`: 模型评估的间隔,默认每100个step评估一次验证集 * `eval_interval`: 模型评估的间隔,默认每100个step评估一次验证集
* `save_ckpt_interval`: 模型保存间隔,请根据任务大小配置,默认只保存验证集效果最好的模型和训练结束的模型 * `save_ckpt_interval`: 模型保存间隔,请根据任务大小配置,默认只保存验证集效果最好的模型和训练结束的模型
* `use_cuda`: 是否使用GPU训练,默认为False * `use_cuda`: 是否使用GPU训练,默认为False
* `checkpoint_dir`: 模型checkpoint保存路径 * `checkpoint_dir`: 模型checkpoint保存路径, 若用户没有指定,程序会自动生成
* `num_epoch`: finetune的轮数 * `num_epoch`: finetune的轮数
* `batch_size`: 训练的批大小,如果使用GPU,请根据实际情况调整batch_size * `batch_size`: 训练的批大小,如果使用GPU,请根据实际情况调整batch_size
* `enable_memory_optim`: 是否使用内存优化, 默认为True * `enable_memory_optim`: 是否使用内存优化, 默认为True
......
export CUDA_VISIBLE_DEVICES=5 export CUDA_VISIBLE_DEVICES=5
CKPT_DIR="./ckpt_chnsenticorp/best_model" CKPT_DIR="./ckpt_20190414203357/best_model"
python -u predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128 python -u predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128
import paddle.fluid as fluid import paddle.fluid as fluid
import paddlehub as hub import paddlehub as hub
# Step1 # Step1: Select pre-trained model
module = hub.Module(name="ernie") module = hub.Module(name="ernie")
inputs, outputs, program = module.context(trainable=True, max_seq_len=128) inputs, outputs, program = module.context(trainable=True, max_seq_len=128)
# Step2 # Step2: Prepare Dataset and DataReader
dataset = hub.dataset.ChnSentiCorp() dataset = hub.dataset.ChnSentiCorp()
reader = hub.reader.ClassifyReader( reader = hub.reader.ClassifyReader(
dataset=dataset, vocab_path=module.get_vocab_path(), max_seq_len=128) dataset=dataset, vocab_path=module.get_vocab_path(), max_seq_len=128)
# Step3 # Step3: Construct transfer learning task
with fluid.program_guard(program): with fluid.program_guard(program):
label = fluid.layers.data(name="label", shape=[1], dtype='int64') label = fluid.layers.data(name="label", shape=[1], dtype='int64')
pooled_output = outputs["pooled_output"] pooled_output = outputs["pooled_output"]
cls_task = hub.create_text_cls_task(
cls_task = hub.create_text_classification_task(
feature=pooled_output, label=label, num_classes=dataset.num_labels) feature=pooled_output, label=label, num_classes=dataset.num_labels)
# Step4 # Step4: Setup config then start finetune
strategy = hub.AdamWeightDecayStrategy(learning_rate=5e-5, weight_decay=0.01) strategy = hub.AdamWeightDecayStrategy(learning_rate=5e-5, weight_decay=0.01)
config = hub.RunConfig( config = hub.RunConfig(
use_cuda=True, num_epoch=3, batch_size=32, strategy=strategy) use_cuda=True,
checkpoint_dir="./ckpt",
num_epoch=3,
batch_size=32,
strategy=strategy)
feed_list = [ feed_list = [
inputs["input_ids"].name, inputs["position_ids"].name, inputs["input_ids"].name, inputs["position_ids"].name,
......
...@@ -57,6 +57,7 @@ def evaluate_cls_task(task, data_reader, feed_list, phase="test", config=None): ...@@ -57,6 +57,7 @@ def evaluate_cls_task(task, data_reader, feed_list, phase="test", config=None):
avg_loss = loss_sum / num_eval_examples avg_loss = loss_sum / num_eval_examples
avg_acc = acc_sum / num_eval_examples avg_acc = acc_sum / num_eval_examples
eval_speed = eval_step / eval_time_used eval_speed = eval_step / eval_time_used
logger.info( logger.info(
"[%s dataset evaluation result] loss=%.5f acc=%.5f [step/sec: %.2f]" % "[%s dataset evaluation result] loss=%.5f acc=%.5f [step/sec: %.2f]" %
(phase, avg_loss, avg_acc, eval_speed)) (phase, avg_loss, avg_acc, eval_speed))
...@@ -64,11 +65,11 @@ def evaluate_cls_task(task, data_reader, feed_list, phase="test", config=None): ...@@ -64,11 +65,11 @@ def evaluate_cls_task(task, data_reader, feed_list, phase="test", config=None):
return avg_loss, avg_acc, eval_speed return avg_loss, avg_acc, eval_speed
def evaluate_seq_labeling_task(task, def evaluate_seq_label_task(task,
data_reader, data_reader,
feed_list, feed_list,
phase="test", phase="test",
config=None): config=None):
fetch_list = [ fetch_list = [
task.variable("labels").name, task.variable("labels").name,
task.variable("infers").name, task.variable("infers").name,
......
...@@ -27,7 +27,7 @@ from visualdl import LogWriter ...@@ -27,7 +27,7 @@ from visualdl import LogWriter
from paddlehub.common.logger import logger from paddlehub.common.logger import logger
from paddlehub.finetune.strategy import AdamWeightDecayStrategy, DefaultStrategy from paddlehub.finetune.strategy import AdamWeightDecayStrategy, DefaultStrategy
from paddlehub.finetune.checkpoint import load_checkpoint, save_checkpoint from paddlehub.finetune.checkpoint import load_checkpoint, save_checkpoint
from paddlehub.finetune.evaluate import evaluate_cls_task, evaluate_seq_labeling_task from paddlehub.finetune.evaluate import evaluate_cls_task, evaluate_seq_label_task
import paddlehub as hub import paddlehub as hub
...@@ -126,13 +126,13 @@ def _finetune_seq_label_task(task, ...@@ -126,13 +126,13 @@ def _finetune_seq_label_task(task,
exe=exe) exe=exe)
if do_eval and global_step % config.eval_interval == 0: if do_eval and global_step % config.eval_interval == 0:
evaluate_seq_labeling_task( evaluate_seq_label_task(
task, task,
data_reader, data_reader,
feed_list, feed_list,
phase="test", phase="test",
config=config) config=config)
evaluate_seq_labeling_task( evaluate_seq_label_task(
task, task,
data_reader, data_reader,
feed_list, feed_list,
...@@ -148,9 +148,9 @@ def _finetune_seq_label_task(task, ...@@ -148,9 +148,9 @@ def _finetune_seq_label_task(task,
exe=exe) exe=exe)
if do_eval: if do_eval:
evaluate_seq_labeling_task( evaluate_seq_label_task(
task, data_reader, feed_list, phase="dev", config=config) task, data_reader, feed_list, phase="dev", config=config)
evaluate_seq_labeling_task( evaluate_seq_label_task(
task, data_reader, feed_list, phase="test", config=config) task, data_reader, feed_list, phase="test", config=config)
logger.info("PaddleHub finetune finished.") logger.info("PaddleHub finetune finished.")
...@@ -164,8 +164,8 @@ def _finetune_cls_task(task, data_reader, feed_list, config=None, ...@@ -164,8 +164,8 @@ def _finetune_cls_task(task, data_reader, feed_list, config=None,
num_epoch = config.num_epoch num_epoch = config.num_epoch
batch_size = config.batch_size batch_size = config.batch_size
log_writter = LogWriter( log_writer = LogWriter(
os.path.join(config.checkpoint_dir, "vdllog"), sync_cycle=10) os.path.join(config.checkpoint_dir, "vdllog"), sync_cycle=1)
place, dev_count = hub.common.get_running_device_info(config) place, dev_count = hub.common.get_running_device_info(config)
with fluid.program_guard(main_program, startup_program): with fluid.program_guard(main_program, startup_program):
...@@ -190,10 +190,10 @@ def _finetune_cls_task(task, data_reader, feed_list, config=None, ...@@ -190,10 +190,10 @@ def _finetune_cls_task(task, data_reader, feed_list, config=None,
logger.info("PaddleHub finetune start") logger.info("PaddleHub finetune start")
# add visualdl scalar # add visualdl scalar
with log_writter.mode("train") as logw: with log_writer.mode("train") as logw:
train_loss_scalar = logw.scalar(tag="loss[train]") train_loss_scalar = logw.scalar(tag="loss[train]")
train_acc_scalar = logw.scalar(tag="accuracy[train]") train_acc_scalar = logw.scalar(tag="accuracy[train]")
with log_writter.mode("evaluate") as logw: with log_writer.mode("evaluate") as logw:
eval_loss_scalar = logw.scalar(tag="loss[evaluate]") eval_loss_scalar = logw.scalar(tag="loss[evaluate]")
eval_acc_scalar = logw.scalar(tag="accuracy[evaluate]") eval_acc_scalar = logw.scalar(tag="accuracy[evaluate]")
...@@ -276,8 +276,7 @@ def finetune_and_eval(task, data_reader, feed_list, config=None): ...@@ -276,8 +276,7 @@ def finetune_and_eval(task, data_reader, feed_list, config=None):
if task.task_type == "sequence_labeling": if task.task_type == "sequence_labeling":
_finetune_seq_label_task( _finetune_seq_label_task(
task, data_reader, feed_list, config, do_eval=True) task, data_reader, feed_list, config, do_eval=True)
# if it's image_classification and text classificaiton elif task.task_type == "image_classification" or task.task_type == "text_classification":
else:
_finetune_cls_task(task, data_reader, feed_list, config, do_eval=True) _finetune_cls_task(task, data_reader, feed_list, config, do_eval=True)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册