Python 损失函数的预计算和存储张量流图

Python 损失函数的预计算和存储张量流图,python,performance,tensorflow,rnn,loss-function,Python,Performance,Tensorflow,Rnn,Loss Function,我正在开发一个序列到序列的TensorFlow程序,该程序使用RNN预测大小为(BATCH\u size x L x 11)的张量。我有一个损失函数,它取(BATCH\u SIZE x L x 11)张量,并将其转换为另一个表示三维坐标的张量,其大小(BATCH\u SIZE x L'x 3),其中L'是L的函数 不幸的是,当我在后一个张量(L')上实现这个损失函数时,我的训练时间从9小时/历元猛增到300小时/历元。我相信问题在于为每个批次创建每个计算图-这使得一切都非常缓慢 有什么方法可以预

我正在开发一个序列到序列的TensorFlow程序,该程序使用RNN预测大小为
(BATCH\u size x L x 11)
的张量。我有一个损失函数,它取
(BATCH\u SIZE x L x 11)
张量,并将其转换为另一个表示三维坐标的张量,其大小
(BATCH\u SIZE x L'x 3)
,其中
L'
L
的函数

不幸的是,当我在后一个张量(
L'
)上实现这个损失函数时,我的训练时间从9小时/历元猛增到300小时/历元。我相信问题在于为每个批次创建每个计算图-这使得一切都非常缓慢

有什么方法可以预计算我的计算图的一部分以节省时间吗?建筑和区分似乎都要花很长时间。(请注意,图的这部分仅存在于损失函数中,不需要进行训练,因为我有一个从
L
空间到
L'
空间的数学映射)


多谢各位。关于如何在TF中加载预构建的子图,或者是否有更好的替代方案(例如,移动到支持动态批处理形状的PyTorch这样的后端),我将非常感谢您的任何建议。

您认为L'取决于L是什么意思?该图应仅在初始化时生成。您可能希望将样本填充到尽可能大的(L,L')。网络将处理它。该模型预测一个形状为
(批量大小x L x 11)
的张量T1。损失函数取张量T1,然后通过应用变换生成一组形状为
(批量大小x L'x 3)
的坐标T2,其中
L'
=
(3L+b)
。我认为T2的图要到运行时才能绘制出来,因为每个批次的大小不同,我使用TensorArrays来动态地解释这一点。的确,我可以尝试将样本填充到所有相同的大小,但这可能会极大地增加程序的内存需求。非常感谢您的反馈。您实际上不必将其填充保存。只需创建一个在运行时填充输入的输入。对于可变长度序列(例如文本序列),通常要做的是构建不同的图形,比如长度=5,10,15,30,并将数据填充到具有最接近和更高长度的图形中。我很确定在运行时绘制图表是对时间和资源的巨大浪费。我明白了。我的程序已经在运行时分批读取并填充输入。然而,正如您所提到的,我肯定想学习如何构建不同长度的图,然后根据批长度选择要使用的图。你能给我指一下正确的方向吗?这正是我发布这个问题时的想法,但我不知道如何实现它。是一个关于如何对可变长度序列进行分类的示例。我相信他们只使用一个图表,一个解决问题的方法可能是考虑他们的解决方案,并且仅仅为不同的长度创建不同的图形(比如2)。使用简单的if语句将(用于train和predict)馈送到正确的图形。