什么是符号张量,为什么它们会抛出“使用 `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
查看我的所有变量,我看到我的X
和Y
数据是张量(而不是我通常用于模型的数组)。数据/信息列对它们有相当复杂的描述,但是一旦我解决了我的问题,我就丢失了它,我无法弄清楚如何回到出现错误的状态。
无论如何,我知道我通过更改我的数据预处理解决了这个问题,以便X
和y
数据(即X_train
和y_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` 参数”错误?的主要内容,如果未能解决你的问题,请参考以下文章