Python 在Keras中使用MNIST数据

Python 在Keras中使用MNIST数据,python,python-3.x,numpy,tensorflow,Python,Python 3.x,Numpy,Tensorflow,作为使用numpy和tensorflow课程的一部分,我目前正在使用MNIST数据。我正在运行课程中提供的代码,在运行这段代码时,我注意到tensorflow发出了一些警告: 来自tensorflow.examples.tutorials.mnist导入输入数据 mnist=输入数据。读取数据集(“../data/mnist\u data/”,一个热=真) 我查看了文档,发现这是不推荐的,应该使用keras中的MNIST。所以我把上面的代码改成了这个 从keras.datasets导入mnis

作为使用numpy和tensorflow课程的一部分,我目前正在使用MNIST数据。我正在运行课程中提供的代码,在运行这段代码时,我注意到tensorflow发出了一些警告:

来自tensorflow.examples.tutorials.mnist导入输入数据
mnist=输入数据。读取数据集(“../data/mnist\u data/”,一个热=真)
我查看了文档,发现这是不推荐的,应该使用
keras
中的MNIST。所以我把上面的代码改成了这个

从keras.datasets导入mnist
从keras.models导入顺序加载模型
从keras.layers.core导入密集、退出、激活
从keras.utils导入np_utils
(X_列,y_列),(X_测试,y_测试)=列表负载数据()
我现在的问题是,在课程材料中,他们使用了这个功能:

training\u数字,training\u标签=mnist.train.next\u批次(5000)
keras无法使用该函数
next\u batch()
,并且原始MNIST数据集相当大。有没有一个聪明的办法来解决这个问题

非常感谢

使用Keras中的Sequential()。此Sequential()有一个名为fit()的方法,您可以在参数中设置batchSize。请参阅文档:

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

您(大体上)有三种选择:

选择1 只需坚持使用现有教程,忽略弃用警告即可。非常简单,但是您可能会错过KerasAPI(新的默认设置)的好处,除非您打算稍后了解这一点

选择2 完全切换到
keras
API并找到一个新教程。一个是仅几行代码中的MNIST示例:

mnist=tf.keras.datasets.mnist
(x_列,y_列),(x_测试,y_测试)=列表负载数据()
x_系列,x_测试=x_系列/255.0,x_测试/255.0
模型=tf.keras.models.Sequential([
tf.keras.layers.Flatten(输入_形状=(28,28)),
tf.keras.layers.Dense(128,活化='relu'),
tf.keras.层压降(0.2),
tf.keras.layers.Dense(10,活化='softmax')
])
model.compile(优化器='adam',
损失=“稀疏”\u分类”\u交叉熵',
指标=[‘准确度’])
模型拟合(x_序列,y_序列,历次=5)
模型评估(x_检验,y_检验)
如果你可以的话,这是我推荐的选择
keras
是新的默认值。也许这不是一个选择,或者你想坚持你原来的课程,但我当然建议你尽快熟悉
keras

选择3 找到一种成功“跨越溪流”的方法

这是更棘手的,但肯定可以做到。mnist的
keras.dataset
毕竟只是一个大数组。您可以查看数据集API(特别是
load\u from\u tensor()
load\u from\u tensor\u slices()
)。但是,这些选项需要一些争论,因为从新方法返回的数据集本质上(正如您所发现的)与从旧方法返回的数据集是不同的类型

更新:


in提供了一个全面的例子,我以前没有意识到这一点

您可以设置批处理大小并使用此处描述的一次性迭代器()

聪明的方法是使用教程中描述的方法,而不用担心“不推荐”和“警告”。当你在没有Keras的情况下学习它之后,你可以尝试用Keras来做。已经做过了,如果我在最初的帖子中不清楚的话,很抱歉。谢谢你,谢谢你的链接。我不太确定我是否理解文档。这看起来像我正在搜索的内容。我正试图把它融入我的代码中。我将批量大小设置为5000,但由于某种原因,当我尝试返回
(X\u train,y\u train)
时,我在查看形状时会遇到一个问号。尝试解决这个问题。但是,我如何将具有此形状的张量(例如,
TensorShape([Dimension(None),Dimension(10)])
转换为一个数组呢?对于火车数据,将数据大小从60000减少到5000,对于测试数据,将数据大小从10000减少到200。谢谢你的帮助!!!