как сохранить фильтры моделей в керасе - PullRequest
0 голосов
/ 04 июня 2018

Я визуализирую фильтры (ядра) модели 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') для сохранения цифр.Но это не работает в этом случае, может быть потому, что функция nice_.Пожалуйста, помогите, какую команду я должен написать, чтобы сохранить рисунок, используя команду не вручную.Потому что, если есть большая сеть, много ручной работы.

1 Ответ

0 голосов
/ 06 июня 2018

У меня была похожая проблема при попытке сохранить цифры в Керасе с plt.savefig.Это всегда приводило к пустым изображениям.

Я так и не узнал, почему это произошло, если я правильно помню, это произошло только при использовании многопроцессорной обработки, но я могу ошибаться.

Я решил это с помощьюнеинтерактивный бэкэнд, который в любом случае должен быть правильным выбором, если вы никогда не будете отображать их с помощью plt.show().

. В верхней части импорта matplotlib добавьте

import matplotlib as mpl
mpl.use('Agg')

ТакжеЕсли в какой-то момент вы сохраняете много таких изображений, matplotlib будет жаловаться на слишком много открытых фигур.Вы должны добавлять plt.close() звонок после каждого plt.savefig.

Извините за чисто анекдотичный ответ, возможно, кто-то с лучшим пониманием прокомментирует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...