TypeError:TensorF中的/:“Dimension”和“float”的操作数类型不受支持

2024-07-05 12:23:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个在Tensorflow中实现深度学习的代码。我使用Keras模块

self.n_clusters = 10
self.alpha = 0.01
clustering_layer = ClusteringLayer(self.n_clusters, alpha=self.alpha, name='clustering')(hidden)

我的错误主要是来自上面的,所以我就附上了。在

它给出了以下错误:

^{pr2}$

第118行是我的代码位置。错误似乎发生在tensorflow包中。它给了我TypeError: unsupported operand type(s) for /: 'Dimension' and 'float'。我尝试了python 2.7和{},但问题相同。在

如何处理这种情况?在

一个非常相似的情况是在github中,它的错误可以在它的代码中解决,但是我的错误似乎发生在init_ops.pyc


Tags: 模块代码nameselfalphalayertensorflow错误
2条回答

我遇到了一个非常类似的问题我有一个定制的Layer,它

  • 当它在keras中时工作非常好(keras.version=2.24)使用tf后端(tf.version=1.14条)
  • 当我切换到tf.keras时,引发与问题中描述的相同的错误消息(tf.version=1.14条)

@Alexandre Passos的建议很管用,但我花了一段时间才弄明白他到底是什么意思。一、 因此,请在下面分享我的经验,以帮助未来的朋友。在

下面是一个定制层的示例


class CustomizedLayer(Layer) :
  def __init__(self, num_feats, **kwargs) :
    self.num_feats = num_feats
    super(CustomizedLayer, self).__init__(**kwargs)
  def build(self, input_shape) :
    weight_shape = (input_shape[-1], self.num_feats) # <  - problem
    self.weight = self.add_weight(shape=weight_shape, 
                                 ...)
    super(CustomizedLayer, self).build(input_shape)
  def call(self, inputs) :
    ...

问题发生在tf.keras,因为传递的input_shapetf.Dimension类型,而不是{}类型,这是{}所必需的,也是使用keras时传递的类型。在

因此,同一层定义在keras中工作,而在tf.keras中不起作用。在

因此,您需要做的就是将tf.Dimension对象转换为int,即将weight_shape的行重写为

^{pr2}$

这里的问题似乎是ClusteringLayer正在传递一个tf.尺寸对象作为簇数,用于初始化权重。改为使用int(self.n_clusters)来绕过维度对象问题。在

相关问题 更多 >