操作系统:Win10,编译工具:notebook,语言:python

在学习Mnist手写数据集的时候,遇到这种问题。使用Tensorflow2.2-gpu版本


plt.figure(figsize=(20, 4))
for i in range(1, n):

    ax = plt.subplot(2, n, i)
    plt.imshow(x_test[i].reshape(28, 28))

    ax = plt.subplot(2, n, i + n)
    plt.imshow(decode_test[i].reshape(28, 28))

 出现这种问题:

AttributeError: 'tensorflow.python.framework.ops.EagerTensor' object has no attribute 'reshape'

解决办法:因为这里x_test[i]是一个Tensor向量,而plt绘图工具,其期望输入的是一个numpy数组,而不是tensor对象,需要用numpy转换一下属性 ,再reshape。

n = 10

plt.figure(figsize=(20, 4))
for i in range(1, n):

    ax = plt.subplot(2, n, i)
    plt.imshow(np.array(x_test[i]).reshape(28, 28))

    ax = plt.subplot(2, n, i + n)
    plt.imshow(np.array(decode_test[i]).reshape(28, 28))

 输出:

如果直接写成 

 x_test[i].numpy() 

好像也是可以的,本人暂未尝试过。不过也有可能报错。其原因是numpy只在CPU上操作,而Tensor可以在CPU或GPU上操作。如果出现报错则可能是在测试的时候使用了GPU。可以改写成

  x_test[i].cpu().numpy() 

后,再reshape。 

学习记录一下~

(2021.11.23日 发布第一版) 

(2022.10.08日 修改内容: 添加了 输出 下面的内容,由于原始代码删除了,所以暂未尝试过~)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