Samarali TensorFlow 2.0: Eng yaxshi amaliyotlar va nima o'zgargan

TensorFlow jamoasi tomonidan nashr etilgan

Yaqinda nashr etilgan maqolada biz TensorFlow 2.0 dastur ishlab chiqaruvchisi samaradorligi, soddaligi va foydalanish qulayligiga e'tibor qaratilgan holda qayta tuzilganligini aytib o'tdik.

O'zgargan narsalarni sinchkovlik bilan o'rganish va ilg'or tajribalar bilan tanishish uchun yangi Effektiv TensorFlow 2.0 qo'llanmasini (GitHub-da nashr etilgan) ko'rib chiqing. Ushbu maqolada siz u erda topishingiz mumkin bo'lgan tarkibning qisqacha mazmuni keltirilgan. Agar ushbu mavzulardan qaysi biri sizni qiziqtirsa, ko'proq ma'lumot olish uchun qo'llanmani o'qing!

Asosiy o'zgarishlarning qisqacha mazmuni

Foydalanuvchilarning samaradorligini oshirish uchun TensorFlow 2.0-da ko'plab o'zgarishlar mavjud, shu jumladan ortiqcha API-larni olib tashlash, API-larni yanada izchil qilish (Unified RNNs, Unified Optimizers) va Python ish vaqtiga Eager bajarilishi bilan yaxshiroq integratsiya qilish.

Ko'pgina RFC-lar (agar siz ular uchun yangi bo'lsangiz, ularni tekshirib ko'ring!) TensorFlow 2.0-ga kiritilgan o'zgarishlar va fikrlarni izohlab berishdi. Ushbu qo'llanma TensorFlow 2.0 qanday rivojlanish ko'rinishi haqida tasavvur beradi. Siz TensorFlow 1.x. bilan ozgina tanishgan deb taxmin qilishingiz mumkin.

API tozalash

Ko'pgina API-lar TF 2.0-da yo'q qilinadi yoki boshqa joyga ko'chiriladi, ba'zilari esa ularning 2-ekvivalenti - tf.summary, tf.keras.metrics va tf.keras.optimizers bilan almashtirildi. Ushbu nomlarni avtomatik ravishda qo'llashning eng oson usuli - v2 yangilanish skriptidan foydalanish.

Kuchli ijro

TensorFlow 1.X foydalanuvchilardan tf. * API qo'ng'iroqlarini amalga oshirish orqali mavhum sintaksis daraxti (grafik) ni qo'lda tikishni talab qiladi. Keyinchalik, bu foydalanuvchilardan chiqish va tensorlarning bir qatorini session.run () chaqiruviga o'tkazish orqali mavhum sintaksis daraxtini qo'lda kompilyatsiya qilishni talab qiladi. Bundan farqli o'laroq, TensorFlow 2.0 tezda bajariladi (Python kabi) va 2.0 da grafikalar va sessiyalar bajarilish tafsilotlari kabi ko'rinishi kerak.

Boshqa globallar yo'q

TensorFlow 1.X aniq ravishda global nomlar maydoniga ko'proq ishondi. Siz tf.Variable () deb nomlaganingizda, u standart grafikka kiritiladi va Python o'zgaruvchisiga ishora qilsangiz ham u o'sha erda qoladi. Keyin bu o'zgaruvchini tf.-ni tiklashingiz mumkin edi, lekin agar siz u bilan yaratilgan ismni bilsangiz. Agar siz o'zgaruvchining yaratilishini nazorat qila olmasangiz, buni qilish qiyin edi. Natijada, foydalanuvchilarga o'z parametrlarini qayta topishga yordam berish uchun turli xil mexanizmlar tarqaldi.

TensorFlow 2.0 ushbu mexanizmlarning barchasini (Variables 2.0 RFC) standart mexanizm foydasiga yo'q qiladi: O'zgaruvchilaringizni kuzatib boring! Agar o'zgaruvchi tf-ni kuzatib qo'ysangiz, axlat yig'iladi. Qo'shimcha ma'lumot olish uchun qo'llanmani ko'ring.

