首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >错误训练ELMo - RuntimeError:张量a (5158)的大小必须与张量b (5000)在非单例尺寸1处的大小相匹配。

错误训练ELMo - RuntimeError:张量a (5158)的大小必须与张量b (5000)在非单例尺寸1处的大小相匹配。
EN

Stack Overflow用户
提问于 2022-03-17 07:12:43
回答 1查看 146关注 0票数 0

我正在尝试在AllenNLP上训练我自己的自定义AllenNLP模型。

在训练模型时,会出现以下错误RuntimeError: The size of tensor a (5158) must match the size of tensor b (5000) at non-singleton dimension 1。在有些情况下,张量a的大小表示为其他值(例如,5300)。当我在一小部分文件上进行测试时,我能够成功地训练模型。

根据我的直觉,这是处理我的模型中的标记数的东西。更具体地说,具有5000多个令牌的特定文件。但是,在AllenNLP包中没有参数允许我调整这个参数来绕过这个错误。

关于我如何克服这个问题,有什么建议吗?是否会调整PyTorch代码以将其设置为5000大小(如果是,我如何做到这一点)?任何见解都将受到深深的赞赏。

FYI,我目前正在使用一个定制的DatasetReader进行令牌化。在培训模型之前,我已经生成了自己的词汇表(以节省一些时间),该模型用于通过ELMo训练AllenNLP模型。

更新:我发现AllenNLP max_len=5000中有这个变量,这就是错误显示的原因。参见代码这里。我已经将参数调整为更大的值,并在许多情况下导致CUDA出现内存错误。让我相信这是不应该被触及的。

环境:Python3.6.9,Linux,allennlp=2.9.1,allennlp-=2.9.0

回溯:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Traceback (most recent call last):
  File "/home/jiayi/.local/bin/allennlp", line 8, in <module>
    sys.exit(run())
  File "/home/jiayi/.local/lib/python3.6/site-packages/allennlp/__main__.py", line 34, in run
    main(prog="allennlp")
  File "/home/jiayi/.local/lib/python3.6/site-packages/allennlp/commands/__init__.py", line 121, in main
    args.func(args)
  File "/home/jiayi/.local/lib/python3.6/site-packages/allennlp/commands/train.py", line 120, in train_model_from_args
    file_friendly_logging=args.file_friendly_logging,
  File "/home/jiayi/.local/lib/python3.6/site-packages/allennlp/commands/train.py", line 179, in train_model_from_file
    file_friendly_logging=file_friendly_logging,
  File "/home/jiayi/.local/lib/python3.6/site-packages/allennlp/commands/train.py", line 246, in train_model
    file_friendly_logging=file_friendly_logging,
  File "/home/jiayi/.local/lib/python3.6/site-packages/allennlp/commands/train.py", line 470, in _train_worker
    metrics = train_loop.run()
  File "/home/jiayi/.local/lib/python3.6/site-packages/allennlp/commands/train.py", line 543, in run
    return self.trainer.train()
  File "/home/jiayi/.local/lib/python3.6/site-packages/allennlp/training/gradient_descent_trainer.py", line 720, in train
    metrics, epoch = self._try_train()
  File "/home/jiayi/.local/lib/python3.6/site-packages/allennlp/training/gradient_descent_trainer.py", line 741, in _try_train
    train_metrics = self._train_epoch(epoch)
  File "/home/jiayi/.local/lib/python3.6/site-packages/allennlp/training/gradient_descent_trainer.py", line 459, in _train_epoch
    batch_outputs = self.batch_outputs(batch, for_training=True)
  File "/home/jiayi/.local/lib/python3.6/site-packages/allennlp/training/gradient_descent_trainer.py", line 352, in batch_outputs
    output_dict = self._pytorch_model(**batch)
  File "/home/jiayi/.local/lib/python3.6/site-packages/torch/nn/modules/module.py", line 889, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/home/jiayi/.local/lib/python3.6/site-packages/allennlp_models/lm/models/language_model.py", line 257, in forward
    embeddings, mask
  File "/home/jiayi/.local/lib/python3.6/site-packages/torch/nn/modules/module.py", line 889, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/home/jiayi/.local/lib/python3.6/site-packages/allennlp_models/lm/modules/seq2seq_encoders/bidirectional_lm_transformer.py", line 282, in forward
    token_embeddings = self._position(token_embeddings)
  File "/home/jiayi/.local/lib/python3.6/site-packages/torch/nn/modules/module.py", line 889, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/home/jiayi/.local/lib/python3.6/site-packages/allennlp_models/lm/modules/seq2seq_encoders/bidirectional_lm_transformer.py", line 68, in forward
    return x + self.positional_encoding[:, : x.size(1)]
