【发布时间】: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