Python - valueerror: слишком много значений для распаковки (ожидается 2) 2d-массива

Я пытаюсь вывести карту характеристик из выходных данных моей CNN. Полный код можно найти здесь.

Когда я пытаюсь запустить функцию ниже.

import matplotlib.pyplot as plt
import matplotlib.colors as cm

def plot_filters(layer, x, y):

filters = layer.get_weights()
fig = plt.figure()

for j in range(len(filters)):
    ax = fig.add_subplot(y, x, j+1)
    ax.matshow(filters[j][0], cmap = cm.binary)
    plt.xticks(np.array([]))
    plt.yticks(np.array([]))

plt.tight_layout()

Я получаю следующий TraceBack:

Traceback (most recent call last):
File "PATH\Code\CNN.py", line 85, in <module>
plot_filters(model.layers[0], 8, 4)
File "PATH\Code\CNN.py", line 21, in plot_filters
ax.matshow(filters[j][0], cmap = plt.cm.binary)
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64     \lib\site-packages\matplotlib\axes\_axes.py", line 7841, in matshow
nr, nc = Z.shape
ValueError: too many values to unpack (expected 2)

Я запустил print(filters[j][0].shape), который выводит (3, 1, 32) Изображения в моем наборе данных имеют размер 20x20x1, а ниже - фрагмент резюме моей модели.

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 9, 9, 32)          320       
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 9, 9, 32)          0         
_________________________________________________________________

Любая помощь о том, как я могу показать карты функций, будет оценена по достоинству!

Большое спасибо!

Если print(filters[j][0].shape) возвращает кортеж с 3 элементами, вам нужно сохранить каждый элемент в переменной, но вы используете только две переменные.

user2556381 31.10.2018 12:37

@AaronGarton, можешь подробнее рассказать о том, что ты имеешь в виду?

The BrownBatman 31.10.2018 12:50

Matshow может строить 2D-массивы. (3, 1, 32) - это 3D. Вы не можете построить трехмерный массив с помощью matshow.

ImportanceOfBeingErnest 31.10.2018 12:54

print выводит (3, 1, 32), что означает, что это двумерный массив. Вы пытаетесь передать трехмерный массив функции, которая вызывает двумерный массив. См. matplotlib.org/api/_as_gen/matplotlib.pyplot.matshow.html

user2556381 31.10.2018 12:56

Есть идеи, как это сделать? пытался в течение пары часов и, похоже, не смог пройти слишком много значений или слишком мало значений.

The BrownBatman 31.10.2018 15:29

@AaronGarton спасибо за вашу помощь! понял это :) (мне потребовалось некоторое время, ха-ха)

The BrownBatman 03.11.2018 06:11
0
6
913
0

Другие вопросы по теме