鱼C论坛

 找回密码
 立即注册
查看: 1207|回复: 6

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

[复制链接]
发表于 2023-5-11 21:06:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是我的代码

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([i[0] 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 [00:00<?, ?it/s]
Iteration:   0%|          | 0/7 [00:00<?, ?it/s]


用原本的数据就可以这样跑下去
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 [00:00<?, ?it/s]
Iteration:   0%|          | 0/240 [00:00<?, ?it/s]
Iteration:   0%|          | 1/240 [00:16<1:05:46, 16.51s/it]
Iteration:   1%|          | 2/240 [00:28<55:36, 14.02s/it]  
Iteration:   1%|▏         | 3/240 [00:39<48:38, 12.31s/it]
Iteration:   2%|▏         | 4/240 [00:48<43:59, 11.19s/it]
Iteration:   2%|▏         | 5/240 [00:57<40:01, 10.22s/it]
Iteration:   2%|▎         | 6/240 [01:04<36:38,  9.40s/it]
Iteration:   3%|▎         | 7/240 [01:12<33:45,  8.70s/it]
Iteration:   3%|▎         | 8/240 [01:18<31:19,  8.10s/it]
Iteration:   4%|▍         | 9/240 [01:25<29:16,  7.60s/it]
Iteration:   4%|▍         | 10/240 [01:31<27:17,  7.12s/it]
Iteration:   5%|▍         | 11/240 [01:37<25:31,  6.69s/it]

这是为什么呢,能通过调整程序让他继续跑下去吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-11 21:09:04 | 显示全部楼层
本帖最后由 sfqxx 于 2023-5-11 21:10 编辑

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

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

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

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

- 调试程序:你可以使用 debug 的方式去找到程序出错的入口,并逐步去测试每个过程。具体的调试方法可以查看文档或参考别人的经验。
有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 21:21:41 | 显示全部楼层
这个问题可能有几个原因:

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

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

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

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

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

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

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

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

希望这些信息能够帮到你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

???这gpt答的啥呀
增加大小……emm这不是数据错误,是不动啊
减轻复杂度……不是这很复杂吗
调试程序……这不就是废话?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

az
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-13 01:17:45 | 显示全部楼层
从你提供的日志来看,其中一个关键差异是训练数据的数量。在第一个例子中,训练数据总量为111,而在第二个例子中,训练数据总量为3832。这可能意味着,在第一个例子中,模型可能遇到了学习困难,因为数据量太少。

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

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

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

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

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

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

最后,如果仍然无法找到解决方案,请检查程序的其他部分,例如bilstm_train_and_eval函数和数据处理部分,以确保没有其他潜在问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-23 19:40:09 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 21:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表