首页 > 解决方案 > TensorFlow 2 中 Densenet 密集块的 TypeError

问题描述

我正在尝试在 tensorflow 中实现 Densenet。我想使用子类化 API 重写这个版本的 DenseNet ,但是我收到了这个错误:

TypeError: Tensors in list passed to 'values' of 'ConcatV2' Op have types [float32, <NOT CONVERTIBLE TO TENSOR>] that don't all match.

所以我想问题出在我的 DenseBlock 中,我使用 Concat

class DenseBlock(Layer):

  def __init__(self, nb_layers, nb_filter, growth_rate, dropout_rate=None, grow_nb_filters=True, **kwargs):

    super(DenseBlock, self).__init__(**kwargs)
    self.nb_layers = nb_layers
    self.growth_rate =growth_rate
    self.nb_filter = nb_filter
    self.grow_nb_filters = grow_nb_filters
    self.conv_blocks = [ConvBlock(growth_rate, dropout_rate) for i in range(nb_layers)]

  def call(self, inputs):
    concat_feat = tf.cast(inputs, dtype=tf.float32)
    for conv in self.conv_blocks:

        x = conv
        concat_feat = tf.concat([concat_feat, x], -1)

        if self.grow_nb_filters:
            self.nb_filter += self.growth_rate

    return concat_feat, self.nb_filter

作为最后的手段,我尝试用 tf.keras.layer.concatenate() 替换,但出现 NoneType 错误。

我希望这不是重复的问题,但我只发现了与 LSTM 中的屏蔽相关的相同错误。这是我认为是错误的地方,但我也想提供我的笔记本以提供更多信息笔记本 提前感谢您的帮助

标签: pythonpython-3.xtensorflowkerastensorflow2.0

解决方案


推荐阅读