[英]Using MNIST data with Keras
我目前正在使用 MNIST 数据作为使用 numpy 和 tensorflow 课程的一部分。 我正在运行他们在课程中提供的代码,在运行这段代码时,我注意到来自 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 有没有聪明的方法来解决这个问题?
提前谢谢了!
您可以设置 batch_size 并使用单次迭代器(),如此处描述的Keras Mnist 文档
使用 Keras 中的 Sequential()。 这个 Sequential() 有一个叫做 fit() 的方法,你可以在参数中设置 batchSize。参见文档: keras Sequential
问题是您的教程使用的 API 与大多数当前教程中使用的 keras 数据集 API 不同。 在使用keras.dataset
API 时,您正试图“跨越流”。
你(广义上)有三个选择:
只需坚持使用现有教程并忽略弃用警告。 超级简单,但除非您打算稍后学习,否则您可能会错过 keras api(新默认值)的好处
完全切换到keras
API 并找到一个新教程。 这是一个只有几行代码的 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
。
找到一种成功“跨越河流”的方法。
这更棘手,但肯定可以做到。 keras.dataset
的 keras.dataset 毕竟只是一个大数组。 您可以查看数据集 API(特别是load_from_tensor()
和load_from_tensor_slices()
)。 但是,这些选项需要一些争论,因为本质上(正如您发现的那样)从新方法返回的数据集与从旧方法返回的数据集类型不同。
更新:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.