Поскольку у вас есть вывод "Shape of conv: (14, 14, 512)", и вы пометили свой вопрос "tenorsflow", я бы предположил, что вы не используете бэкэнд Theano и имеет "image_data_format" Существо "channels_last ".Я не использовал Theano сам, но на основании моего поиска в бэкэнде Thenao по умолчанию может быть «channel_first».Поэтому при циклическом просмотре вывода слоя:
for i in range(len(convolutions)):
ax = fig.add_subplot(n,n,i+1)
ax.imshow(convolutions[i], cmap='viridis')
На самом деле вы рисуете 14 изображений, каждое из которых имеет размер 14x512, а не 512 изображений, каждый из которых имеет размер 14x14 (что, я полагаю, является тем, что вам нужно).
Простое (что означает, что вы можете использовать функцию, которую вы уже написали) - это установить "image_data_format" "channel_first", добавив K.set_image_data_format('channels_first')
в верхнюю часть вашего блокнота / скрипта.Однако это исправление может конфликтовать с другими вашими кодами.В этом случае вы можете переписать вашу функцию визуализации слоя.Вот пример, который работает с https://github.com/keras-team/keras/blob/master/examples/mnist_cnn.py
import matplotlib.pyplot as plt
import numpy as np
def visualize_layer(model, layer, input, train_mode=False):
get_layer_output = K.function([model.input, K.learning_phase()],
[layer.output])
layer_output = get_layer_output([input, int(train_mode)])[0]
print('Shape of {} layer output: {}'.format(layer, layer_output.shape))
for i, sample in enumerate(layer_output):
n_img = sample.shape[-1]
img_row = int(np.ceil(np.sqrt(n_img)))
fig = plt.figure()
for j in range(n_img):
ax = fig.add_subplot(img_row, img_row, j+1)
ax.imshow(sample[:, :, j], cmap='gray')
fig.savefig('sample_{}.png'.format(i))
visualize_layer(model, model.layers[1], [x_train[0]])