tensorflow.data API-ל ןידע אובמ


.tf.data םינותנה תכרעב שמתשהל איה םינותנ קפסל תפסונ ךרד .םינותנ ה

:דמלת ,וז הכרדה םויס רחאל .Keras לדומ רובע tf.data םינותנה ךרעמב

  • tf.data םינותנה תכרעב שמתשהלו רוציל דציכ
  • רוטרנג תייצקנופל האוושהב תאז תושעל ןורתיה

.ליחתנ ואוב

תיללכ הריקס

:םה ;םיקלח העבראל קלוחמ הז רמאמ

  • ללוחמ תייצקנופו NumPy ךרעמ םע Keras םגד תרשכה
  • tf.data תועצמאב םינותנ ךרעמ תריצי
  • ללוחמ תייצקנופמ םינותנ ךרעמ תריצי
  • שארמ רוזחא םע םינותנ

ללוחמ תייצקנופו NumPy ךרעמ םע Keras םגד תרשכה

.Keras לדומ ללכ ךרדב ןמאל יושע התא דציכ רוקסנ הבה ,tf.data לש API

.9 דע 0 םימלש םירפסמב תדדוקמ המיאתמה גוויסה תיוותו ,רופא ינווגב םילסקיפ 28×28

.םינותנכ NumPy ךרעמ תא קפסמ התא ,לדומה לש fit() היצקנופה םעו ,גוו

:ןמקלדכ אוה אלמה דוקה

import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras.datasets.fashion_mnist import load_data
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.models import Sequential

(train_image, train_label), (test_image, test_label) = load_data()
print(train_image.shape)
print(train_label.shape)
print(test_image.shape)
print(test_label.shape)

model = Sequential([
    Flatten(input_shape=(28,28)),
    Dense(100, activation="relu"),
    Dense(100, activation="relu"),
    Dense(10, activation="sigmoid")
])
model.compile(optimizer="adam",
              loss="sparse_categorical_crossentropy", 
              metrics="sparse_categorical_accuracy")
history = model.fit(train_image, train_label,
                    batch_size=32, epochs=50,
                    validation_data=(test_image, test_label), verbose=0)

print(model.evaluate(test_image, test_label))

plt.plot(history.history['val_sparse_categorical_accuracy'])
plt.show()

:םיאבה םירבדה תא סיפדת הז דוק תלעפה

(60000, 28, 28)
(60000,)
(10000, 28, 28)
(10000,)
313/313 [==============================] - 0s 392us/step - loss: 0.5114 - sparse_categorical_accuracy: 0.8446
[0.5113903284072876, 0.8446000218391418]

:ךלש לדומה תא תנמיאש תופוקתה 50 ךרואל תומיאה קויד לש האבה הלילעה תא רוצ ,םגו

:אבה ןפואב MNIST לש הנפואה םינותנה ךרעמ לש ללוחמ רוציל ןתינ .םינותנה ןכרצל ליב

def batch_generator(image, label, batchsize):
    N = len(image)
    i = 0
    while True:
        yield image[i:i+batchsize], label[i:i+batchsize]
        i = i + batchsize
        if i + batchsize > N:
            i = 0

.הלחתההמ שדחמ לעפוי אוה ,ךרעמה ףוסל עיגי אוהש עגרב .ןמז תלבגה אלל תווצאב טלקה

:fit() היצקנופב שומישל המוד ללוחמ םע Keras לדומ ןומיא

history = model.fit(batch_generator(train_image, train_label, 32),
                    steps_per_epoch=len(train_image)//32,
                    epochs=50, validation_data=(test_image, test_label), verbose=0)

.fit() היצקנופל steps_per_epoch טנמוגראה תועצמאב ,תמ

.validation_steps טנמוגראה תא ןייצלו תאז םוקמב ללוחמב שמתשהל לוכי

:תמדוקה אמגודל ההז טלפה הבש ,ללוחמ תייצקנופ תועצמאב אלמה דוקה ןלהל

import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras.datasets.fashion_mnist import load_data
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.models import Sequential

(train_image, train_label), (test_image, test_label) = load_data()
print(train_image.shape)
print(train_label.shape)
print(test_image.shape)
print(test_label.shape)

model = Sequential([
    Flatten(input_shape=(28,28)),
    Dense(100, activation="relu"),
    Dense(100, activation="relu"),
    Dense(10, activation="sigmoid")
])