RuntimeError: The size of tensor a (5385) must match the size of tensor b (5000) at non-singleton dimension 1

AllenNLP培训配置文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// For more info on config files generally, see https://guide.allennlp.org/using-config-files

local NUM_GRAD_ACC = 4;
local BATCH_SIZE = 1;

local BASE_LOADER = {
  "max_instances_in_memory": 8,
  "batch_sampler": {
    "type": "bucket",
    "batch_size": BATCH_SIZE,
    "sorting_keys": ["source"]
  }
};

{
    "dataset_reader" : {
        "type": "mimic_reader",
        "token_indexers": {
            "tokens": {
                "type": "single_id"
            },
            "token_characters": {
                "type": "elmo_characters"
            }
        },
        "start_tokens": ["<S>"],
        "end_tokens": ["</S>"],
    },
    "train_data_path": std.extVar("MIMIC3_NOTEEVENTS_DISCHARGE_PATH"),
    // Note: We don't set a validation_data_path because the softmax is only
    // sampled during training. Not sampling on GPUs results in a certain OOM
    // given our large vocabulary. We'll need to evaluate against the test set
    // (when we'll want a full softmax) with the CPU.
    "vocabulary": {
        // Use a prespecified vocabulary for efficiency.
        "type": "from_files",
        "directory": std.extVar("ELMO_VOCAB_PATH"),
        // Plausible config for generating the vocabulary.
        // "tokens_to_add": {
        //     "tokens": ["<S>", "</S>"],
        //     "token_characters": ["<>/S"]
        // },
        // "min_count": {"tokens": 3}
    },
    "model": {
        "type": "language_model",
        "bidirectional": true,
        "num_samples": 8192,
        # Sparse embeddings don't work with DistributedDataParallel.
        "sparse_embeddings": false,
        "text_field_embedder": {
        "token_embedders": {
            "tokens": {
            "type": "empty"
            },
            "token_characters": {
                "type": "character_encoding",
                "embedding": {
                    "num_embeddings": 262,
                    // Same as the Transformer ELMo in Calypso. Matt reports that
                    // this matches the original LSTM ELMo as well.
                    "embedding_dim": 16
                },
                "encoder": {
                    "type": "cnn-highway",
                    "activation": "relu",
                    "embedding_dim": 16,
                    "filters": [
                        [1, 32],
                        [2, 32],
                        [3, 64],
                        [4, 128],
                        [5, 256],
                        [6, 512],
                        [7, 1024]],
                    "num_highway": 2,
                    "projection_dim": 512,
                    "projection_location": "after_highway",
                    "do_layer_norm": true
                }
            }
        }
        },
        // Consider the following.
        // remove_bos_eos: true,
        // Applies to the contextualized embeddings.
        "dropout": 0.1,
        "contextualizer": {
            "type": "bidirectional_language_model_transformer",
            "input_dim": 512,
            "hidden_dim": 4096,
            "num_layers": 2,
            "dropout": 0.1,
            "input_dropout": 0.1
        }
    },
    "data_loader": BASE_LOADER,
    // "distributed": {
    //     "cuda_devices": [0, 1],
    // },
    "trainer": {
        "num_epochs": 10,
        "cuda_devices": [0, 1, 2, 3],
        "optimizer": {
        // The gradient accumulators in Adam for the running stdev and mean for
        // words not used in the sampled softmax would be decayed to zero with the
        // standard "adam" optimizer.
        "type": "dense_sparse_adam"
        },
        // "grad_norm": 10.0,
        "learning_rate_scheduler": {
        "type": "noam",
        // See https://github.com/allenai/calypso/blob/master/calypso/train.py#L401
        "model_size": 512,
        // See https://github.com/allenai/calypso/blob/master/bin/train_transformer_lm1b.py#L51.
        // Adjusted based on our sample size relative to Calypso's.
        "warmup_steps": 6000
        },
        "num_gradient_accumulation_steps": NUM_GRAD_ACC,
        "use_amp": true
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-24 09:17:47

通过将自定义max_tokens的DatasetReader变量设置为5000以下,此错误不再存在。AllenNLP的贡献者之一也建议这样做,以确保令牌程序将输入截断为5000个令牌。

AllenNLP:https://github.com/allenai/allennlp/discussions/5601上也有同样的问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71514727

复制
相关文章
如何使用Frelatage对Python代码进行模糊测试
Frelatage是一款基于覆盖率的Python模糊测试工具,在该工具的帮助下,广大研究人员可以轻松对Python代码进行模糊测试。
FB客服
2022/06/08
1.8K0
如何使用Frelatage对Python代码进行模糊测试
使用WireMock进行更好的集成测试
无论您是遵循传统的测试金字塔还是采用诸如“测试蜂窝”这样的较新方法,都应该在开发过程中的某个时候开始编写集成测试用例。您可以编写不同类型的集成测试。从持久性测试开始,您可以检查组件之间的交互,也可以模拟调用外部服务。本文将讨论后一种情况。在谈论WireMock之前,让我们从一个典型的例子开始。
FunTester
2019/12/09
2.5K0
使用WireMock进行更好的集成测试
使用 monkey 对 App 进行压力测试
monkey 是 Android 中的一个命令行工具,由 java 编写,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对 APP 进行压力测试。
顾翔
2020/09/23
1.9K0
使用 monkey 对 App 进行压力测试
使用 Go 对 Nginx 进行性能测试
目前有很多提供Go语言HTTP应用服务的方法,但其中最好的选择取决于每个应用的实际情况。目前,Nginx看起来是每个新项目的标准Web服务器,即使在有其他许多不错Web服务器的情况下。然而,在Nginx上提供Go应用服务的开销是多少呢?我们需要一些nginx的特性参数(vhosts,负载均衡,缓存,等等)或者直接使用Go提供服务?如果你需要nginx,最快的连接机制是什么?这就是在这我试图回答的问题。该基准测试的目的不是要验证Go比nginx的快或慢。那将会很愚蠢。
星哥玩云
2022/06/28
8130
使用JMeter对WebService进行压力测试
现实项目中我们使用了JMeter对WebService进行了压力测试,Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试。
星哥玩云
2022/07/03
1.7K0
使用pgbench对PostgreSQL进行基准测试
TPC-C是经典的衡量在线事务处理(OLTP)系统性能和可伸缩性的基准测试规范。常见的开源数据库的基准测试工具有benchmarksql、 sysbench等,PostgreSQL自带运行基准测试的简单程序pgbench。pgbench是一个类TPC-B 的基准测试工具,可以执行内置的测试脚本,也可以自定义脚本文件。
姚远OracleACE
2023/09/06
1.1K0
使用pgbench对PostgreSQL进行基准测试
使用sysbench对MySQL进行压力测试
​出自percona公司,是一款多线程系统压测工具,可以根据影响数据库服务器性能的各种因素来评估系统的性能。例如,可以用来测试文件IO,操作系统调度器,内存分配和传输速度,POSIX线程以及数据库服务器等。sysbench支持Lua脚本语言,Lua对各种测试场景的设置可以非常灵活。sysbench支持MySQL,操作系统和硬件的测试。
星哥玩云
2022/08/16
2.8K0
使用sysbench对MySQL进行压力测试
如何对机器学习代码进行单元测试?
本文介绍了一种用于机器学习代码的单元测试方法,通过生成数据输入、模型推理、损失计算和优化等步骤,来确保每个组件只在一个步骤中起作用。作者还提供了相应的测试用例和代码示例,以帮助读者更好地理解单元测试的实现过程。同时,作者也提醒读者,单元测试并非万能的,需要结合其他测试方法来全面评估机器学习代码的性能和正确性。
企鹅号小编
2018/01/09
2.5K0
如何对机器学习代码进行单元测试?
使用ab命令对网站进行压力测试
这是apache自带的一个网站压力测试工具,是ApacheBench的缩写,我们可以使用这个工具来对我们的网站进行压力测试
用户5807183
2019/09/16
2K0
Docker Compose进行集成测试
集成测试通常是一项困难的活动,特别是在涉及到分布式系统时。即便正在构建单体应用,也可能需要启动数据库,来进行集成测试。这种事情在早期很容易做到,但随着代码库的增加,难度将呈指数级增长。值得庆幸的是,Docker Compose 使我们能够在运行 Docker 的任何环境中,进行集成测试。
小阑本阑
2023/07/12
2730
Docker Compose进行集成测试
如何对集成树进行解释?
集成树(tree-based ensemble learning)中,最有名的就是随机森林树(Random Forest,简称RF)与梯度提升树(Gradient Boosting Trees,简称GBM)。而近年在Kaggle 竞赛平台中最火红的XGBoost 也是基于GBM 所延伸出来的演算法。在解释集成树有三个非常好用的方法: 特征重要度(Feature Importance) 部分相依图(Partial Dependence Plot,简称PDP) 个体条件期望图(Individual Conditional Expectation Plot,简称ICE Plot) 这三个方法属于「事后可解释性(post hoc)」并且「通用于任何一种演算法模型(model-agnostic)」。
致Great
2020/12/29
1.4K0
Go语言使用gorm对MySQL进行性能测试
之前写过了Go语言gorm框架MySQL实践,其中对gorm框架在操作MySQL的各种基础实践,下面分享一下如何使用gorm框架对MySQL直接进行性能测试的简单实践。
FunTester
2022/04/01
1.1K0
使用 cURL 对Web请求进行性能测试
在做 Web 开发的时候,经常需要对 Web Page 或者 REST-ful API 做简单的 Benchmark。本文将介绍如何使用 cURL 进行简单快速的性能评测。本文内容分为以下两部分:
Debian中国
2018/12/21
2.9K0
如何使用GraphQLmap对GraphQL节点进行渗透测试
GraphQLmap是一个可以跟GraphQL节点交互的脚本引擎,广大研究人员可以使用GraphQLmap来针对GraphQL节点进行渗透测试和安全研究。
FB客服
2021/07/02
1.9K0
使用微信测试账号对网页进行授权
如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。我们在进行公众号网页开发的时候,想要获取用户的基本信息,首先得获取到access_token,从access_token里我们要拿出用户的openid来作为用户在我们系统中的唯一标识,以及通过openid可以保证该用户的只能访问到与其openid相对应的数据,防止越权漏洞。因此,我们需要对网页进行授权,否则是无法在获取到用户的openid的。
端碗吹水
2020/09/23
4.2K0
使用微信测试账号对网页进行授权
Redis 如何使用HyperLogLog
Redis 在 2.8.9 版本添加了 HyperLogLog 数据结构,用来做基数统计,其优点是在输入元素的数量非常大时,计算基数所需的空间比较小并且一般比较恒定。
smartsi
2019/12/02
7830
点击加载更多

相似问题

MySQLSHOW抑制Bash脚本中的警告

10

mysqlshow中缺少mySQL数据库

11

(动态)生成一个包含X数量行和Y数量列的表

16

表的数量

113

包含产品销售和数量的表-添加计算产品数量的列

32
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文