【问题标题】:Plot MINST dataset images returns AttributeError: 'dict' object has no attribute 'train'绘制 MNIST 数据集图像返回 AttributeError:“dict”对象没有属性“train”
【发布时间】:2021-05-14 21:47:17
【问题描述】:

我在下面的代码中有这个错误:AttributeError: 'dict' object has no attribute 'train'

import tensorflow_datasets as tfds
mnist = tfds.load(name='mnist')

n_samples = 5
plt.figure(figsize=(n_samples * 2, 3))
for index in range(n_samples):
    plt.subplot(1, n_samples, index + 1)
   sample_image = mnist.train.images[index].reshape(28, 28)
    plt.imshow(sample_image, cmap="binary")
    plt.axis("off")

plt.show()

我正在尝试像 answer 那样解决它,但我得到另一个错误:AttributeError: 'PrefetchDataset' object has no attribute 'images'

sample_image = mnist['train'].images[index].reshape(28, 28)

【问题讨论】:

    标签: python


    【解决方案1】:

    在 tensorflow v2 中改变了对 tensorflow_datasets 的使用。

    # Construct a tf.data.Dataset
    train = tfds.load('mnist', split='train')
    
    # Take 5 Images
    train = train.take(5)
    
    #Loop through youzr trainings images
    for image, label in train:  
        print(image,label)
    

    更简单的解决方案是:

    from tensorflow.keras.datasets import mnist
    (X_train, Y_train), (X_test, Y_test) = mnist.load_data() 
    
    # Input image dimensions
    img_rows, img_cols = 28, 28
    
    # Channels go last for TensorFlow backend
    x_train_reshaped = X_train.reshape(X_train.shape[0], img_rows, img_cols, 1)
    x_test_reshaped = X_test.reshape(X_test.shape[0], img_rows, img_cols, 1)
    input_shape = (img_rows, img_cols, 1)
    
    
    #ADDED print of images 
    %matplotlib inline
    from matplotlib import pyplot as plt
    num_row = 2
    num_col = 5
    # plot images
    fig, axes = plt.subplots(num_row, num_col, figsize=(1.5*num_col,2*num_row))
    
    for i in range(10):
        ax = axes[i//num_col, i%num_col]
        ax.imshow(X_train[i], cmap='gray')
        ax.axis('off')
    

    【讨论】:

    • 您的代码运行正确,但我使用此代码绘制图像,对吗? n_samples = 5 plt.figure(figsize=(n_samples * 2, 3)) for index in range(n_samples): plt.subplot(1, n_samples, index + 1) sample_image = X_train[index] plt.imshow(sample_image, cmap ="binary") plt.axis("off") plt.show()
    • 如果我理解正确,您想打印 mnist 图像。我添加了如何将图像打印到第二个解决方案
    【解决方案2】:

    我相信tfds.load 返回一个字典对象,其键为tfds.Splitdataset,如果split=None 是默认值。查看文档 - 尝试使用 mnist 变量来找出它是什么对象。我很确定你所期望的只是它下面的一层。

    https://www.tensorflow.org/datasets/api_docs/python/tfds/load

    【讨论】:

      猜你喜欢
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 2018-09-02
      • 2021-01-30
      • 2020-09-11
      • 2021-06-07
      相关资源
      最近更新 更多