def batch_generator(image, label, batchsize):
    N = len(image)
    i = 0
    while True:
        yield image[i:i+batchsize], label[i:i+batchsize]
        i = i + batchsize
        if i + batchsize > N:
            i = 0

model.compile(optimizer="adam",
              loss="sparse_categorical_crossentropy",
              metrics="sparse_categorical_accuracy")
history = model.fit(batch_generator(train_image, train_label, 32),
                    steps_per_epoch=len(train_image)//32,
                    epochs=50, validation_data=(test_image, test_label), verbose=0)
print(model.evaluate(test_image, test_label))

plt.plot(history.history['val_sparse_categorical_accuracy'])
plt.show()

tf.data תועצמאב םינותנ ךרעמ תריצי

:אבה ומכ ,tf.data םינותנ ךרעמל םתוא רימהל לוכי התא ,םינעטנ הנפואה

...
dataset = tf.data.Dataset.from_tensor_slices((train_image, train_label))
print(dataset.element_spec)

:אבה ןפואב םינותנה ךרעמ לש טרפמה תא סיפדמ הז

(TensorSpec(shape=(28, 28), dtype=tf.uint8, name=None),
 TensorSpec(shape=(), dtype=tf.uint8, name=None))

.תויביס 8 לש םינמיס אלל םימלש םירפסמכ םינסחואמ םיטנמלאה ינש .ירלקס אוה ינשה טנ

:םבוליש ינפל דרפנב תיוותהו הנומתה ינותנ רובע םינותנה ךרעמ תא הליחת רצוי ךא םינ

...
train_image_data = tf.data.Dataset.from_tensor_slices(train_image)
train_label_data = tf.data.Dataset.from_tensor_slices(train_label)
dataset = tf.data.Dataset.zip((train_image_data, train_label_data))
print(dataset.element_spec)

:טרפמ ותוא תא סיפדי הז

(TensorSpec(shape=(28, 28), dtype=tf.uint8, name=None),
 TensorSpec(shape=(), dtype=tf.uint8, name=None))

.tuple-ל םינותנ יכרעמ רפסממ דחא דחא םינותנ המיאתמ איהש ןוויכמ Python-ב z

:םינותנה ךרעמל רדגומ הווצאה לדוג ובש םינותנ ךרעמ תועצמאב Keras לדומ ןמאל ןתינ

import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras.datasets.fashion_mnist import load_data
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.models import Sequential

(train_image, train_label), (test_image, test_label) = load_data()
dataset = tf.data.Dataset.from_tensor_slices((train_image, train_label))

model = Sequential([
    Flatten(input_shape=(28,28)),
    Dense(100, activation="relu"),
    Dense(100, activation="relu"),
    Dense(10, activation="sigmoid")
])

history = model.fit(dataset.batch(32),
                    epochs=50,
                    validation_data=(test_image, test_label),
                    verbose=0)

print(model.evaluate(test_image, test_label))

plt.plot(history.history['val_sparse_categorical_accuracy'])
plt.show()

:תואבה תולועפה תועצמאב םינותנ ךרעמב המגוד לכ סיפדהל לוכי התא ,ןכל .רוטרטיא קר

for image, label in dataset:
    print(image)  # array of shape (28,28) in tf.Tensor
    print(label)  # integer label in tf.Tensor

:םיאבה םירבדה תא ךל שי ,םתוא סיפדמו םינותנ ךרעממ תווצא רצוי התא םא .ןהמ תחא או

for image, label in dataset.batch(32):
    print(image)  # array of shape (32,28,28) in tf.Tensor
    print(label)  # array of shape (32,) in tf.Tensor

.API-ה דועיתב תויצקנופה לש האלמ המישר אוצמל ןתינ .Python לש itertools

ללוחמ תייצקנופמ םינותנ ךרעמ תריצי

:היצקנופה ןלהל .םעפ לכב תחא המיגד תרציימש ללוחמ תייצקנופ רצוי התא תעכ ,הלעמל ת

import numpy as np
import tensorflow as tf

def shuffle_generator(image, label, seed):
    idx = np.arange(len(image))
    np.random.default_rng(seed).shuffle(idx)
    for i in idx:
        yield image[i], label[i]

dataset = tf.data.Dataset.from_generator(
    shuffle_generator,
    args=[train_image, train_label, 42],
    output_signature=(
        tf.TensorSpec(shape=(28,28), dtype=tf.uint8),
        tf.TensorSpec(shape=(), dtype=tf.uint8)))
