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

时间:2019-08-08 17:13:57

标签: python tensorflow keras tensor

注意:我已经解决了我的问题,但是我正在发布问题,以防其他人也有此问题,因为我不知道如何解决。

我正在使用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()使用的

数据张量之一是符号张量。一个热标签函数返回一个符号张量。尝试类似的东西:

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

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

  

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

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

因此,使用%whos查看我的所有变量,我看到我的X和Y数据是张量(而不是像我通常在模型中使用的数组)。 “数据/信息”列对他们的描述非常复杂,但是一旦解决了问题,我就迷失了方向,我无法解决如何回到出现错误的状态。

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

1 个答案:

答案 0 :(得分:0)

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

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