Ошибка типа: данные изображения не могут быть преобразованы в float с помощью plt.imshow после импорта с помощью tf.io.decode_jpeg

#python #tensorflow #matplotlib

#python #tensorflow #matplotlib

Вопрос:

Я пытаюсь загрузить файл с помощью Tensorflow и визуализировать результат, но я получаю ошибку типа: данные изображения не могут быть преобразованы в float

 import tensorflow as tf
import matplotlib.pyplot as plt

image = tf.io.read_file('./my-image.jpg')
image = tf.io.decode_jpeg(image, channels=3)
print(image.shape)  # (?, ?, 3)
plt.imshow(image)
  

Ответ №1:

Не уверен в вашей версии tensorflow. TensorFlow по умолчанию использует статические вычислительные графики в 1.x . Тип данных image , который вы получаете Tensor , таков, что показывает эту ошибку. Сначала создайте пользовательское изображение.

 import numpy as np
from PIL import Image

np.random.seed(0)
image = np.random.random_sample(size=(256,256,3))
im = Image.fromarray(image, 'RGB')
im.save('my-image.jpg')
  

Затем вам нужно использовать tf.Session() для запуска этого сеанса. Это покажет изображение, созданное выше.

 import tensorflow as tf
import matplotlib.pyplot as plt

image = tf.io.read_file('my-image.jpg')
image = tf.io.decode_jpeg(image, channels=3)
print(image)

with tf.Session() as sess:
    plt.imshow(sess.run(image))
    plt.show()

# print
Tensor("DecodeJpeg:0", shape=(?, ?, 3), dtype=uint8)
  

введите описание изображения здесь

Или вы можете запустить динамические вычислительные графики с помощью tf.enable_eager_execution() tensorflow. Тот же эффект достигается с помощью приведенного выше кода.

 import tensorflow as tf
import matplotlib.pyplot as plt

tf.enable_eager_execution()

image = tf.io.read_file('my-image.jpg')
image = tf.io.decode_jpeg(image, channels=3)
plt.imshow(image)
plt.show()
  

По умолчанию в tensorflow2 используются динамические вычислительные графики. Вам не нужно использовать tf.enable_eager_execution() .