ValueError ResNet Keras - PullRequest
       9

ValueError ResNet Keras

0 голосов
/ 02 сентября 2018

Я пытался использовать модель приложения Keras ResNet 50 для моей проблемы с этим кодом:

#Tensorflow and tf.keras
import tensorflow as tf
from tensorflow import keras
#tf.enable_eager_execution()

#Helper libraries
import numpy as np
import matplotlib.pyplot as plt

import Muenzbetragserkennung_input_ResNet

#print(tf.__version__)

#Dataset
#Training and test data
(train_images, train_labels), (test_images, test_labels) = 
Muenzbetragserkennung_input_ResNet.read_input_shuffle()

batch_size, height, width, channels = train_images.shape
train_images = train_images / 255.0
test_images = test_images / 255.0
print(train_images.shape)

#Build the model
model = tf.keras.applications.resnet50.ResNet50(include_top=False, 
weights=None, input_tensor=None, input_shape=(height, width, channels), 
pooling='max')

model.compile(optimizer=tf.train.AdamOptimizer(),
          loss='mean_squared_error',
          metrics=['accuracy'])

#model.summary()

#Train
model.fit(train_images, train_labels, epochs=10)
#model.save_weights('models/muenzen.h5')

#Evaluate
loss, accuracy = model.evaluate(test_images, test_labels)
print('Accuracy', accuracy)

#Prediction
prediction = model.predict(test_images[0:1])
print(prediction)

Но получил следующее Ouput / Ошибка:

Изображения поезда формы: (3865, 240, 320, 3)

Маркировка поезда формы: (3865,)

Тестовые изображения формы: (967, 240, 320, 3)

Этикетки для проверки формы: (967,)

(3865, 240, 320, 3)

Traceback (последний последний вызов):
Файл "C: /Users/Christian/PycharmProjects/MuenzbetragserkennungResNet/Muenzbetragserkennung_ResNet.py", строка 34, в model.fit (train_images, train_labels, epochs = 10)

Файл "C: \ Users \ Christian \ AppData \ Roaming \ Python \ Python36 \ сайт-пакеты \ tensorflow \ питон \ keras \ двигатель \ training.py", линия 1278, в форме validation_split = validation_split)

Файл "C: \ Users \ Christian \ AppData \ Roaming \ Python \ Python36 \ сайт-пакеты \ tensorflow \ питон \ keras \ двигатель \ training.py", строка 917, в _standardize_user_data exception_prefix = 'цель')

Файл "C: \ Users \ Christian \ AppData \ Roaming \ Python \ Python36 \ сайт-пакеты \ tensorflow \ питон \ keras \ двигатель \ training_utils.py", строка 191, в standardize_input_data 'но получил массив с формой' + str (data_shape))

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

Процесс завершен с кодом выхода 1

Я уже пробовал разные версии пула, но получил только другие ValueErrors. Модель должна вывести одно значение (стоимость монет на изображении).

Заранее благодарю за помощь.

1 Ответ

0 голосов
/ 02 сентября 2018

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

resnet_model = tf.keras.applications.resnet50.ResNet50(include_top=False, 
weights=None, input_tensor=None, input_shape=(height, width, channels), 
pooling='max')

x = Dense(128, activation='relu')(resnet_model.output)
x = Dense(1, activation='relu')(x)

model = Model(resnet_model.input, x)

Обратите внимание, что последний плотный слой выводит один скаляр, который теперь совместим с вашими целями.

...