【问题标题】:Using MNIST data with Keras将 MNIST 数据与 Keras 一起使用
【发布时间】:2019-06-27 06:01:28
【问题描述】:

我目前正在使用 MNIST 数据作为使用 numpy 和 tensorflow 课程的一部分。我正在运行他们在课程中提供的代码,在运行这个 sn-p 代码时我注意到来自 tensorflow 的一些警告:

from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("../data/mnist_data/", one_hot=True)

我查看了文档并读到这已被弃用,应该使用来自keras 的 MNIST。所以我把上面的代码改成了这个

from keras.datasets import mnist
from keras.models import Sequential, load_model
from keras.layers.core import Dense, Dropout, Activation
from keras.utils import np_utils

(X_train, y_train), (X_test, y_test) = mnist.load_data()

我现在的问题是他们在课程材料中使用了这个功能:

training_digits, training_labels = mnist.train.next_batch(5000)

该函数 next_batch() 不适用于 keras 并且原始 MNIST 数据集非常大。 keras 有什么聪明的方法吗?

提前非常感谢!

【问题讨论】:

  • 聪明的方法是使用教程中描述的方法,不要打扰“弃用”和“警告”。在没有 Keras 的情况下学会它之后,你可以尝试用 Keras 来做。
  • 已经这样做了,抱歉,如果我在最初的帖子中不清楚这一点。无论如何,谢谢。

标签: python python-3.x numpy tensorflow


【解决方案1】:

您可以设置 batch_size 并使用此处所述的一次性迭代器()Keras Mnist documentation

【讨论】:

  • 这看起来像我正在寻找的东西。我正在尝试将其放入我的代码中。我将批量大小设置为 5000,但由于某种原因,当我尝试返回 (X_train, y_train) 时,我在查看形状时得到一个问号。
  • 试图找出这个 ATM。但是如何将具有这种形状的张量 for exampleTensorShape([Dimension(None), Dimension(10)]) 转换为数组?
  • 让它在训练数据从 60000 到 5000 和测试数据从 10000 到 200 的减少数据大小的情况下工作。感谢您的帮助!!!
【解决方案2】:

使用 Keras 的 Sequential()。这个 Sequential() 有一个叫做 fit() 的方法,你可以在参数中设置 batchSize。参见文档: keras Sequential

【讨论】:

  • 感谢您的链接。我不太确定我是否理解文档。
【解决方案3】:

问题在于您的教程使用的 API 与当前大多数教程中使用的 keras 数据集 API 不同。在使用keras.dataset API 时,您正在尝试“跨越流”。

你(大体上)有三个选择:

选项 1

坚持使用现有教程并忽略弃用警告。超级简单,但你可能会错过 keras api(新默认)的好处,除非你打算以后再学习它

选项 2

完全切换到keras API 并查找新教程。 This 一个是 MNIST 示例,只需几行代码:

mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])


model.fit(x_train, y_train, epochs=5)

model.evaluate(x_test, y_test)

如果您可以使用,这是我推荐的选项。 keras 是新的默认值。也许这不是一个选择,或者您想坚持原来的课程,但我当然建议您尽快熟悉keras

选项 3

找到成功“跨越溪流”的方法。

这比较棘手,但肯定可以做到。 mnist 的keras.dataset 毕竟只是一个大数组。您可以查看 Dataset API(特别是 load_from_tensor()load_from_tensor_slices())。不过,这些选项需要一些争论,因为本质上(如您所见),从新方法返回的数据集与从旧方法返回的数据集类型不同。

更新:

nag's answer 中的 link 提供了一个我以前不知道的综合示例!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-01
    • 2018-12-30
    • 2021-12-26
    • 2020-04-05
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 2020-10-15
    相关资源
    最近更新 更多