#tensorflow #google-colaboratory
#tensorflow #google-colaboratory
Вопрос:
Пять строк, прокомментированных ниже, должны работать, но не работают. Оценка прогноза даже близко не соответствует тому, что я ожидал бы, и когда я делаю plt.imshow(img), он показывает неправильное изображение. Вот ссылка на мой блокнот в Colab.
x, y = next(valid_generator)
image = x[0, :, :, :]
true_index = np.argmax(y[0])
plt.imshow(image)
image_url = 'https://mysite_example/share/court3.jpg'
image_url = tf.keras.utils.get_file('Court', origin=image_url )
#img = keras.preprocessing.image.load_img( image_url, target_size=( 224, 224 ) )
#img_array = keras.preprocessing.image.img_to_array(img)
#img_array = tf.expand_dims(img_array, 0)
#prediction_scores = model.predict(np.expand_dims(img_array, axis=0))
#plt.imshow(img)
# Expand the validation image to (1, 224, 224, 3) before predicting the label
prediction_scores = model.predict(np.expand_dims(image, axis=0))
predicted_index = np.argmax(prediction_scores)
print("True label: " get_class_string_from_index(true_index))
print("Predicted label: " get_class_string_from_index(predicted_index)
Комментарии:
1. сначала вам нужно загрузить файл с некоторым кодом, я думаю, это единственный способ
Ответ №1:
Метод tf.keras.utils.get_file
загружает файл с URL-адреса в локальный кэш, только если файл еще не кэширован. Итак, если вы используете одно и то же имя кэша для всех URL-адресов («Суд» в вашем коде?), Вы увидите только первый файл.
Также во время обучения у вас есть этап предварительной обработки нормализации всех пикселей путем их разделения 255
. Вы также должны применить тот же этап предварительной обработки во время вывода.
Рабочий код:
_, axis = plt.subplots(1,3)
for i, image_url in enumerate(['https://squashvideo.site/share/court3.jpg',
'https://i.pinimg.com/originals/0f/c2/9b/0fc29b35532f8e2fb998f5605212ab27.jpg',
'https://thumbs.dreamstime.com/b/squash-court-photo-empty-30346175.jpg']):
image_url = tf.keras.utils.get_file('Court', origin=image_url )
img = tf.keras.preprocessing.image.load_img(image_url, target_size=( 224, 224 ) )
os.remove(image_url) # Remove the cached file
axis[i].imshow(img)
img_array = keras.preprocessing.image.img_to_array(img)
prediction_scores = model.predict(np.expand_dims(img_array, axis=0)/255)
axis[i].title.set_text(np.argmax(prediction_scores, axis=1))
Как вы можете видеть, прогнозы идеальны, последнее изображение относится к классу 0 (пустой корт для игры в сквош), а второе изображение относится к классу 1 (игроки, играющие на корте для игры в сквош).
Комментарии:
1. Отлично, спасибо! Никогда бы не подумал, что керас кэширует загружаемые изображения. Я обновил свой ноутбук colab, и он работает правильно. Однако, когда я сохраняю обученную модель, а затем пытаюсь использовать ее в другом сценарии, прогнозы оказываются совершенно неверными. Чтобы сохранить модель, которую я только что сделал:
tf.saved_model.save(model, saved_model_path)
Затем в моем новом скрипте я делаю:model = tf.keras.models.load_model('./saved_flowers_model/')
Но новые прогнозы скрипта совершенно неверны, используя тот же код, которым вы поделились выше.2. Я понял это. Вместо того, чтобы делать keras…. Мне пришлось вызывать все с помощью tf.keras… Я полагаю, что простое использование keras напрямую вызывает конфликт версий с tf.keras.