Rekal11 2024-07-19 15:57 采纳率: 0%
浏览 1

BERT模型代码问题!!

img

img


如图所示为CSDN一个帖子的BERT模型的截取,在这个方法定义之前已经有全局变量batch_size=6和maxlen=30。这个seq_q的实例化就是用PAD补齐之后的6*30的tensor,所以还要取出来seq_q的size然后赋值给数值一模一样局部变量,为什么不能写成图二这种写法?

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-19 15:57
    关注

    引自免费微信小程序:皆我百晓生

    在您提供的两段代码中,主要问题在于函数的参数定义以及函数中如何使用这些参数。在图一中,seq_qseq_k都是输入函数的参数,并在函数内部直接使用这些参数进行大小计算。但是在图二中,这部分被删除了或者没有正确地复制过来。这是问题的关键所在。

    首先,我们需要理解为什么在函数内部获取张量的尺寸是必要的。这是因为当我们使用PyTorch框架时,张量的尺寸可能会随着输入数据的不同而变化。因此,我们不能假设seq_qseq_k的尺寸是固定的。即使我们知道全局变量batch_sizemaxlen的值,也不能直接用于函数内部的计算,因为函数的输入参数(如seq_qseq_k)可能会传递不同的值给函数。因此,我们需要在函数内部获取张量的尺寸以确保代码的正确性和通用性。这也是为什么在图一中要计算seq_q.size()和赋值给局部变量而不是直接使用全局变量的原因。此外,这种方法使得函数对输入数据的大小不敏感,只关心特定的维度即可,这样的代码设计更符合PyTorch的操作习惯和面向对象的编程原则。在处理更复杂的模型和更多种类的输入数据时尤其重要。如果您知道所有输入张量的维度始终一致并总是固定的话,可以只定义一个参数在函数内部直接使用。然而,对于一般的深度学习模型来说,这种做法并不常见且可能导致潜在的问题。至于为什么在图二中不能写成您所展示的那样,是因为缺少了必要的参数获取和计算步骤。因此,正确的做法应该是像图一那样在函数内部获取张量的尺寸并进行相应的操作。如果您想简化代码并直接使用全局变量(尽管这并不是一种好的做法),您应该确保所有的函数都知道全局变量的存在并且能够正确地使用它们。但通常推荐的做法还是在函数内部直接处理需要的尺寸和数据维度等,以便让代码更具有通用性和可读性。在提供的代码片段中并没有显示对seq_k的使用情况,所以具体如何处理取决于这个参数在你的BERT模型中的用途。总的来说,为了代码的健壮性和灵活性,通常推荐在函数内部获取和操作张量的尺寸和维度等信息。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月19日

悬赏问题

  • ¥15 如何能达到用ping0.cc检测成这样?如图
  • ¥15 关于#DMA固件#的问题,请各位专家解答!
  • ¥15 matlab生成的x1图不趋于稳定,之后的图像是稳定的水平线
  • ¥15 请问华为OD岗位的内部职业发展通道都有哪些,以及各个级别晋升的要求
  • ¥20 微信小程序 canvas 问题
  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验
  • ¥15 canal如何实现将mysql多张表(月表)采集入库到目标表中(一张表)?