首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

pytorch“尝试再次向后遍历图形”错误,带有字符级别RNN

问题描述: 当使用PyTorch进行深度学习模型训练时,出现了一个错误消息:“尝试再次向后遍历图形”,并且我在模型中使用了字符级别的循环神经网络(RNN)。

回答: 这个错误消息通常出现在使用PyTorch进行反向传播时,表示在计算图中存在循环依赖关系。这种循环依赖通常是由于字符级别的RNN模型中引入了自回归(autoregressive)的特性造成的。

字符级别的RNN模型是一种经常用于文本生成或文本分类任务的模型。它通过在每个时间步上处理一个字符来对文本进行建模。在模型的训练过程中,每个时间步的输入是前一个时间步的输出。这种依赖关系会导致计算图中存在循环,从而导致反向传播时出现错误。

为了解决这个问题,可以尝试以下几种方法:

  1. 使用截断的反向传播(truncated backpropagation):在训练过程中,将RNN模型的历史状态截断为固定长度。这样可以避免计算图中出现过长的依赖关系,减少循环依赖的问题。
  2. 使用更高级别的API:PyTorch提供了许多高级别的API(如nn.GRU、nn.LSTM),它们已经针对循环依赖问题进行了优化。尝试使用这些API来构建模型,可能能够避免出现该错误。
  3. 检查模型结构:仔细检查模型结构,确保没有出现意外的循环依赖。尤其是在自定义模型时,需要特别留意。

总结起来,解决“尝试再次向后遍历图形”错误的方法包括使用截断的反向传播、使用高级别的API或者仔细检查模型结构。这样可以消除循环依赖,使训练过程能够正常进行。

相关链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

PyTorch 深度学习实用指南:1~5

向后遍历自动找到遍历图直到根节点的路径,并在向后遍历时计算梯度。 尽管这是一个革命性的想法,但是产品开发社区并未接受 PyTorch,就像他们不能接受遵循类似实现的其他框架一样。...PyTorch 是基于反向模式自动微分而构建的,因此所有节点都将与它们一起保留操作信息,直到控件到达叶节点为止。 然后,反向传播从叶节点开始并向后遍历。...磁带或内存的写操作可忽略不计,PyTorch 通过将操作写到磁带上并在向后遍历后销毁磁带来利用每次正向遍历中的行为。...PyTorch 带有nn模块中内置的所有流行损失函数。 损失函数接受对数和实际值,并在其上应用损失函数以查找损失得分。 此过程给出了错误率,该错误率代表了模型预测的好坏。...存储库中的可用代码(带有nn.Sequential包装器)将生成类似“图 4.10a”的图形,而没有使用Sequential包装器构建的层将生成类似“图 4.10b”的图形

2K10

Pytorch 1.1.0驾到!小升级大变动,易用性更强,支持自定义RNN

用TorchScript优化CUDA递归神经网络 Pytorch添加的一个新特性是更好地支持带有TorchScript (PyTorch JIT)的快速自定义递归神经网络(fastrnns)。...RNN是一种流行的模型,在各种NLP任务上都表现出了良好的性能。PyTorch可以实现许多最流行的变体,例如Elman RNN、GRU和LSTM,以及多层和双向变体。...许多用户已经转向使用标准PyTorch运算符编写自定义实现,但是这样的代码遭受高开销:大多数PyTorch操作在GPU上启动至少一个内核,并且RNN由于其重复性质通常运行许多操作。...JIT最重要的是将python程序编译为PyTorch JIT IR,这是一个用于对程序图形结构进行建模的中间表示。...因此,将其应用到PyTorch JIT,但是使用了一种新的自动微分(AD)机制,该机制在IR级别上工作。JIT自动微分将把正向图分割成符号可微分的子图,并为这些子图生成向后节点。