Seanslar emas, funktsiyalar

Sessiya.run () chaqiruvi deyarli funktsiyani chaqirishga o'xshaydi: siz kirishlar va chaqiriladigan funktsiyalarni aniqlaysiz va natijalar to'plamini qaytarib olasiz. TensorFlow 2.0-da siz Python funktsiyasini tf.function () yordamida uni JIT kompilyatsiyasi uchun belgilashingiz mumkin, shunda TensorFlow uni bitta grafik sifatida ishlaydi (Functions 2.0 RFC).

Ushbu mexanizm TensorFlow 2.0-ga grafik rejimining barcha afzalliklarini olish imkoniyatini beradi:

  • Ishlash: funktsiyani optimallashtirish mumkin (tugunlarni Azizillo, yadroni sintezlash va boshqalar).
  • Portativlik: Funktsiya eksport / reportport qilinishi mumkin (SavedModel 2.0 RFC), foydalanuvchilarga modulli TensorFlow funktsiyalarini qayta ishlatish va almashish imkonini beradi.

Python va TensorFlow kodlarini bemalol bir-biriga ulashtirish kuchi bilan siz Pythonning ekspressiv xususiyatlaridan to'liq foydalanishingiz mumkin. Ammo ko'chma TensorFlow kontekstlarda Python tarjimonsiz ishlaydi - mobil, C ++ va JS. @ Tf.function funksiyasini qo'shganda foydalanuvchilarga o'z kodlarini qayta yozishni oldini olish uchun AutoGraph Python konstruktsiyalarini o'zlarining TensorFlow ekvivalentlariga o'zgartiradi.

Qo'shimcha ma'lumot olish uchun qo'llanmani ko'ring.

Idiomatik TensorFlow 2.0 uchun tavsiyalar

Kodingizni kichikroq funktsiyalarga o'zgartiring

TensorFlow 1.X-da odatiy foydalanish odati "oshxona lavaboni" strategiyasi bo'lib, unda barcha mumkin bo'lgan hisoblashlarning birlashishi oldindan ko'rib chiqilgan va tanlangan tsenzorlar session.run () orqali baholangan. TensorFlow 2.0-da, foydalanuvchilar o'zlarining kodlarini kerak bo'lganda chaqirilgan kichik funktsiyalarga qayta kiritishlari kerak. Umuman olganda, ushbu kichik funktsiyalarning har birini tf.function bilan bezashning hojati yo'q; faqat tf.function-dan yuqori darajadagi hisoblashlarni bezash uchun foydalaning - masalan, o'qishning bir bosqichi yoki sizning modelingizning oldinga o'tishi.

O'zgaruvchilarni boshqarish uchun Keras qatlamlari va modellaridan foydalaning

Keras modellari va qatlamlari barcha bog'liq bo'lgan o'zgaruvchilarni rekursiv ravishda yig'adigan qulay o'zgaruvchilar va trainable_variables xususiyatlarini taklif etadi. Bu o'zgaruvchilarni ishlatilayotgan joylarga qarab ularni boshqarishni osonlashtiradi.

Keras qatlamlari / modellari tf.train.Checkpointable-dan meros bo'lib, @ tf.function bilan birlashtirilgan, bu esa Keras ob'ektlaridan SavedModellarni to'g'ridan-to'g'ri nazorat qilish yoki eksport qilish imkonini beradi. Ushbu integratsiyalardan foydalanish uchun Keras's.fit () API-ni ishlatish shart emas.

Qo'shimcha ma'lumot olish uchun qo'llanmani ko'ring.

Tf.data.Datasets va @ tf.function funksiyalarini birlashtirish

Xotiraga joylashtirilgan o'quv ma'lumotlari ustidan ishlaganda, Python-ning muntazam iteratsiyasidan foydalaning. Aks holda, tf.data.Dataset - bu ma'lumotni diskdan uzatishning eng yaxshi usuli. Ma'lumotlar to'plamlari iterable emas (iterator emas) va xuddi boshqa rejimlarda ishlaydigan Python iterable kabi ishlaydilar. Siz o'zingizni kodingizni tf.function () ga o'rash orqali ma'lumotlar to'plamini async oldindan belgilash / oqimlash xususiyatlaridan to'liq foydalanishingiz mumkin, bu esa AutoGraph yordamida Python iteratsiyasini tenglashtirilgan grafik operatsiyalar bilan almashtiradi.

