
Materi menyediakan terjemahan manual untuk memperbarui kode secara otomatis dari TensorFlow 1.x ke Tensorflow 2 menggunakan skrip pembaruan
tf_upgrade_v2
.
TensorFlow 2.0 mencakup banyak perubahan API, seperti mengubah urutan argumen, mengganti nama karakter, dan mengubah nilai default untuk parameter. Koreksi manual dari semua modifikasi ini membosankan dan rentan kesalahan. Untuk menyederhanakan perubahan dan membuat transisi Anda ke TF 2.0 semulus mungkin, tim TensorFlow membuat utilitas
tf_upgrade_v2
untuk membantu berpindah dari kode lama ke API baru.
Catatan: tf_upgrade_v2
diinstal secara otomatis untuk TensorFlow 1.13 dan yang lebih baru (termasuk semua build TF 2.0).
Penggunaan skrip yang khas terlihat seperti ini:
tf_upgrade_v2 \ --intree my_project/ \ --outtree my_project_v2/ \ --reportfile report.txt
Kode ini mempercepat proses peningkatan dengan mengonversi skrip TensorFlow 1.x Python ke TensorFlow 2.0 yang ada.
Skrip konversi mengotomatiskan proses sebanyak mungkin, tetapi masih ada perubahan sintaksis dan gaya yang tidak dapat diperbaiki oleh skrip.
Modul Kompatibilitas
Beberapa karakter API tidak dapat diperbarui hanya dengan menggunakan penggantian string. Untuk memastikan bahwa kode Anda berfungsi di TensorFlow 2.0, skrip pembaruan menyertakan modul
compat.v1
. Modul ini menggantikan karakter TF 1.x, seperti
tf.foo
, dengan tautan setara
tf.compat.v1.foo
. Meskipun modul kompatibilitas bagus, kami sarankan Anda mengurangi penggantian secara manual dan mengirimkannya ke API baru di ruang nama
tf. *
tf. *
alih-
tf.compat.v1
namespace
tf.compat.v1
secepat mungkin.
Karena penyusutan modul TensorFlow 2.x (mis.
tf.flags
dan
tf.contrib
), beberapa perubahan tidak dapat dilewati dengan beralih ke
compat.v1
. Memperbarui kode tersebut mungkin memerlukan penggunaan pustaka tambahan (misalnya,
absl.flags
atau beralih ke paket dengan
tenorflow/addons
.
Proses Pembaruan yang Disarankan
Bagian manual ini menunjukkan penggunaan skrip pembaruan. Meskipun skrip pembaruan mudah digunakan, kami sangat menyarankan Anda menggunakan skrip sebagai bagian dari proses berikut:
- Tes unit : pastikan bahwa kode yang diperbarui memiliki serangkaian tes unit dengan cakupan yang wajar. Ini adalah kode Python, jadi bahasa tidak akan melindungi Anda dari banyak kelas kesalahan. Pastikan juga semua dependensi Anda telah diperbarui agar kompatibel dengan TensorFlow 2.0.
- Instal TensorFlow 1.14 : Tingkatkan TensorFlow Anda ke versi terbaru dari TensorFlow 1.x, setidaknya 1.14. Ini termasuk TensorFlow 2.0 API terakhir di
tf.compat.v2
. - Kode uji dengan 1.14 : Pastikan unit test Anda lulus pada saat ini. Anda akan me-restart mereka selama proses upgrade, jadi penting untuk memulai dengan warna hijau.
- Jalankan skrip pembaruan : Jalankan
tf_upgrade_v2
pada seluruh pohon sumber termasuk pengujian. Ini akan memperbarui kode Anda ke format yang hanya menggunakan karakter yang tersedia di TensorFlow 2.0. Karakter yang sudah usang akan tersedia dari tf.compat.v1
. Mereka kemudian akan membutuhkan pemrosesan manual. \ N ", - Jalankan tes yang dikonversi dengan TensorFlow 1.14 : Kode Anda masih harus berjalan dengan benar di TensorFlow 1.14. Jalankan tes unit lagi. Kesalahan apa pun dalam pengujian Anda pada tahap ini berarti ada kesalahan dalam skrip pembaruan.
- Periksa laporan pembaruan untuk peringatan dan kesalahan : Skrip menulis file laporan yang menjelaskan semua konversi yang perlu Anda periksa, atau semua tindakan yang perlu dilakukan secara manual. Misalnya: Setiap instance kontribus yang tersisa memerlukan penghapusan manual.
- Instal TensorFlow 2.0 : Pada titik ini, beralih ke TensorFlow 2.0 harus aman.
- Uji kode dengan
v1.disable_v2_behavior
: Mulai ulang tes Anda dengan v1.disable_v2_behavior()
di fungsi tes utama, hasilnya harus sama seperti ketika berjalan di bawah 1,14. - Aktifkan Perilaku V2 : Sekarang setelah tes Anda berjalan menggunakan API v2, Anda dapat mulai menonton penyertaan
v2 behavior
. Bergantung pada bagaimana kode Anda ditulis, ini mungkin memerlukan beberapa perubahan.
Menggunakan skrip pembaruan
Instalasi
from __future__ import absolute_import, division, print_function, unicode_literals
try: import tensorflow.compat.v2 as tf except Exception: pass tf.enable_v2_behavior() print(tf.__version__)
Klon repositori
tensorflow / models sehingga Anda memiliki beberapa kode untuk eksperimen:
!git clone --branch r1.13.0 --depth 1 https://github.com/tensorflow/models
Baca bantuan
Script harus diinstal dengan TensorFlow. Bantuan bawaan disebut seperti ini:
!tf_upgrade_v2 -h
Contoh Kode TF1
Berikut ini adalah skrip TensorFlow 1.0 sederhana yang tidak berjalan di TensorFlow 2.0
!head -n 65 models/samples/cookbook/regression/custom_regression.py | tail -n 10
memberikan kesalahan berikut:
Traceback (most recent call last): File "custom_regression.py", line 162, in <module> tf.logging.set_verbosity(tf.logging.INFO) AttributeError: module 'tensorflow' has no attribute 'logging'
File tunggal
Skrip pembaruan dapat dijalankan pada file Python yang terpisah:
!tf_upgrade_v2 \ --infile models/samples/cookbook/regression/custom_regression.py \ --outfile /tmp/custom_regression_v2.py
Skrip akan menampilkan kesalahan jika tidak dapat menemukan koreksi untuk kode.
INFO line 38:8: Renamed 'tf.feature_column.input_layer' to 'tf.compat.v1.feature_column.input_layer' INFO line 43:10: Renamed 'tf.layers.dense' to 'tf.compat.v1.layers.dense' INFO line 46:17: Renamed 'tf.layers.dense' to 'tf.compat.v1.layers.dense' INFO line 57:17: tf.losses.mean_squared_error requires manual check. tf.losses have been replaced with object oriented versions in TF 2.0 and after. The loss function calls have been converted to compat.v1 for backward compatibility. Please update these calls to the TF 2.0 versions. INFO line 57:17: Renamed 'tf.losses.mean_squared_error' to 'tf.compat.v1.losses.mean_squared_error' INFO line 61:15: Added keywords to args of function 'tf.shape' INFO line 62:15: Changed tf.to_float call to tf.cast(..., dtype=tf.float32). INFO line 65:40: Renamed 'tf.train.AdamOptimizer' to 'tf.compat.v1.train.AdamOptimizer' INFO line 68:39: Renamed 'tf.train.get_global_step' to 'tf.compat.v1.train.get_global_step' INFO line 83:9: tf.metrics.root_mean_squared_error requires manual check. tf.metrics have been replaced with object oriented versions in TF 2.0 and after. The metric function calls have been converted to compat.v1 for backward compatibility. Please update these calls to the TF 2.0 versions. INFO line 83:9: Renamed 'tf.metrics.root_mean_squared_error' to 'tf.compat.v1.metrics.root_mean_squared_error' INFO line 142:23: Renamed 'tf.train.AdamOptimizer' to 'tf.compat.v1.train.AdamOptimizer' INFO line 162:2: Renamed 'tf.logging.set_verbosity' to 'tf.compat.v1.logging.set_verbosity' INFO line 162:27: Renamed 'tf.logging.INFO' to 'tf.compat.v1.logging.INFO' INFO line 163:2: Renamed 'tf.app.run' to 'tf.compat.v1.app.run' TensorFlow 2.0 Upgrade Script ----------------------------- Converted 1 files Detected 0 issues that require attention -------------------------------------------------------------------------------- Make sure to read the detailed log 'report.txt'
Pohon direktori
Proyek tipikal, termasuk contoh sederhana ini, menggunakan lebih dari satu file. Biasanya Anda ingin memperbarui seluruh paket, sehingga skrip juga dapat dijalankan di pohon direktori:
Perhatikan satu komentar tentang fungsi tersebut
dataset.make_one_shot_iterator
.
Sekarang skrip sudah bekerja dengan TensorFlow 2.0.
Perhatikan bahwa karena modul `tf.compat.v1`, skrip yang dikonversi juga akan berjalan di TensorFlow 1.14.
Laporan terperinci
Script juga menerbitkan daftar perubahan yang terperinci. Dalam contoh ini, ia menemukan satu transformasi yang mungkin tidak aman dan menambahkan peringatan ke bagian atas file:
!head -n 20 tree_report.txt
TensorFlow 2.0 Upgrade Script ----------------------------- Converted 7 files Detected 1 issues that require attention -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- File: models/samples/cookbook/regression/automobile_data.py -------------------------------------------------------------------------------- models/samples/cookbook/regression/automobile_data.py:125:15: WARNING: Changing dataset.make_one_shot_iterator() to tf.compat.v1.data.make_one_shot_iterator(dataset). Please check this transformation. ================================================================================ Detailed log follows: ================================================================================ ================================================================================ Input tree: 'models/samples/cookbook/regression/' ================================================================================ -------------------------------------------------------------------------------- Processing file 'models/samples/cookbook/regression/custom_regression.py' outputting to 'regression_v2/custom_regression.py'
Perhatikan lagi satu komentar tentang
Dataset.make_one_shot_iterator function
.
Mode Aman
Skrip konversi juga memiliki mode "AMAN" yang kurang invasif yang hanya mengubah impor untuk menggunakan modul
tensorflow.compat.v1
.
!tf_upgrade_v2 --mode SAFETY --infile dropout.py --outfile dropout_v2_safe.py > /dev/null
Misalnya kode:
import tensorflow as tf d = tf.nn.dropout(tf.range(10), 0.2) z = tf.zeros_like(d, optimize=False)
dalam mode ini dikonversi menjadi sebagai berikut:
import tensorflow.compat.v1 as tf tf.disable_v2_behavior() d = tf.nn.dropout(tf.range(10), 0.2) z = tf.zeros_like(d, optimize=False)
Seperti yang Anda lihat, kode Anda belum diperbarui, tetapi sekarang kode TensorFlow 1 berjalan di TensorFlow 2.
Peringatan
- Jangan perbarui bagian kode Anda secara manual sebelum menjalankan skrip. Secara khusus, fungsi dengan argumen yang disusun ulang, seperti
tf.argmax
atau tf.batch_to_space
, akan memaksa skrip untuk menambahkan argumen kata kunci yang salah, yang akan membingungkan kode Anda yang ada. - Script mengasumsikan
tensorflow
diimpor menggunakan import tensorflow as tf
- Script tidak menyusun ulang argumen. Sebagai gantinya, skrip menambahkan kata kunci argumen ke fungsi di mana argumen dibalik.
Setelah verifikasi, terjemahan juga akan muncul di Tensorflow.org. Jika Anda ingin berpartisipasi dalam terjemahan dokumentasi situs web Tensorflow.org ke dalam bahasa Rusia, silakan hubungi secara pribadi atau komentar. Setiap koreksi atau komentar sangat dihargai.