wangyrRR 发表于 2023-5-11 21:06:27

程序跑了几行就不动了,这是怎么回事呀

这是我的代码

import logging
from logging.handlers import RotatingFileHandler
from data import build_corpus
from evaluate import bilstm_train_and_eval
from utils import extend_maps, prepocess_data_for_lstmcrf, save_obj, load_obj

# 设置日志级别和格式
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# 添加文件处理器
file_handler = RotatingFileHandler('log.txt', maxBytes=10*1024*1024, backupCount=5, encoding='utf-8')
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
logging.getLogger().addHandler(file_handler)

logging.info("读取数据中...")
train_word_lists, train_tag_lists, word2id, tag2id = build_corpus("train")
dev_word_lists, dev_tag_lists = build_corpus("dev", make_vocab=False)
test_word_lists, test_tag_lists = build_corpus("test", make_vocab=False)

logging.info("正在训练评估Bi-LSTM+CRF模型...")
crf_word2id, crf_tag2id = extend_maps(word2id, tag2id, for_crf=True)
save_obj(crf_word2id, 'crf_word2id')
save_obj(crf_tag2id, 'crf_tag2id')

logging.info(f"crf_tag2id: {' '.join( for i in crf_tag2id.items()])}")

train_word_lists, train_tag_lists = prepocess_data_for_lstmcrf(
    train_word_lists, train_tag_lists
)
dev_word_lists, dev_tag_lists = prepocess_data_for_lstmcrf(
    dev_word_lists, dev_tag_lists
)
test_word_lists, test_tag_lists = prepocess_data_for_lstmcrf(
    test_word_lists, test_tag_lists, test=True
)

lstmcrf_pred = bilstm_train_and_eval(
    (train_word_lists, train_tag_lists),
    (dev_word_lists, dev_tag_lists),
    (test_word_lists, test_tag_lists),
    crf_word2id, crf_tag2id
)

logging.info("训练评估完成!")



这个程序跑到这里就不动了
2023-05-11 21:01:11,497 - INFO - 读取数据中...
2023-05-11 21:01:23,668 - INFO - 正在训练评估Bi-LSTM+CRF模型...
2023-05-11 21:01:23,671 - INFO - crf_tag2id: O B-AFF M-AFF E-AFF B-DIS M-DIS E-DIS B-PRI E-PRI S-PRI B-LOG E-LOG S-DIS S-LOG M-LOG S-AFF M-PRI <unk> <pad> <start> <end>
start to train the bilstm_crf ...
训练数据总量:111
Epoch:   0%|          | 0/10
Iteration:   0%|          | 0/7


用原本的数据就可以这样跑下去
2023-05-11 20:29:58,670 - INFO - 读取数据中...
2023-05-11 20:29:59,341 - INFO - 正在训练评估Bi-LSTM+CRF模型...
2023-05-11 20:29:59,344 - INFO - crf_tag2id: B-NAME E-NAME O B-CONT M-CONT E-CONT B-RACE E-RACE B-TITLE M-TITLE E-TITLE B-EDU M-EDU E-EDU B-ORG M-ORG E-ORG M-NAME B-PRO M-PRO E-PRO S-RACE S-NAME B-LOC M-LOC E-LOC M-RACE S-ORG B-ID M-ID E-ID <unk> <pad> <start> <end>
start to train the bilstm_crf ...
训练数据总量:3832
Epoch:   0%|          | 0/10
Iteration:   0%|          | 0/240
Iteration:   0%|          | 1/240
Iteration:   1%|          | 2/240
Iteration:   1%|▏         | 3/240
Iteration:   2%|▏         | 4/240
Iteration:   2%|▏         | 5/240
Iteration:   2%|▎         | 6/240
Iteration:   3%|▎         | 7/240
Iteration:   3%|▎         | 8/240
Iteration:   4%|▍         | 9/240
Iteration:   4%|▍         | 10/240
Iteration:   5%|▍         | 11/240

这是为什么呢,能通过调整程序让他继续跑下去吗

sfqxx 发表于 2023-5-11 21:09:04

本帖最后由 sfqxx 于 2023-5-11 21:10 编辑

根据你提供的信息,程序似乎卡在了 Bi-LSTM + CRF 模型的训练上,而原本的数据则可以正常地运行。这种情况可能是由于数据集过小或模型的复杂度过高导致的。

下一步你可以尝试以下几种方法:

