OpenNMT预训练与模型训练脚本详解

需积分: 10 0 下载量 111 浏览量 更新于2024-09-06 收藏 4KB TXT 举报
在进行OpenNMT模型的训练过程中,首先要确保数据已经经过了子词化处理,这一步对于自然语言处理任务至关重要,因为它将原始文本分解成更小、更有意义的单元,便于模型学习和理解。在给定的描述中,具体步骤如下: 1. **准备训练**: 使用Python 3脚本`preprocess.py`,其路径为`/home/zdliu/pen_trans/opennmt-simple-1.0/opennmt-simple-1.0/`。该脚本用于对训练源文件`train.en`(英文)和目标文件`train.de`(德文)进行预处理,同时处理验证集`valid.en`和`valid.de`。参数设置包括共享词汇表(`-share_vocab`)、源语言词汇表大小(`-src_vocab_size`为40000),目标语言词汇表大小(`-tgt_vocab_size`同样为40000),以及最大序列长度(`-src_seq_length`和`-tgt_seq_length`均为10000)。所有处理结果将保存在`/home/zdliu/pa_token_nmt/pre_train/wmt14`目录下,并且预处理日志会记录在`/home/zdliu/pa_token_nmt/pre_train/prepare.log`中。 2. **启动训练**: 在完成预处理后,使用`train.py`脚本进行模型训练。训练过程在GPU(通过环境变量`CUDA_VISIBLE_DEVICES=2`指定)上执行,命令行选项包括指定训练数据目录(`data/home/zdliu/pa_token_nmt/pre_train/wmt14`),模型保存路径(`save_model/home/zdliu/pa_token_nmt/model_en_de/model_`),以及一些训练参数如: - `save_checkpoint_steps`: 每隔多少步保存一次检查点,以便于模型的持久化和恢复。 - `accum_count`: 指定梯度累积次数,有助于稳定训练过程。 - `valid_steps`: 每隔多少步验证一次模型性能。 - `report_every`: 用于报告训练进度的频率。 - `keep_checkpoint`: 保留多少个检查点以避免过多占用磁盘空间。 - `seed`: 设置随机种子以保证实验的可重复性。 - `train_steps`: 总共训练的步数,这里是250000。 - `warmup_steps`: 开始时的温和学习率调整阶段。 - `train_from`: 如果有先前的模型想要继续训练,可以指定`model__step_20000.pt`。 - `share_embeddings`: 共享编码器和解码器的嵌入层。 - `position_encoding`: 应用位置编码,增强模型对序列顺序的理解。 - `optimadam`: 使用Adam优化器,设置参数`adam_beta1`和`adam_beta2`。 - `decay_method`: 学习率衰减策略选择为Noam。 - `learning_rate`: 初始学习率设定为0.5。 - `max_grad_norm`: 梯度裁剪的阈值,防止梯度爆炸。 这些命令行选项是OpenNMT框架中常用的训练配置,它们共同决定了模型的训练过程和收敛性能。在实际操作中,这些参数可以根据具体任务的需求进行调整,以达到最佳效果。

优化这段代码if (ResMeta.PROTOCOL_HTTPS.equals(token.getLoginProtocol()) || ResMeta.PROTOCOL_HTTP.equals(token.getLoginProtocol())) { ssoTicket.setHostDomainName(token.getTargetIp()); ssoTicket.setWebappUrl(token.getLoginProtocol() + "://" + token.getTargetIp()); ssoTicket.setAgreementType(token.getLoginProtocol()); if (!this.fillIssuerInfo(ssoTicket, token.getIssuerId(), token.getIssuerToolId(), token.getResType(), sid)) { String err = "加载应用发布错误"; rv.setDetail(err); rv.setStatus(DataResult.STA_SSO_REGISTER_TICKET_ERR); logger.error(err); return null; } } else if (ResMeta.RESTYPE_CSAPP.equals(token.getResType())){ if (!this.fillIssuerInfo(ssoTicket, token.getIssuerId(), token.getIssuerToolId(), token.getResType(), sid)) { String err = "加载应用发布错误"; rv.setDetail(err); rv.setStatus(DataResult.STA_SSO_REGISTER_TICKET_ERR); logger.error(err); return null; } } else if (ResMeta.PROTOCOL_RDP.equals(token.getLoginProtocol())) { if (ssoAcc != null && ssoAcc.getWinAccType() == AccMeta.WIN_ACC_DOMAIN_TYPE) { this.fillHostDomain(ssoAcc, ssoTicket, token.getAccName()); } else if (resInfo.getHostName() != null && resInfo.getHostName().length() > 0) { ssoTicket.setAcc(resInfo.getHostName() + "\\" + ssoTicket.getAcc()); } } else if (ResMeta.PROTOCOL_SSH2.equals(token.getLoginProtocol()) || ResMeta.PROTOCOL_SSH1.equals(token.getLoginProtocol()) || ResMeta.PROTOCOL_TELNET.equals(token.getLoginProtocol())) { CMDSSOTicket cmdTicket = (CMDSSOTicket) ssoTicket; /* 设置提权(原5.0的扩展策略)如果存在工单号 按工单处理 规则授权暂时不支持设置提权 */ if (token.getWorkId() != null && token.getWorkId().length() > 0) { try { SSOWorkOrderAuthz authz = new SSOWorkOrderAuthz(); authz.setWorkOrderId(token.getWorkId()); authz.setResId(token.getResId()); int suPermission = ssoWorkOrderRepository.findWorkOrderAuthcSuPermission(authz); if (SSORegisterMeta.SU_PERMISSION_YES_VALUE == suPermission && ResMeta.SU_PRIVILEGE_YES_VALUE == resInfo.getSuPrivilege()) { cmdTicket.setSu_cmd(resInfo.getSuCmd()); cmdTicket.setSu_pwd(this.getPasswd(resInfo.getId(), resInfo.getSuManagerAcc())); cmdTicket.setSu_pwd_prompt(resInfo.getSuPwdPrompt()); } } catch (Exception e) { } } else if (token.getAuthzId() != null && token.getAuthzId().length() > 0) { try { int suPermission = ssoResroleRepository.findResroleAuthcSuPermission(token.getAuthzId()); if (SSORegisterMeta.SU_PERMISSION_YES_VALUE == suPermission && ResMeta.SU_PRIVILEGE_YES_VALUE == resInfo.getSuPrivilege()) { cmdTicket.setSu_cmd(resInfo.getSuCmd()); cmdTicket.setSu_pwd(this.getPasswd(resInfo.getId(), resInfo.getSuManagerAcc())); cmdTicket.setSu_pwd_prompt(resInfo.getSuPwdPrompt()); } } catch (Exception e) { } }

2023-07-11 上传
2022-12-07 上传
2022-10-26 上传