Missed TensorFlow World? Check out the recap. Learn more

tf.data を使って NumPy データをロードする

View on TensorFlow.org Run in Google Colab View source on GitHub

このチュートリアルでは、NumPy 配列から tf.data.Dataset にデータを読み込む例を示します。

この例では、MNIST データセットを .npz ファイルから読み込みますが、 NumPy 配列がどこに入っているかは重要ではありません。

設定

from __future__ import absolute_import, division, print_function, unicode_literals

import numpy as np
import tensorflow as tf
import tensorflow_datasets as tfds

.npz ファイルからのロード

DATA_URL = 'https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz'

path = tf.keras.utils.get_file('mnist.npz', DATA_URL)
with np.load(path) as data:
  train_examples = data['x_train']
  train_labels = data['y_train']
  test_examples = data['x_test']
  test_labels = data['y_test']

tf.data.Dataset を使って NumPy 配列をロード

サンプルの配列と対応するラベルの配列があるとします。 tf.data.Dataset.from_tensor_slices にこれら2つの配列をタプルとして入力し、tf.data.Dataset を作成します。

train_dataset = tf.data.Dataset.from_tensor_slices((train_examples, train_labels))
test_dataset = tf.data.Dataset.from_tensor_slices((test_examples, test_labels))

データセットの使用

データセットのシャッフルとバッチ化

BATCH_SIZE = 64
SHUFFLE_BUFFER_SIZE = 100

train_dataset = train_dataset.shuffle(SHUFFLE_BUFFER_SIZE).batch(BATCH_SIZE)
test_dataset = test_dataset.batch(BATCH_SIZE)

モデルの構築と訓練

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

model.compile(optimizer=tf.keras.optimizers.RMSprop(),
                loss=tf.keras.losses.SparseCategoricalCrossentropy(),
                metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])
model.fit(train_dataset, epochs=10)
Epoch 1/10
938/938 [==============================] - 4s 4ms/step - loss: 3.7348 - sparse_categorical_accuracy: 0.8818
Epoch 2/10
938/938 [==============================] - 2s 3ms/step - loss: 0.5764 - sparse_categorical_accuracy: 0.9258
Epoch 3/10
938/938 [==============================] - 2s 3ms/step - loss: 0.4289 - sparse_categorical_accuracy: 0.9440
Epoch 4/10
938/938 [==============================] - 2s 3ms/step - loss: 0.3435 - sparse_categorical_accuracy: 0.9541
Epoch 5/10
938/938 [==============================] - 2s 3ms/step - loss: 0.3061 - sparse_categorical_accuracy: 0.9602
Epoch 6/10
938/938 [==============================] - 2s 2ms/step - loss: 0.2791 - sparse_categorical_accuracy: 0.9643
Epoch 7/10
938/938 [==============================] - 2s 3ms/step - loss: 0.2548 - sparse_categorical_accuracy: 0.9686
Epoch 8/10
938/938 [==============================] - 2s 3ms/step - loss: 0.2297 - sparse_categorical_accuracy: 0.9714
Epoch 9/10
938/938 [==============================] - 2s 3ms/step - loss: 0.2176 - sparse_categorical_accuracy: 0.9734
Epoch 10/10
938/938 [==============================] - 2s 3ms/step - loss: 0.1920 - sparse_categorical_accuracy: 0.9760

<tensorflow.python.keras.callbacks.History at 0x7f46cc317c88>
model.evaluate(test_dataset)
157/157 [==============================] - 0s 2ms/step - loss: 0.7094 - sparse_categorical_accuracy: 0.9492

[0.7094229523151788, 0.9492]