Senta icon indicating copy to clipboard operation
Senta copied to clipboard

当数据量小于 batch_size 的时候,会出错

Open iclementine opened this issue 6 years ago • 0 comments

按照 README 中的脚本去进行 eval 的时候会出现

Traceback (most recent call last):
  File "sentiment_classify.py", line 288, in <module>
    main(args)
  File "sentiment_classify.py", line 273, in main
    args.model_path)
  File "sentiment_classify.py", line 210, in eval_net
    class2_acc = class2_acc / (total_count - neu_count)
ZeroDivisionError: float division by zero

经过分析发现是自带数据集中测试数据集只有 200 条, 而默认 batch_size 是 256, 而且因为代码使用的 batch 是 paddle.v2.batch 而不是 paddle.batch, (这个两个函数的实现一样,但是默认参数在 paddle.v2.batch 里面 drop_last 默认是 True, paddle.batch 里默认是 False), 所以会导致 test_reader 不会 yield.

建议更新代码,把 utils.py 中的

import paddle.v2 as paddle 改成 import paddle

或者在

utils.py101 和105 行中把

101      train_reader = paddle.batch(data_reader(data_path, word_dict, True), batch_size)
105      test_reader = paddle.batch(data_reader(data_path, word_dict, False), batch_size)

中加上 drop_last=False.

iclementine avatar Dec 04 '18 09:12 iclementine