[英]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.