我使用here中的代码可视化cnn模型过滤器(内核),如下所示:
from mpl_toolkits.axes_grid1 import make_axes_locatable
def nice_imshow(ax, data, vmin=None, vmax=None, cmap=None):
"""Wrapper around pl.imshow"""
if cmap is None:
cmap = cm.jet
if vmin is None:
vmin = data.min()
if vmax is None:
vmax = data.max()
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="5%", pad=0.05)
im = ax.imshow(data, vmin=vmin, vmax=vmax, interpolation='nearest', cmap=cmap)
pl.colorbar(im, cax=cax)
# pl.savefig("featuremaps--{}".format(layer_num) + '.jpg')
import numpy.ma as ma
def make_mosaic(imgs, nrows, ncols, border=1):
"""
Given a set of images with all the same shape, makes a
mosaic with nrows and ncols
"""
nimgs = imgs.shape[0]
imshape = imgs.shape[1:]
mosaic = ma.masked_all((nrows * imshape[0] + (nrows - 1) * border,
ncols * imshape[1] + (ncols - 1) * border),
dtype=np.float32)
paddedh = imshape[0] + border
paddedw = imshape[1] + border
for i in range(nimgs):
row = int(np.floor(i / ncols))
col = i % ncols
mosaic[row * paddedh:row * paddedh + imshape[0],
col * paddedw:col * paddedw + imshape[1]] = imgs[i]
return mosaic
# Visualize weights
W=model.layers[8].get_weights()[0][:,:,0,:]
W=np.swapaxes(W,0,2)
W = np.squeeze(W)
print("W shape : ", W.shape)
pl.figure(figsize=(15, 15))
pl.title('conv1 weights')
nice_imshow(pl.gca(), make_mosaic(W, 8, 8), cmap=cm.binary)
我想保存图像。通常我们使用fig.savefig("featuremaps-kernel-{}".format(layer_num) + '.jpg')
来保存数字。但在这种情况下它不起作用,可能是因为功能很好。请帮助什么命令,我必须写保存数字使用命令,而不是手动。因为如果有一个大的网络,就需要大量的手工工作。你知道吗
我在用
plt.savefig
保存Keras中的数字时遇到了类似的问题。 它总是导致空白图像。你知道吗我从来没有真正找出它发生的原因,如果我记得正确的话,它只发生在使用多重处理时,但我可能是错的。你知道吗
我用一个非交互式的后端解决了这个问题,如果你永远不会用
plt.show()
来显示它们的话,这应该是一个正确的选择。你知道吗在matplotlib导入的顶部添加
另外,如果您在某个时候保存了许多这样的图像,matplotlib会抱怨打开的图形太多。您应该在每个
plt.savefig
之后添加一个plt.close()
调用。你知道吗抱歉,这纯粹是一个传闻性的回答,也许有人会有更好的见解评论。你知道吗
相关问题 更多 >
编程相关推荐