如何通过TensorFlow加载MNIST(包括下载)?

如何通过TensorFlow加载MNIST(包括下载)?,tensorflow,mnist,Tensorflow,Mnist,MNIST的TensorFlow文档建议采用多种不同的方式加载MNIST数据集: 文档中描述的所有方法都会在TensorFlow 1.8中抛出许多不推荐的警告。 我当前加载MNIST并创建培训批的方式: class MNIST: def __init__(self, optimizer): ... self.mnist_dataset = input_data.read_data_sets("/tmp/data/", one_hot=True)

MNIST的TensorFlow文档建议采用多种不同的方式加载MNIST数据集:

文档中描述的所有方法都会在TensorFlow 1.8中抛出许多不推荐的警告。

我当前加载MNIST并创建培训批的方式:

class MNIST:
    def __init__(self, optimizer):
        ...
        self.mnist_dataset = input_data.read_data_sets("/tmp/data/", one_hot=True)
        self.test_data = self.mnist_dataset.test.images.reshape((-1, self.timesteps, self.num_input))
        self.test_label = self.mnist_dataset.test.labels
        ...

    def train_run(self, sess):
        batch_input, batch_output = self.mnist_dataset.train.next_batch(self.batch_size, shuffle=True)
        batch_input = batch_input.reshape((self.batch_size, self.timesteps, self.num_input))
        _, loss = sess.run(fetches=[self.train_step, self.loss], feed_dict={self.input_placeholder: batch_input, self.output_placeholder: batch_output})
        ...

    def test_run(self, sess):
        loss = sess.run(fetches=[self.loss], feed_dict={self.input_placeholder: self.test_data, self.output_placeholder: self.test_label})
        ...
仅凭目前的方法,我怎么能做完全相同的事情呢?

我找不到这方面的任何文档

在我看来,新的方式是:

train, test = tf.keras.datasets.mnist.load_data()
self.mnist_train_ds = tf.data.Dataset.from_tensor_slices(train)
self.mnist_test_ds = tf.data.Dataset.from_tensor_slices(test)

但是如何在我的
train\u run
test\u run
方法中使用这些数据集?

使用
TF dataset API加载MNIST数据集的示例:


创建mnist数据集以加载序列、有效和测试图像:

#A toy network
y = tf.layers.dense(tf.layers.flatten(image),1,activation=tf.nn.relu)
loss = tf.losses.mean_squared_error(tf.squeeze(y), label)

with tf.Session() as sess:
   sess.run(tf.global_variables_initializer())

   # The `Iterator.string_handle()` method returns a tensor that can be evaluated
   # and used to feed the `handle` placeholder.
   train_handle = sess.run(train_iterator.string_handle())
   valid_handle = sess.run(valid_iterator.string_handle())

   # Run training
   train_loss, train_img, train_label = sess.run([loss, image, label],
                                                 feed_dict={handle: train_handle})
   # train_image.shape = (10, 784) 

   # Run validation
   valid_pred, valid_img = sess.run([y, image], 
                                    feed_dict={handle: valid_handle})
   #test_image.shape = (20, 784)
您可以使用
dataset.from\u tensor\u slices
dataset.from\u generator
为numpy输入创建
数据集
Dataset.from_tensor_slices
将整个数据集添加到计算图中,因此我们将使用
Dataset.from_generator

