Keras InceptionV3 TypeError: unhashable тип: 'Размер' - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь реализовать модель, которая будет принимать изображения в градациях серого в качестве входных данных и возвращать числовое значение c в качестве выходных. Я использую InceptionV3 (обучение с нуля) в качестве экстрактора функций, а затем использую несколько плотных слоев для регрессии для последних этапов.

Вот мой код:

from keras.applications.inception_v3 import InceptionV3
from keras.layers import Input, GlobalAveragePooling2D, Dense, Dropout, Flatten, BatchNormalization
from keras.models import Model
from keras.metrics import mean_absolute_error
from keras.utils import plot_model

inputs = Input(shape=(256, 256, 1))
x = BatchNormalization()(inputs)
x = InceptionV3(include_top = False, weights = None, input_shape=inputs.shape[1:])(x)
x = BatchNormalization()(x)
x = GlobalAveragePooling2D()(x)
x = Dense(1000, activation = 'relu' )(x)
x = Dense(1000, activation = 'relu' )(x)
outputs = Dense(1, activation = 'linear' )(x)
model = Model(inputs=inputs, outputs=outputs)

model.compile(optimizer = 'adam', loss = 'mse', metrics = [mae])

model.summary()

Теперь я получаю эта ошибка, когда я запускаю код:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-36-50041eb640cc> in <module>()
      7 inputs = Input(shape=(256, 256, 1))
      8 x = BatchNormalization()(inputs)
----> 9 x = InceptionV3(include_top = False, weights = None, input_shape=inputs.shape[1:])(x)
     10 x = BatchNormalization()(x)
     11 x = GlobalAveragePooling2D()(x)

3 frames
/usr/local/lib/python3.6/dist-packages/keras_applications/imagenet_utils.py in _obtain_input_shape(input_shape, default_size, min_size, data_format, require_flatten, weights)
    273             default_shape = (input_shape[0], default_size, default_size)
    274         else:
--> 275             if input_shape[-1] not in {1, 3}:
    276                 warnings.warn(
    277                     'This model usually expects 1 or 3 input channels. '

TypeError: unhashable type: 'Dimension'

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

1 Ответ

0 голосов
/ 01 февраля 2020

inputs.shape - это не список, следовательно, он выдает ошибку. Это дает вам форму с типом tensorflow.python.framework.tensor_shape.TensorShape, который имеет список каждого измерения с типом Dimension

print(inputs.shape)
# output TensorShape([Dimension(None), Dimension(256), Dimension(256), Dimension(1)])

. Вы можете использовать as_list(), чтобы получить формы в виде списка:

# inputs.shape.as_list()
# output [None, 256, 256, 1]

x = InceptionV3(include_top = False, weights = None, input_shape=inputs.shape.as_list()[1:])(x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...