@ tf.funktsiya
def train (model, ma'lumotlar bazasi, optimizator):
 ma'lumotlar bazasida x, y uchun:
  lenta sifatida tf.GradientTape () bilan:
   bashorat = model (x)
   yo'qotish = loss_fn (bashorat, y)
  gradients = lenta.gradients (yo'qotish, model.trable_variable)
  optimizer.apply_gradients (gradientlar, model.trainable_variables)

Keras .fit () API-dan foydalansangiz, ma'lumotlar to'plamining iteratsiyasi haqida tashvishlanmaysiz.

model.compile (optimizer = optimizator, yo'qotish = yo'qotish_fn)
model.fit (ma'lumotlar bazasi)

Python boshqaruv oqimi bilan AutoGraph-dan foydalaning

AutoGraph ma'lumotlarga bog'liq boshqaruv oqimini tf.cond va tf. while_loop kabi grafik rejimidagi ekvivalentlarga aylantirish usulini taqdim etadi.

Ma'lumotlarga bog'liq boshqaruv oqimi paydo bo'ladigan bitta umumiy joy ketma-ketlik modellarida. tf.keras.layers.RNN RNN katakchasini o'rab oladi, bu sizni takroriylikni statik yoki dinamik ravishda o'chirishga imkon beradi. Namoyish uchun siz dinamik ro'yxatni quyidagicha to'ldirishingiz mumkin:

sinf DynamicRNN (tf.keras.Model):
def __init __ (o'zi, rnn_cell):
 super (DynamicRNN, o'zi) .__ tashabbuskor __ (o'zini)
 self.cell = rnn_cell
def call (o'z-o'zidan, input_data):
 # [to'plam, vaqt, xususiyatlar] -> [vaqt, to'plam, xususiyatlar]
 input_data = tf.transpose (input_data, [1, 0, 2])
 natijalar = tf.TensorArray (tf.float32, input_data.shape [0])
 holat = self.cell.zero_state (input_data.shape [1], tip = tf.float32)
 tf.range i uchun (kiritish_data.shape [0]):
  chiqish, holat = self.cell (kiritish_data [i], holat)
  outputs = outputs.write (i, chiqish)
 tf.transpose (outputs.stack (), [1, 0, 2]), holat

Qo'shimcha ma'lumot olish uchun qo'llanmani ko'ring.

Tf.metrics-dan ma'lumotlarni yig'ish uchun foydalaning va tf.summary-ni ro'yxatdan o'tkazing

Nihoyat, yaqinda tf.summary belgilarining to'liq to'plami keladi. Siz tf.summary ning 2.0 versiyasiga kirishingiz mumkin:

tensorflow.python.ops-dan import xulosasi_ops_v2

Qo'shimcha ma'lumot olish uchun qo'llanmani ko'ring.

Keyingi qadamlar

Ushbu maqolada Effektiv TF 2.0 qo'llanmasining qisqacha xulosasi keltirilgan (agar siz ushbu mavzular bilan qiziqsangiz, qo'shimcha ma'lumot olish uchun bu yerga boring!) TensorFlow 2.0 haqida ko'proq bilish uchun biz yaqinda ushbu maqolalarni tavsiya qilamiz:

  • TensorFlow-ga hissa qo'shish: SIGs, RFCs, sinov va hujjatlar.
  • TensorFlow 2.0-da Symbolic va Imperative API-lar nima?
  • Kerasda standartlashtirish: TensorFlow 2.0-da yuqori darajadagi API uchun ko'rsatma

Iltimos, 6 va 7 mart kunlari bo'lib o'tadigan TensorFlow dasturchilarining sammitiga tayyorgarlik ko'ring. Har doimgidek, barcha muzokaralar YouTube-ga shaxsan qila olmaydigan odamlar uchun yuklanadi.