【问题标题】:What are symbolic tensors, and why do they throw "use `steps_per_epoch` argument" error?什么是符号张量,为什么它们会抛出“使用 `steps_per_epoch` 参数”错误?
【发布时间】: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 stackoverflow 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 值的代码,因为符号张量有很多种,这将有助于回答您的问题。
  • 是的,我明白了,但我不再得到符号张量,我的变量现在都不是张量,我不知道以前产生张量的错误在哪里。所以我的问题通常是“张量流中的符号张量是什么”,我想我会包括我解决原始问题的方式,以防它间接帮助其他人。但我想我会删除帖子。抱歉,我知道你想帮忙。

标签: python tensorflow keras tensor


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-08
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多