MNIST数据库加载

MNIST

The MNIST dataset comprises 60,000 training examples and 10,000 test examples of the handwritten digits 0–9, formatted as 28x28-pixel monochrome images.

我们所说的MNIST就是一个手写数字图片的数据库,里面有60,000个训练样本和10,000个测试样本,每个样本是28x28像素的黑白图片。
更详细介绍:http://yann.lecun.com/exdb/mnist/
在这个例子中我发现加载MNIST数据库用了tensorflow里面的一个API:

mnist = tf.contrib.learn.datasets.load_dataset("mnist")

于是我试着尝试加载,结果出错了:
load error
看Traceback似乎是链接超时,也就是tensorflow会去下载数据库,但是网络环境原因,这个不多说…
好吧,直觉告诉我,tensorflow应该可以加载已经下载好的数据。为什么?如果是我,我也会这么设计,不可能每次加载数据都要去服务器下载数据。
带着问题,我就看了下出错的文件:

File "D:\Python\Python36\lib\site-packages\tensorflow\contrib\learn\python\learn\datasets\mnist.py", line 280, in load_mnist
    return read_data_sets(train_dir)

在280行,看到了函数的调用,默认读取文件夹’MNIST-data’

def load_mnist(train_dir='MNIST-data'):
  return read_data_sets(train_dir)

在read_data_sets函数中调用了base.maybe_download

def maybe_download(filename, work_directory, source_url):
  """Download the data from source url, unless it's already here.

  Args:
      filename: string, name of the file in the directory.
      work_directory: string, path to working directory.
      source_url: url to download from if file doesn't exist.

  Returns:
      Path to resulting file.
  """
  if not gfile.Exists(work_directory):
    gfile.MakeDirs(work_directory)
  filepath = os.path.join(work_directory, filename)
  if not gfile.Exists(filepath):
    temp_file_name, _ = urlretrieve_with_retry(source_url)
    gfile.Copy(temp_file_name, filepath)
    with gfile.GFile(filepath) as f:
      size = f.size()
    print('Successfully downloaded', filename, size, 'bytes.')
  return filepath

maybe_download先判断本地数据库是否存在,若不存在则去下载
而下载地址则是mnist.py中定义的
DEFAULT_SOURCE_URL = ‘https://storage.googleapis.com/cvdf-datasets/mnist/
所以,网络原因会导致下载不了。
到官网http://yann.lecun.com/exdb/mnist/把下面数据库的四个压缩档都下载下来,放到MNIST-data文件夹,MNIST-data放在python执行路径下,即可。

train-images-idx3-ubyte.gz:  training set images (9912422 bytes)
train-labels-idx1-ubyte.gz:  training set labels (28881 bytes)
t10k-images-idx3-ubyte.gz:   test set images (1648877 bytes)
t10k-labels-idx1-ubyte.gz:   test set labels (4542 bytes) 

看到下面打印,证明数据库加载完成。
load succeed

小结

本文以数据加载所遇到的问题为案例,展示了解决问题的思路。
当我们遇到阻碍,先要理清楚出现问题的原因,才可做到对症下药。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值