Керас предварительно обучил форму цели ResNet50 - PullRequest
0 голосов
/ 20 марта 2019

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

ValueError: Ошибка при проверке цели: ожидалось, что conv2d_1 будет иметь форму (16, 16, 1), но получил массив с формой (512, 512, 1)

У меня есть две папки: изображения и маски.изображения RGB и маски в оттенках серого.Форма 512x512 для всех изображений.Я не могу понять, в какой части я делаю неправильно.

Любая помощь будет оценена.

from keras.applications.resnet50 import ResNet50
image_input=Input(shape=(512, 512, 3))
model = ResNet50(input_tensor=image_input,weights='imagenet',include_top=False)
x = model.output
x = Conv2D(1, (1,1), padding="same", activation="sigmoid")(x)
model = Model(inputs=model.input, outputs=x)
model.summary()

conv2d_1 (Conv2D)           (None, 16, 16, 1)    2049 activation_49[0][0]              

for layer in model.layers[:-1]:
    layer.trainable = False

for layer in model.layers[-1:]:
    layer.trainable = True
model.compile(optimizer=Adam(), loss='binary_crossentropy', metrics=['accuracy'])

1 Ответ

1 голос
/ 20 марта 2019

Ваша сеть выдает форму (16, 16, 1), но ваша y (цель) имеет форму (512, 512, 1)

Запустите следующее, чтобы увидеть это.

from keras.applications.resnet50 import ResNet50
from keras.layers import Input

image_input=Input(shape=(512, 512, 3))
model = ResNet50(input_tensor=image_input,weights='imagenet',include_top=False)
model.summary()

# Output shows that the ResNet50 network has output of shape (16,16,2048)

from keras.layers import Conv2D

conv2d = Conv2D(1, (1,1), padding="same", activation="sigmoid")
conv2d.compute_output_shape((None, 16, 16, 2048))

# Output shows the shape your network's output will have.

Либо ваш y, либо способ использования ResNet50 должен измениться. Прочтите о ResNet50, чтобы узнать, чего вам не хватает.

...