print(dataset.element_spec)

.וצומי ךרעמהמ תומיגדה רשאכ םייתסי הזה ללוחמה ,תמדוקה המגודה ומכ אלש .םעפ לכב ת

.ללוחמה תכירצ ינפל םינותנה טרפמ תא קיסהל לוכי וניא tf.data.Dataset

:םדוק ומכ טרפמ ותוא תא סיפדת ליעל דוקה תלעפה

(TensorSpec(shape=(28, 28), dtype=tf.uint8, name=None),
 TensorSpec(shape=(), dtype=tf.uint8, name=None))

:אלמה דוקה ןלהל .םדוק ומכ ןומיאל וב שמתשהל לוכי התא ךכיפל .רבעב תרציש םינותנה

import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
from tensorflow.keras.datasets.fashion_mnist import load_data
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.models import Sequential

(train_image, train_label), (test_image, test_label) = load_data()

def shuffle_generator(image, label, seed):
    idx = np.arange(len(image))
    np.random.default_rng(seed).shuffle(idx)
    for i in idx:
        yield image[i], label[i]

dataset = tf.data.Dataset.from_generator(
    shuffle_generator,
    args=[train_image, train_label, 42],
    output_signature=(
        tf.TensorSpec(shape=(28,28), dtype=tf.uint8),
        tf.TensorSpec(shape=(), dtype=tf.uint8)))

model = Sequential([
    Flatten(input_shape=(28,28)),
    Dense(100, activation="relu"),
    Dense(100, activation="relu"),
    Dense(10, activation="sigmoid")
])

history = model.fit(dataset.batch(32),
                    epochs=50,
                    validation_data=(test_image, test_label),
                    verbose=0)

print(model.evaluate(test_image, test_label))

plt.plot(history.history['val_sparse_categorical_accuracy'])
plt.show()

Prefetch םע םינותנ תכרע

.prefetch()-ב שומישה אוה םינותנ ךרעמב שומיש לש יתימאה ןורתיה

.ליבקמב לועפל סרק לש ןומיאה תאלוללו דקפתל ללוחמל םורגל לק אל .תע לכב תלעופ ללו

Dataset ה אוה-API םע וב שמתשהל ןכמ רחאלו וזכ ללוחמ תייצקנופמ םינותנ ךרעמ רוציל

...
history = model.fit(dataset.batch(32).prefetch(3),
                    epochs=50,
                    validation_data=(test_image, test_label),
                    verbose=0)

.ליבקמב לועפל ללוחמה תייצקנופ ךותב םינותנה תנכה םתירוגלאו ןומיאה תאלולל רשפאל

.ןורכיזל םיאתהל ידכ קיפסמ ןטק םינותנה ךרעמ םא אלא הב שמתשהל וצרת אלש ןכתיי ךא

:אבה עטקה תועצמאב תגצומ וז הלבגמ .תמאב יארקא בוברע עצבל ידכ ומצע םינותנה ךרעמ

import tensorflow as tf
import numpy as np

n_dataset = tf.data.Dataset.from_tensor_slices(np.arange(10000))
for n in n_dataset.shuffle(10).take(20):
    print(n.numpy())

:ךכ הארנ ליעל רומאהמ טלפה

9
6
2
7
5
1
4
14
11
17
19
18
3
16
15
22
10
23
21
13

.ולש טלפהמ םילודג םירפסמ הארת אל םלועלו ,ולש הנוכשה ביבס םישדשדמ םירפסמה תא תו

תפסונ האירק

:ולש API-ה דועיתב אוצמל ןתינ tf.data םינותנה ךרעמ לע ףסונ עדימ

  • API לש tf.data.Dataset

ריצִקתַ

.Keras לדומ ןומיאב וב שמתשהל ןתינ דציכו tf.data םינותנה ךרעמב שמת

:תדמל ,תיפיצפס

  • םינותנ תכרעמו ללוחמ ,NumPy ךרעממ םינותנ תועצמאב לדומ ןמאל דציכ
  • ללוחמ תייצקנופ וא NumPy ךרעמ תועצמאב םינותנ ךרעמ רוציל דציכ
  • ליבקמב לועפל ןומיאה תאלוללו ללוחמל םורגל ידכ םינותנ ךרעמ םע pretch-ב שמתשהל דצ