【问题标题】:Convolution layer visualisation error (missing previous layer metadata).]卷积层可视化错误(缺少前一层元数据)。]
【发布时间】:2021-03-07 20:40:45
【问题描述】:

我正在尝试可视化卷积层输出,以了解模型如何从图像中学习。但是在可视化过程中,它显示错误如下。完美训练的模型,也为测试数据返回一个真实值,但无法可视化卷积层。

模型

model = tf.keras.models.Sequential([
    # first convolution
    tf.keras.layers.Conv2D(16, (3, 3), activation=tf.nn.relu, input_shape=(300, 300, 3)),
    tf.keras.layers.MaxPooling2D(2, 2),
    # second convolution
    tf.keras.layers.Conv2D(32, (3, 3), activation=tf.nn.relu),
    tf.keras.layers.MaxPooling2D(2, 2),
    # third convolution
    tf.keras.layers.Conv2D(64, (3, 3), activation=tf.nn.relu),
    tf.keras.layers.MaxPooling2D(2, 2),
    # fourth convolution
    tf.keras.layers.Conv2D(64, (3, 3), activation=tf.nn.relu),
    tf.keras.layers.MaxPooling2D(2, 2),
    # fifth convolution
    tf.keras.layers.Conv2D(64, (3, 3), activation=tf.nn.relu),
    tf.keras.layers.MaxPooling2D(2, 2),
    # flatten the results to feed into a DNN
    tf.keras.layers.Flatten(),
    # hidden layers
    tf.keras.layers.Dense(512, activation=tf.nn.relu),
    # output layer
    tf.keras.layers.Dense(1, activation=tf.nn.sigmoid)
])

可视化代码

for layer_name, feature_map in zip(layer_names, successive_feature_maps):
if len(feature_map.shape) == 4:
    # Just do this for the conv / max pool layers, not the fully-connected layers
    n_features = feature_map.shape[-1]  # number of features in feature map
    # The feature map has shape (1, size, size, n_features)
    size = feature_map.shape[1]
    # We will tile our images in this matrix
    display_grid = np.zeros((size, size * n_features))
    for i in range(n_features):
        # Postprocessor the feature to make it visually palatable
        x = feature_map[0, :, :, i]
        x -= x.mean()
        x /= x.std()
        x *= 64
        x += 128
        x = np.clip(x, 0, 255).astype('uint8')
        # We'll tile each filter into this big horizontal grid
        display_grid[:, i * size: (i + 1) * size] = x
        # Display the grid
    scale = 20. / n_features
    plt.figure(figsize=(scale * n_features, scale))
    plt.title(layer_name)
    plt.grid(False)
    plt.imshow(display_grid, aspect='auto', cmap='viridis')

错误如下:

Traceback(最近一次调用最后一次): 文件“dataVisualization.py”,第 51 行,在 可视化模型 = tf.keras.models.Model(输入=model.layers,输出=successive_outputs) _method_wrapper 中的文件“/home/vedantdave77/PycharmProjects/HorseVsHuman/venv/lib/python3.8/site-packages/tensorflow/python/training/tracking/base.py”,第 517 行 结果 = 方法(自我,*args,**kwargs) init 中的文件“/home/vedantdave77/PycharmProjects/HorseVsHuman/venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py”,第 120 行 self._init_graph_network(输入,输出) _method_wrapper 中的文件“/home/vedantdave77/PycharmProjects/HorseVsHuman/venv/lib/python3.8/site-packages/tensorflow/python/training/tracking/base.py”,第 517 行 结果 = 方法(自我,*args,**kwargs) _init_graph_network 中的文件“/home/vedantdave77/PycharmProjects/HorseVsHuman/venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py”,第 157 行 self._validate_graph_inputs_and_outputs() _validate_graph_inputs_and_outputs 中的文件“/home/vedantdave77/PycharmProjects/HorseVsHuman/venv/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py”,第 688 行 raise ValueError('输入张量到一个 ' + cls_name + ' ' + ValueError:函数的输入张量必须来自tf.keras.Input。收到:(缺少上一层元数据)。

如何解决?提前谢谢!

【问题讨论】:

    标签: python tensorflow keras deep-learning computer-vision


    【解决方案1】:

    在您的代码中:

    tf.keras.models.Model(inputs=model.layers, outputs=successive_outputs)

    正如错误所说,您必须将tf.keras.Input 传递给keras Model inputs 参数,而不是model.layers

    尝试类似:

    tf.keras.models.Model(inputs=model.inputs, outputs=model.layers)

    【讨论】:

      【解决方案2】:

      我将输入用作model.inputs,并将layer successive outputs 用作输出,它工作正常。谢谢@BEniamin H。

      代码更改:

      visualization_model = tf.keras.models.Model(inputs=model.inputs, outputs=successive_outputs)
      

      其中的连续输出...

      successive_outputs = [layer.output for layer in model.layers[1:]]
      

      【讨论】:

        猜你喜欢
        • 2018-12-25
        • 2019-05-17
        • 1970-01-01
        • 2017-01-09
        • 1970-01-01
        • 2021-08-16
        • 2021-11-09
        • 2018-07-26
        • 2016-05-07
        相关资源
        最近更新 更多