- 增加数据集大小:可以通过收集更多数据、数据增强或调整数据集划分来扩展更多的数据。你可以尝试使用类似的数据预处理流程等方式。

- 减轻模型的复杂度:如果你的模型很复杂,这可能会影响模型的训练速度和性能。可以考虑调整超参数如模型层数、隐层通道数、dropout率等来减轻模型复杂度,也可以考虑更改使用 CPU 训练或减少 batchsize 等方式。

- 调试程序:你可以使用 debug 的方式去找到程序出错的入口,并逐步去测试每个过程。具体的调试方法可以查看文档或参考别人的经验。
有用请设置最佳答案

isdkz 发表于 2023-5-11 21:21:41

这个问题可能有几个原因:

1. 数据问题:你提到用原始数据可以正常运行,所以可能是你的新数据导致的问题。新的数据集可能包含一些特殊的字符,或者数据格式不正确,或者数据集大小不匹配等等,都可能导致程序卡住。

2. 资源问题:如果你的数据集非常大,可能是因为内存不足或者计算资源不足导致的问题。你可以检查一下你的系统资源使用情况,看看是否有资源不足的问题。

3. 模型问题:你的模型可能在某些特殊的情况下无法正常训练。例如,某些特殊的输入可能导致模型的计算图构建失败,或者导致梯度消失/爆炸等问题。

解决这个问题的方法可能有以下几种:

1. 检查数据:首先,你需要确保你的新数据和原始数据是相同的格式,没有包含任何特殊的字符或者格式错误。你可以通过打印一些数据样本来检查这一点。

2. 增加日志:你可以在代码中添加更多的日志,来帮助你定位问题。例如,你可以在每个epoch或者每个batch之后打印一些信息,如当前的损失,准确率等。这样你可以更容易地看到问题出在哪里。

3. 调整模型参数:如果你的模型在某些特殊情况下无法正常训练,你可能需要调整模型的参数。例如,你可以尝试减小学习率,增大batch size,或者添加一些正则化来防止过拟合。

4. 减小数据集:如果是因为资源问题,你可以尝试减小你的数据集,或者只用一部分数据来训练模型,看看是否能够解决问题。

希望这些信息能够帮到你!

陈尚涵 发表于 2023-5-11 21:22:19

sfqxx 发表于 2023-5-11 21:09
根据你提供的信息,程序似乎卡在了 Bi-LSTM + CRF 模型的训练上,而原本的数据则可以正常地运行。这种情况 ...

???这gpt答的啥呀
增加大小……emm这不是数据错误,是不动啊
减轻复杂度……不是这很复杂吗
调试程序……这不就是废话?

sfqxx 发表于 2023-5-11 21:26:28

陈尚涵 发表于 2023-5-11 21:22
???这gpt答的啥呀
增加大小……emm这不是数据错误,是不动啊
减轻复杂度……不是这很复杂吗


az{:10_277:}

陶远航 发表于 2023-5-13 01:17:45

从你提供的日志来看,其中一个关键差异是训练数据的数量。在第一个例子中,训练数据总量为111,而在第二个例子中,训练数据总量为3832。这可能意味着,在第一个例子中,模型可能遇到了学习困难,因为数据量太少。

这里有一些建议,可以尝试让你的程序继续运行:

1、增加训练数据量:如果可能的话,尝试增加训练数据,这将有助于模型在训练过程中学到更多的信息。

2、调整模型参数:尝试降低模型复杂度,例如减小神经网络的层数、隐藏层神经元数量等。这可以帮助模型在较少的数据上更容易地进行训练。

3、调整训练参数:可以尝试调整学习率、批次大小、训练轮次等参数。这有助于在特定数据集上找到更适合的训练策略。

4、对数据进行预处理:检查数据集并确保没有错误或不一致。此外,可以尝试对数据进行标准化、去除异常值等预处理操作,以提高训练效果。

5、监控训练进度:为了更好地了解训练过程,可以在训练过程中添加更多的日志记录,以监控损失值、准确率等指标的变化。这将有助于分析模型在训练过程中的表现,并便于调试。

最后,如果仍然无法找到解决方案,请检查程序的其他部分,例如bilstm_train_and_eval函数和数据处理部分,以确保没有其他潜在问题。

guofeng8899 发表于 2023-5-23 19:40:09

{:9_241:}{:10_256:}{:5_102:}{:9_226:}
页: [1]
查看完整版本: 程序跑了几行就不动了,这是怎么回事呀