1.2K20
  • PyTorch专栏(六): 混合前端的seq2seq模型部署

    PyTorch之文本篇 聊天机器人教程 使用字符RNN生成名字 使用字符RNN进行名字分类 在深度学习和NLP中使用Pytorch 使用Sequence2Sequence网络和注意力进行翻译 第六章...此外,为了能够进行评估,我们必须提供一个处理字符串输入的工具。normalizeString函数将字符串中的所有字符转换为小写,并删除所有非字母字符。...我们将这个模块初始化为双向的,这意味着我们有两个独立的GRUs:一个按时间顺序遍历序列,另一个按相反顺序遍历序列。 我们最终返回这两个GRUs输出的和。...要使用带有PyTorch RNN模块的批量填充,我们必须把转发forward密令在 调用torch.nn.utils.rnn.pack_padded_sequence和torch.nn.utils.rnn.pad_packed_sequence...因此,在初始化该模型并加载其参数之后,我们可以再次使用跟踪tracing将其转换为Torch脚本。

    1.8K20

    使用Pytorch训练解决神经网络的技巧(附代码)

    记住,你很可能需要再次更新学习率。如果将批尺寸增加一倍,最好将学习速度也提高一倍。 4....保留计算图 撑爆内存很简单,只要不释放指向计算图形的指针,比如……为记录日志保存loss。...尝试用其他方式优化代码,或者在用这种方法之前先跨GPUs分配代码。 此外还要注意进行强制GPUs同步的操作。例如清除内存缓存。...Lightning特别注意避免此类错误。 7. 16位混合精度训练 16位精度可以有效地削减一半的内存占用。大多数模型都是用32位精度数进行训练的。...比如,带有编码器和解码器的Sequence to Sequence模型在生成输出时可能会占用20gb的内存。在这种情况下,我们希望把编码器和解码器放在单独的GPU上。

    1.8K40

    Pytorch 训练快速神经网络的 9 个技巧

    记住,你很可能需要再次更新学习率。如果将批尺寸增加一倍,最好将学习速度也提高一倍。 4....保留计算图 撑爆内存很简单,只要不释放指向计算图形的指针,比如……为记录日志保存loss。...尝试用其他方式优化代码,或者在用这种方法之前先跨GPUs分配代码。 此外还要注意进行强制GPUs同步的操作。例如清除内存缓存。...Lightning特别注意避免此类错误。 7. 16位精度 16位精度可以有效地削减一半的内存占用。大多数模型都是用32位精度数进行训练的。然而最近的研究发现,使用16位精度,模型也可以很好地工作。...比如,带有编码器和解码器的Sequence to Sequence模型在生成输出时可能会占用20gb的内存。在这种情况下,我们希望把编码器和解码器放在单独的GPU上。

    78940

    9个技巧让你的PyTorch模型训练变得飞快!

    记住,你可能需要再次更新你的学习率。一个好的经验法则是,如果batch size加倍,那么学习率就加倍。 4. 梯度累加 ?...我们需要以batch size为8执行16个前向传播和向后传播,然后再执行一次优化步骤。...Lightning会特别注意不去犯这类错误。 7. 16-bit 精度 16bit精度是将内存占用减半的惊人技术。大多数模型使用32bit精度数字进行训练。...例如,带有编码器和解码器的序列到序列模型在生成输出时可能会占用20GB RAM。在本例中,我们希望将编码器和解码器放在独立的GPU上。...现在,需要关注在使用大的batch size的时候如何在多个GPUs上分布并最小化延迟(比如,我可能会尝试着在多个gpu上使用8000 +的有效batch size)。

    1.2K51

    加速 PyTorch 模型训练的 9 个技巧

    记住,你可能需要再次更新你的学习率。一个好的经验法则是,如果batch size加倍,那么学习率就加倍。 4....我们需要以batch size为8执行16个前向传播和向后传播,然后再执行一次优化步骤。...Lightning会特别注意不去犯这类错误。 7. 16-bit 精度 16bit精度是将内存占用减半的惊人技术。大多数模型使用32bit精度数字进行训练。...例如,带有编码器和解码器的序列到序列模型在生成输出时可能会占用20GB RAM。在本例中,我们希望将编码器和解码器放在独立的GPU上。...现在,需要关注在使用大的batch size的时候如何在多个GPUs上分布并最小化延迟(比如,我可能会尝试着在多个gpu上使用8000 +的有效batch size)。

    93320

    fast.ai 深度学习笔记(三)

    我们以后会学到更多关于这个,但事实证明你可以有第二个向后运行的 RNN。这个想法是它会更好地找到向后的关系——它被称为“双向 RNN”。...对于有趣的作业,尝试编写自己的nn.RNN“JeremysRNN”,而不查看 PyTorch 源代码。...因此,如果您遇到 CUDA 内存不足错误,您需要减少其中一个。 如果您的训练不稳定(例如,您的损失突然飙升到 NaN),那么您可以尝试减少您的bptt,因为您的层较少,梯度不会爆炸。...如果 SGD 决定要使矩阵整体变大/变小,那么做(x=self.means) / self.stds是不够的,因为 SGD 会撤消它,并尝试在下一个小批次中再次执行。...残差是迄今为止我们计算的错误。这意味着尝试找到一组卷积权重,试图填补我们偏离的量。换句话说,我们有一个输入,我们有一个函数试图预测错误(即我们偏离的量)。

    47610

    MXNet称霸CNN、RNN和情感分析,TensorFlow仅擅长推断特征提取

    例如,使用Caffe2在Python中创建CNN,然后在Julia中使用KNet复制这个网络,或者也可以在PyTorch尝试创建一个RNN并在Tensorflow中复制它。...在这里,我们直接忽略冲突的默认值的条件下,尝试采用最高级别的API,以便在框架之间进行更容易的比较。...在可能的情况下,我会尝试使用cudnn的方式来优化RNN(由CUDNN = True开关来控制),因为我们有一个可以轻易降低到CuDNN水平的简单的RNN。...在PyTorch中,这是默认启用的。但是对于MXNet,我无法找到这样的RNN函数,而是使用稍慢的Fused RNN函数。...1、上面的例子(Keras除外),为了便于比较,尝试使用相同级别的API,因此都使用相同的生成器函数。 对于MXNet和CNTK,我尝试了一个更高级别的API,在这里我使用了框架的训练生成器函数。

    1.2K30

    教程 | 如何快速训练免费的文本生成神经网络

    /2015/05/21/rnn-effectiveness/),它通过训练使循环神经网络根据之前的 n 个字符预测序列中的下一个字符。...rnn_bidirectional 控制循环神经网络是否是双向的,也就是说,它同时向前和向后处理一个字符(如果文本遵循特定的规则,如莎士比亚的字符标题,这种方法会十分有效)。...下面我们尝试在一个新的文本数据集上对参数进行更多的调整。 用 Reddit 网站的数据进行单词级别的文本生成 你可能会问「如何获取文本数据」。...从好的方面说,只使用单词可以防止拼写错误。而且由于它一次预测多个字符,max_length 可以按比例减小,这大大加快了训练速度。...此外,该模型的权重比字符级别的模型大得多,因为单词级别的模型需要存储每个单词的嵌入(取决于 max_word 参数,该参数在单词级模型中的缺省值为 10,000,而字符级模型中的词汇表大小为 200-300

    97450

    Pytorch的API总览

    此外,PyTorch还支持量化感知训练,该训练使用伪量化模块对前向和后向传递中的量化错误进行建模。注意,整个计算都是在浮点数中进行的。...提供了更高级别的api,它们结合了将FP32模型转换为较低精度且精度损失最小的典型工作流。torch.random伪随机数发生器。...它总结了使用Python分析器和PyTorch的autograd分析器运行脚本的情况。torch.utils.checkpoint检查点是通过在向后期间为每个检查点段重新运行前向段来实现的。...因此,如果在run_fn中将张量移动到一个新设备(“新”意味着不属于[当前设备+张量参数的设备]的集合)中,与非检查点遍历相比,确定性输出永远无法得到保证。...对于PyTorch模型和张量以及咖啡因2网络和blobs,都支持标量、图像、直方图、图形和嵌入可视化。Type Infotorch的数值特性。

    2.8K10

    【专知-PyTorch手把手深度学习教程07】NLP-基于字符RNN的姓名分类

    值国庆佳节,专知特别推出独家特刊-来自中科院自动化所专知小组博士生huaiwen和Mandy创作的-PyTorch教程学习系列, 今日带来第五篇- Practical PyTorch: 用字符RNN进行名称分类 本文翻译自spro/practical-pytorch...字符RNN将字作为一系列字符读入 - 在每个步骤输出预测和“隐藏状态”,将其先前的隐藏状态馈送到每个下一步骤。我们将最终预测作为输出,即该词属于哪一类。...这些层保持隐藏的状态和渐变,现在完全由图形本身处理。这意味着你可以以非常“纯净”的方式实施RNN,作为正常的前馈层。...明天继续推出:专知PyTorch深度学习教程系列,敬请关注。

    1.6K131

    PyTorch和Tensorflow版本更新点

    3. op级别和Python源代码行级别的运行分析器(Runtime profiler)使用run -p命令。 •统计分布库tf.distributions的初始版本。...•添加标签常量,gpu,以显示基于GPU支持的图形。 •saved_model.utils现在显然是支持SparseTensors的。...等 •torch 和 autograd的新应用:矩阵相乘、逆矩阵等 •更容易调试,更好的错误信息 •Bug修复 •重要的破损和解决方法 张量广播(numpy样式) 简而言之,如果PyTorch操作支持广播...•你可以对梯度进行操作,并向后调用()。...•改善使用CuDNN RNN时的内存使用。 •用负的padding将ZeroPad2d向后修复。 •添加虚拟tensor.data属性,为用户提供可解释的错误消息。 •修复Python3的原位划分。

    2.6K50

    终结1.x时代,PyTorch 2.0来了!100%向后兼容,一行代码将训练提速76%

    其次,PyTorch 2.0 是 100% 向后兼容的:代码库一样,API 一样,写模型的方式也一样。...此外,PyTorch 2.0 提供了相同的 eager-mode 开发和用户体验,同时从根本上改变和增强了 PyTorch 在编译器级别的运行方式。...torch.compile 是一个完全附加的(可选的)特性,因此 PyTorch 2.0 是 100% 向后兼容的。...这些算子适用于已经在 ATen 级别集成的后端或没有编译功能的后端(无法从较低级别的算子集(如 Prim ops)恢复性能)。...它将整个程序编译成一个图,或者给出一个错误提示,解释为什么它不能这样做。大多数用户不需要使用这种模式。如果你非常注重性能,那么你可以尝试使用它。 「backend 」指定使用哪个编译器后端。

    1.8K20

    PyTorch专栏(十二):一文综述图像对抗算法

    PyTorch之文本篇 聊天机器人教程 使用字符RNN生成名字 使用字符RNN进行名字分类 在深度学习和NLP中使用Pytorch 使用Sequence2Sequence网络和注意力进行翻译 第六章...还有几种类型的目标,包括错误分类和源/目标错误分类。错误分类的目标意味着攻击者只希望输出分类错误,但不关心新分类是什么。...注意,带有CUDA的GPU对本教程并不重要,因为本教程使用CPU不会花费太多时间。...model, device, test_loader, epsilon ): # 精度计数器 correct = 0 adv_examples = [] # 循环遍历测试集中的所有示例...尝试从 NIPS 2017竞赛中实施不同的攻击,并了解它与 FGSM 的区别。然后,尝试从您自己的攻击中保护模型。

    1.1K20

    对比PyTorch和TensorFlow的自动差异和动态子类化模型

    这篇简短的文章重点介绍如何在PyTorch 1.x和TensorFlow 2.x中分别使用带有模块/模型API的动态子类化模型,以及这些框架在训练循环中如何使用AutoDiff获得损失的梯度并从头开始实现...生成噪声的线性数据 为了专注于自动差异/自动渐变功能的核心,我们将使用最简单的模型,即线性回归模型,然后我们将首先使用numpy生成一些线性数据,以添加随机级别的噪声。...唯一值得注意的区别是,PyTorch明确地使用Parameter对象定义权重和要由图形“捕获”的偏置张量,而TF似乎在这里更“神奇”,而是自动捕获用于图形的参数。...无论如何,两个框架都能够从此类定义和执行方法(call或 forward ),参数和图形定义中提取信息,以便向前执行图形执行,并且正如我们将看到的那样,通过自动可微分获得梯度功能,以便能够执行反向传播。...此处的最后一个微小区别是,当PyTorch向后传播中更新权重和偏差参数时,以更隐蔽和“魔术”的方式实现自动差异/自动graf时,我们需要确保不要继续让PyTorch从最后一次更新操作中提取grad,这次明确调用

    1.2K20

    Google | 用神经网络作画

    该软件称为Sketch-RNN,是一个简单易用的网络应用程序。谷歌的想法很简单:先选择一个已经存在的对象,开始绘制,软件会尝试找到自动画好它的最佳方法。...一旦你开始绘制一个对象,sketch-rnn就会根据落笔的地方产生很多可能的方法来继续绘制这个对象 。你可以尝试运行文章开头的演示Demo。 在上述演示中,根据指示,您开始绘制特定对象。...一旦你停止涂鸦,我们的神经网络将接管作画并尝试猜测你的涂鸦的其余部分。之后您可以再次接管绘画并继续上述过程。我们训练了大约100种模型,您可以从中选择任意一种进行实验。...预计的结果中有的可能是意料之中的,有的是奇怪的、出乎意料的,也有的是可怕的或是完全错误的。...https://magenta.tensorflow.org/assets/sketch_rnn_demo/interp.html 除了预测不完整的图形的其余部分之外,sketch-rnn还可以从一个图形变换到另一个图形

    54420

    【Github 6481 颗星】牛津大学 & DeepMind 2017 深度 NLP 课程

    TED Talk 语料库中的每个谈话都带有开放的标签,包括“技术”、“娱乐”和“设计”。虽然有些演讲涉及的内容不止一个标签,但由大约一半的演讲都没有被标记!...练习3:用 RNN 实现文本分类 在这个实践,你可以选择探索 RNN 的两个应用之一:文本分类或语言建模(欢迎两个都尝试)。...3、尝试不同的 RNN 架构,例如简单的 Elman RNN 或 GRU 或 LSTM。哪些最适合? 4、如果使用双向 LSTM(即图中的虚线箭头)会得到什么结果?...3、不将文档建模为词序列,而是将文档建模为字符序列。每个词的困惑度在这两个模型之间是否可比?在字符级别建模文本有什么好处?有什么缺点?...4、尝试使用 RNN 的不同定义的变体模型(如LSTM,GRU,简单 Elman RNN),困惑度如何? 5、在文本分类中,建议使用双向 RNN。使用双向RNN进行语言建模任务可行吗?为什么?

    87170
    领券