Google I / Oの基調講演、製品セッション、ワークショップなどを見るプレイリストを見る

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

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

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

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

設定

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 [==============================] - 3s 2ms/step - loss: 8.0347 - sparse_categorical_accuracy: 0.8216
Epoch 2/10
938/938 [==============================] - 2s 2ms/step - loss: 0.5314 - sparse_categorical_accuracy: 0.9222
Epoch 3/10
938/938 [==============================] - 2s 2ms/step - loss: 0.3978 - sparse_categorical_accuracy: 0.9422
Epoch 4/10
938/938 [==============================] - 2s 2ms/step - loss: 0.3323 - sparse_categorical_accuracy: 0.9516
Epoch 5/10
938/938 [==============================] - 2s 2ms/step - loss: 0.2871 - sparse_categorical_accuracy: 0.9583
Epoch 6/10
938/938 [==============================] - 2s 2ms/step - loss: 0.2533 - sparse_categorical_accuracy: 0.9637
Epoch 7/10
938/938 [==============================] - 2s 2ms/step - loss: 0.2275 - sparse_categorical_accuracy: 0.9685
Epoch 8/10
938/938 [==============================] - 2s 2ms/step - loss: 0.2150 - sparse_categorical_accuracy: 0.9693
Epoch 9/10
938/938 [==============================] - 2s 2ms/step - loss: 0.2053 - sparse_categorical_accuracy: 0.9727
Epoch 10/10
938/938 [==============================] - 2s 2ms/step - loss: 0.1969 - sparse_categorical_accuracy: 0.9746
<tensorflow.python.keras.callbacks.History at 0x7f6c3a1cd5c0>
model.evaluate(test_dataset)
157/157 [==============================] - 0s 2ms/step - loss: 0.6875 - sparse_categorical_accuracy: 0.9557
[0.6875337362289429, 0.9556999802589417]