Python 如何在keras中保存模型过滤器

Python 如何在keras中保存模型过滤器,python,numpy,matplotlib,keras,Python,Numpy,Matplotlib,Keras,我使用来自的代码可视化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:

我使用来自的代码可视化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内核-{}”.format(layer_num)+'.jpg')
来保存图形。但在这种情况下它不起作用,可能是因为功能很好。请帮助我写什么命令,以保存数字使用命令,而不是手动。因为如果有大型网络,就需要大量的手工工作

我在尝试使用
plt.savefig
在Keras中保存图形时遇到了类似的问题。 它总是导致空白图像

我从来没有真正找到它发生的原因,如果我没有记错的话,它只是在使用多重处理时发生的,但我可能错了

我使用一个非交互式后端解决了这个问题,如果您永远不会使用
plt.show()
来显示它们,那么这应该是一个正确的选择

在matplotlib导入的顶部添加

import matplotlib as mpl
mpl.use('Agg')
此外,如果您在某个时候保存了许多这样的图像,matplotlib会抱怨打开的图形太多。您应该在每个
plt.savefig
之后添加一个
plt.close()
调用


很抱歉,这纯粹是一个轶事式的回答,也许有更具洞察力的人会发表评论。

如何
savefig
不起作用?你有空图像吗?错误?尝试使用无头后端,如
mpl.use('Agg')
和/或禁用带有
plt.ioff()
的交互模式。我尝试了您提到的所有选项,仍然得到空图像。
W
的形状是什么?有32个大小(2x2)
mpl.use('Agg')
适合我