什么是符号张量,为什么它们会抛出“使用 `steps_per_epoch` 参数”错误?

Posted

技术标签:

【中文标题】什么是符号张量,为什么它们会抛出“使用 `steps_per_epoch` 参数”错误?【英文标题】:What are symbolic tensors, and why do they throw "use `steps_per_epoch` argument" error? 【发布时间】:2019-12-16 11:10:27 【问题描述】:

注意:我已经解决了我的问题,但我发布了这个问题以防其他人也有它,因为我不明白我是如何解决它的。

我正在使用 Tensorflow 后端在 Keras 中构建命名实体分类器(序列标签模型)。当我尝试拟合模型时,我得到了这个错误(令人惊讶的是,它只返回 4 个 Google 结果):

"If your data is in the form of symbolic tensors, you should specify the `steps_per_epoch` argument (instead of the batch_size argument, because symbolic tensors are expected to produce batches of input data)."

This *** post 讨论了这个问题,有人向操作员建议:

Fit() 使用的数据张量之一是符号张量。 one hot label 函数返回一个符号张量。尝试类似:

label_onehot = tf.Session().run(K.one_hot(label, 5))

然后我在this (not related) site阅读:

Wolfram 系统还具有强大的算法来处理表示 [...] 数组的表达式的代数组合。这些表达式称为符号数组或符号张量。

这两个来源让我认为符号数组(至少在 TensorFlow 中)可能更像是尚未计算的函数数组,而不是实际值。

所以,使用%whos 查看我的所有变量,我看到我的XY 数据是张量(而不是我通常用于模型的数组)。数据/信息列对它们有相当复杂的描述,但是一旦我解决了我的问题,我就丢失了它,我无法弄清楚如何回到出现错误的状态。

无论如何,我知道我通过更改我的数据预处理解决了这个问题,以便Xy 数据(即X_trainy_train)属于<class 'numpy.ndarray'> 类型和维度(num sents, max len) 用于X_train 和 (num_sents, max len, 1) 用于y_train(1 是必要的,因为我的最后一层需要 3D 输入)。现在模型工作正常。但我仍然想知道,这些符号张量是什么,以及如何/为什么使用每个时期的步数而不是批量大小应该有帮助?我最初也尝试过,但没有运气。

【问题讨论】:

应该包含产生问题的代码,因为它为您的问题提供了上下文 嗨,Matias,我知道,我很抱歉,但正如我所提到的,我无法将其恢复到错误状态。如果有几个人告诉我应该删除帖子,我可以删除该帖子,但我希望有人可以在没有代码的情况下大致知道什么是符号张量。 就上下文而言,我的意思是例如您当前的 fit 调用以及产生 x 和 y 值的代码,因为符号张量有很多种,这将有助于回答您的问题。 是的,我明白了,但我不再得到符号张量,我的变量现在都不是张量,我不知道以前产生张量的错误在哪里。所以我的问题通常是“张量流中的符号张量是什么”,我想我会包括我解决原始问题的方式,以防它间接帮助其他人。但我想我会删除帖子。抱歉,我知道你想帮忙。 【参考方案1】:

这可以通过使用张量的 eval() 或 numpy() 函数来解决。

检查: How can I convert a tensor into a numpy array in TensorFlow?

【讨论】:

以上是关于什么是符号张量,为什么它们会抛出“使用 `steps_per_epoch` 参数”错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 XCode 会抛出重复的符号错误?

为啥geoip会抛出异常?

为啥有时会抛出 FileNotFoundException

为啥完成Activity会抛出NPE?

什么情况下等待取消的任务会抛出TaskCanceledException?

如果元素是重复的,为什么Set.of()会抛出IllegalArgumentException?