python - 显示图像时尺寸无效

标签 python matplotlib keras neural-network conv-neural-network

我一直在尝试检索VGG16的隐藏层,并在Keras中显示特征图。我想做的是获取 block1_conv1 特征图并显示它。但不幸的是,我收到以下错误:

TypeError: Invalid dimensions for image data

请找到下面的代码:

from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input
from keras.models import Model
import matplotlib.pyplot as plt
import numpy as np
from keras import backend as K


img_path = "bombiliki.jpeg"
img = image.load_img (img_path, target_size=(224,224))
imgArr = image.img_to_array (img)
imgArr = np.expand_dims(imgArr, axis=0)
img = preprocess_input (imgArr)


model = VGG16(weights='imagenet', include_top=False)
layer_name = 'block1_conv1'

interMediateOutput = Model(inputs=model.inputs, outputs=model.get_layer(layer_name).output)
features = interMediateOutput.predict (img)
print ("Shape of the feature is ", features.shape)
pic = features[:,:,:,1]
print ("pic shape ", pic.shape)
data = np.asarray(pic)
print ("Data Dimension is ", data.ndim)

plt.imshow (pic)
plt.show()

输出:

('Shape of the feature is ', (1, 224, 224, 64))
('pic shape ', (1, 224, 224))
('Data Dimension is ', 3)
Traceback (most recent call last):
  File "vgg16.py", line 28, in <module>
    plt.imshow (pic)
  File "/home/navals/anaconda2/envs/musarni/lib/python2.7/site-packages/matplotlib/pyplot.py", line 3205, in imshow
    **kwargs)
  File "/home/navals/anaconda2/envs/musarni/lib/python2.7/site-packages/matplotlib/__init__.py", line 1855, in inner
    return func(ax, *args, **kwargs)
  File "/home/navals/anaconda2/envs/musarni/lib/python2.7/site-packages/matplotlib/axes/_axes.py", line 5487, in imshow
    im.set_data(X)
  File "/home/navals/anaconda2/envs/musarni/lib/python2.7/site-packages/matplotlib/image.py", line 653, in set_data
    raise TypeError("Invalid dimensions for image data")
TypeError: Invalid dimensions for image data

最佳答案

predict 方法将返回形状 (n_samples, model_output_shape...) 的输出。因此,如果您给它一个样本,要获得给定样本的预测,您必须执行以下操作:

pic = features[0]

特别是在您的示例中,如果您想选择特定过滤器的输出,则需要将其索引指定为第四轴:

pic = features[0, :, :, desired_filter_index]

你可以很容易地绘制出它们:

plt.imshow(pic)

关于python - 显示图像时尺寸无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53651138/

相关文章:

python - 分组和拆分以避免泄漏

python - 在 Plone 4 的文件夹中限制每个成员一个内容项

python - 如何按照 python 中 matplotlib 中收到的顺序对条形进行排序?

python - scikit-learn 中的accuracy_score 与 Keras 中的accuracy 之间的区别

python - 在 KerasRegressor 上使用交叉验证时,如何获取不同拟合的历史记录?

python - 为什么 python list 将每个字符存储在 BeautifulSoup 标签中?

python - 如何在 matplotlib 图形上绘制框架

python - Matplotlib 到 Django 模板

python - 访问内层的输出值

Python - 无重复数字的 5 位随机数生成器