首页 > 解决方案 > TypeError: 使用 tf.io.decode_jpeg 导入后,无法使用 plt.imshow 将图像数据转换为浮点数

问题描述

我正在尝试使用 Tensorflow 加载文件并可视化结果,但我收到 TypeError:图像数据无法转换为浮点数

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)

标签: pythontensorflowmatplotlib

解决方案


不确定您的 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().


推荐阅读