![]() |
![]() |
![]() |
![]() |
このチュートリアルでは、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]