#加载列表数据
(x_列,y_列),(x_测试,y_测试)=tf.keras.datasets.mnist.load_data()
def创建列表数据集(数据、标签、批次大小):
def gen():
对于图像,zip中的标签(数据、标签):
产量图像、标签
ds=tf.data.Dataset.from_生成器(gen,(tf.float32,tf.int32),((28,28),())
返回ds.repeat().batch(批大小)
#不同批量的训练和验证数据集
列车数据集=创建列车数据集(x列车,y列车,10)
有效的数据集=创建数据集(x\u测试,y\u测试,20)

可在训练和验证之间切换的可反馈迭代器

handle = tf.placeholder(tf.string, shape=[])
iterator = tf.data.Iterator.from_string_handle(
handle, train_dataset.output_types, train_dataset.output_shapes)
image, label = iterator.get_next()

train_iterator = train_dataset.make_one_shot_iterator()
valid_iterator = valid_dataset.make_one_shot_iterator()

运行示例:

#A toy network
y = tf.layers.dense(tf.layers.flatten(image),1,activation=tf.nn.relu)
loss = tf.losses.mean_squared_error(tf.squeeze(y), label)

with tf.Session() as sess:
   sess.run(tf.global_variables_initializer())

   # The `Iterator.string_handle()` method returns a tensor that can be evaluated
   # and used to feed the `handle` placeholder.
   train_handle = sess.run(train_iterator.string_handle())
   valid_handle = sess.run(valid_iterator.string_handle())

   # Run training
   train_loss, train_img, train_label = sess.run([loss, image, label],
                                                 feed_dict={handle: train_handle})
   # train_image.shape = (10, 784) 

   # Run validation
   valid_pred, valid_img = sess.run([y, image], 
                                    feed_dict={handle: valid_handle})
   #test_image.shape = (20, 784)

使用
TF数据集API
加载MNIST数据集的示例:


创建mnist数据集以加载序列、有效和测试图像:

#A toy network
y = tf.layers.dense(tf.layers.flatten(image),1,activation=tf.nn.relu)
loss = tf.losses.mean_squared_error(tf.squeeze(y), label)

with tf.Session() as sess:
   sess.run(tf.global_variables_initializer())

   # The `Iterator.string_handle()` method returns a tensor that can be evaluated
   # and used to feed the `handle` placeholder.
   train_handle = sess.run(train_iterator.string_handle())
   valid_handle = sess.run(valid_iterator.string_handle())

   # Run training
   train_loss, train_img, train_label = sess.run([loss, image, label],
                                                 feed_dict={handle: train_handle})
   # train_image.shape = (10, 784) 

   # Run validation
   valid_pred, valid_img = sess.run([y, image], 
                                    feed_dict={handle: valid_handle})
   #test_image.shape = (20, 784)
您可以使用
dataset.from\u tensor\u slices
dataset.from\u generator
为numpy输入创建
数据集
Dataset.from_tensor_slices
将整个数据集添加到计算图中,因此我们将使用
Dataset.from_generator

#加载列表数据
(x_列,y_列),(x_测试,y_测试)=tf.keras.datasets.mnist.load_data()
def创建列表数据集(数据、标签、批次大小):
def gen():
对于图像,zip中的标签(数据、标签):
产量图像、标签
ds=tf.data.Dataset.from_生成器(gen,(tf.float32,tf.int32),((28,28),())
返回ds.repeat().batch(批大小)
#不同批量的训练和验证数据集
列车数据集=创建列车数据集(x列车,y列车,10)
有效的数据集=创建数据集(x\u测试,y\u测试,20)

可在训练和验证之间切换的可反馈迭代器

handle = tf.placeholder(tf.string, shape=[])
iterator = tf.data.Iterator.from_string_handle(
handle, train_dataset.output_types, train_dataset.output_shapes)
image, label = iterator.get_next()

train_iterator = train_dataset.make_one_shot_iterator()
valid_iterator = valid_dataset.make_one_shot_iterator()

运行示例:

#A toy network
y = tf.layers.dense(tf.layers.flatten(image),1,activation=tf.nn.relu)
loss = tf.losses.mean_squared_error(tf.squeeze(y), label)

with tf.Session() as sess:
   sess.run(tf.global_variables_initializer())

   # The `Iterator.string_handle()` method returns a tensor that can be evaluated
   # and used to feed the `handle` placeholder.
   train_handle = sess.run(train_iterator.string_handle())
   valid_handle = sess.run(valid_iterator.string_handle())

   # Run training
   train_loss, train_img, train_label = sess.run([loss, image, label],
                                                 feed_dict={handle: train_handle})
   # train_image.shape = (10, 784) 

   # Run validation
   valid_pred, valid_img = sess.run([y, image], 
                                    feed_dict={handle: valid_handle})
   #test_image.shape = (20, 784)

你没有说明你的“mnist”来自哪里。我假设
mnist=tf.contrib.learn.datasets.load_dataset(“mnist”)
,但用tf 1.8测试会抛出大量不推荐的警告。您可以使用`tf.logging`设置这些警告,也可以从下载mint文件并将其转换为numpy数组。当然我可以这样做,但这不是问题所在。如果有什么东西被弃用了,我通常会假设有一个替换,一种新的方法来执行弃用的方法。你是说他们只是不赞成MNIST加载而没有替换?如果是这样的话,那就是我原来问题的答案。你没有说明你的“mnist”来自哪里。我假设
mnist=tf.contrib.learn.datasets.load_dataset(“mnist”)
,但用tf 1.8测试会抛出大量不推荐的警告。您可以使用`tf.logging`设置这些警告,也可以从下载mint文件并将其转换为numpy数组。当然我可以这样做,但这不是问题所在。如果有什么东西被弃用了,我通常会假设有一个替换,一种新的方法来执行弃用的方法。你是说他们只是不赞成MNIST加载而没有替换?如果是这样的话,那么这就是我最初问题的答案。