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-ב שמתשהל דצ