Ошибка типа: данные изображения не могут быть преобразованы в плавающее после tf.image.per_image_standardization (x) - PullRequest
0 голосов
/ 11 февраля 2019

Я получаю следующую ошибку на plt.imshow

TypeError: Image data cannot be converted to float

Для этого кода:

import keras
import tensorflow as tf
import matplotlib.pyplot as plt
mnist = keras.datasets.mnist

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

def preprocess(x):
    x = tf.image.per_image_standardization(x)
    return x

train_images = preprocess(train_images)
test_images = preprocess(test_images)

plt.figure()
plt.imshow(train_images[1])
plt.colorbar()
plt.grid(False)
plt.show()

Есть идеи, почему это происходит?Спасибо!

1 Ответ

0 голосов
/ 11 февраля 2019

В вашем сценарии train_images не содержат фактических данных, а являются просто тензорами-заполнителями:

train_images[1]
<tf.Tensor 'strided_slice_2:0' shape=(28, 28) dtype=float32>

Самое простое решение - включить активное выполнение вверху вашего сценария:

tf.enable_eager_execution()

Это означает, что во время выполнения тензоры будут фактически содержать данные, которые вы пытаетесь построить:

train_images[1]
<tf.Tensor: id=95, shape=(28, 28), dtype=float32, numpy=
array([[-0.4250042 , -0.4250042 , -0.4250042 , -0.4250042 , -0.4250042 ,
        -0.4250042 , -0.4250042 , -0.4250042 , -0.4250042 , -0.4250042 ,
        -0.4250042 , -0.4250042 , -0.4250042 , -0.4250042 , -0.4250042 ,
        -0.4250042 , -0.4250042 , -0.4250042 , -0.4250042 , -0.4250042 ,
        -0.4250042 , -0.4250042 , -0.4250042 , -0.4250042 , -0.4250042 ,
        -0.4250042 , -0.4250042 , -0.4250042 ], # etc

, которые должны решить вашу ошибку.Вы можете прочитать больше о нетерпеливом исполнении на веб-сайте TF .

Кроме того, вы также можете создать график, фактически оценив тензор изображения в сеансе:

with tf.Session() as sess:
    img = sess.run(train_images[1])
    plt.figure()
    plt.imshow(img)
    plt.colorbar()
    plt.grid(False)
    plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...