# Carpeta donde guarda las imagenes de los filtros # save_dir = make_dirs_noreplace(os.path.join( # 'filtros', os.path.splitext(nombre_modelo)[0])) save_dir = os.path.join(carpeta, 'filtros') os.makedirs(save_dir) # Itero sobre todos los filtros de las capas convolutivas for capa_ind, nombre in enumerate(nombres): print('Corriendo capa ' + nombre) # Cantidad de filtros en esta capa cant_filtros = modelo.layers[capa_ind].output_shape[ 3] #cant de filtros # Una grilla donde meto las imagenes de cada filtro g = Grid(cant_filtros, fill_with=np.nan, trasponer=True) # Proceso los filtros y los meto en la grilla for filtro_ind in range(cant_filtros): channel_filter = generate_pattern(nombre, filtro_ind, modelo) channel_filter = np.squeeze(channel_filter) # channel_filter es la imagen en cuestión g.insert_image(channel_filter) # plt.imshow(g.grid) g.show() nombre = new_name( os.path.join(save_dir, 'filtros_{}.jpg'.format(nombre))) plt.savefig(nombre, bbox='tight', dpi=400) plt.close()
#normalizo la imagen im -= im.mean() im /= (im.std() + 1e-5) #por si tengo cero im *= desv #la llevo a 8 bits im *= 64 im += 128 im = np.clip(im, 0, 255).astype('uint8') #corta todo por fuera de la escala return im #%% activations = np.load('activations.npz') activations = [v for v in activations.values()] for layer_activation in activations: #zip simplemente me da dos iteradores n_features = layer_activation.shape[-1] #cant de filtros size = layer_activation.shape[ 1] #tamaño del filtro de la capa (es cuadrado) g = Grid(n_features, fill_with=0) for ch_image in range(n_features): channel_image = layer_activation[0, :, :, ch_image] g.insert_image(bitificar8(channel_image, 2)) g.show() # plt.title('{0}: {1}x{1}'.format(layer_name,size-1)) plt.grid(False)