Keras ValueError: Ошибка при проверке цели: ожидается, что плотность_5 будет иметь форму (1,), но получен массив с формой (0,) - PullRequest
0 голосов
/ 20 октября 2019

Я буду очень признателен, если кто-нибудь сможет мне помочь ... Я работал над этим несколько дней и смогу заставить его работать ...

вот ссылка, если кто-то хочет увидеть полнуюcode.

https://github.com/TheStoneMX/APTOS-2019/blob/master/notebooks/keras-multi-model-input-image-cropping-Copy2.ipynb

def create_base_model(MODEL, img_size, lambda_fun = None):

    inp = Input(shape = (img_size[0], img_size[1], 3))
    x = inp
    if lambda_fun:
        x = Lambda(lambda_fun)(x)

    base_model = MODEL(input_tensor = x, weights = 'imagenet', include_top = False, pooling = 'avg')

    model = Model(inp, base_model.output)
    return model

model1 = create_base_model(vgg16.VGG16, (224, 224), vgg16.preprocess_input)
model2 = create_base_model(resnet50.ResNet50, (224, 224), resnet50.preprocess_input)
model3 = create_base_model(inception_v3.InceptionV3, (299, 299), inception_v3.preprocess_input)

model1.trainable = False
model2.trainable = False
model3.trainable = False

inpA = Input(shape = (224, 224, 3))
inpB = Input(shape = (299, 299, 3))

out1 = model1(inpA)
out2 = model2(inpA)
out3 = model3(inpB)

x = Concatenate()([out1, out2, out3]) 
x = Dropout(0.2)(x)
x = Dense(1, activation='sigmoid')(x)

model = Model([inpA, inpB], x)

opt = keras.optimizers.Adam(lr=2e-4)

history = model.fit_generator(
    train_generator,
    epochs = 5,
    steps_per_epoch = train_num // batch_size,
    validation_data = validation_generator,
    validation_steps = validation_num // batch_size,
    verbose = 1,
    callbacks = [mc, es])

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

1 Ответ

0 голосов
/ 20 октября 2019

В качестве первого предложения вы можете обойти все процессы генерации потока и увеличения данных и просто посмотреть, сможете ли вы перейти к одному входному изображению. Вы хотите проверить правильность предварительной обработки. Предупреждения, которые появляются сразу после вызова соответствия, относятся к тому, что они, по-видимому, указывают на то, что данные изображения загружаются неправильно или не найдены. Примерно так должно работать без ошибок:

x_train_1 = np.random.uniform(size=(1,224,224,3))
x_train_2 = np.random.uniform(size=(1,299,299,3))
y_train = np.array([0])
y_train = np.expand_dims(y_train,0)

print(x_train_1.shape)
print(x_train_2.shape)
print(y_train.shape)
model.fit(x=[x_train_1, x_train_2], y=y_train, epochs=1)

Затем попробуйте загрузить реальные данные (без дополнения), а затем, наконец, убедитесь, что загрузка, обработка потока / дополнения правильная.

Также,может быть полезно запустить команду model.summary () после компиляции, чтобы вы могли увидеть, какова архитектура. Возможно, было бы полезно назвать слои так, чтобы вы могли точно определить, о каком слое идет речь.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...