全部产品
Search
文档中心

Platform For AI:FAQ tentang TensorFlow

更新时间:Jul 06, 2025

Halaman ini menjelaskan FAQ terkait TensorFlow.

Daftar Isi

Bagaimana cara merujuk beberapa file Python?

Anda dapat menggunakan file Python untuk mengatur skrip pelatihan Anda. Simpan logika pra-pemrosesan data di satu file Python, definisikan model di file Python lainnya, dan gunakan satu file Python tambahan untuk melatih data selama proses pelatihan. Sebagai contoh, jika file test2.py memerlukan fungsi dari file test1.py dan berfungsi sebagai titik masuk program, cukup tambahkan file test1.py dan test2.py ke paket tar.gz lalu unggah paket tersebut. Gambar berikut menunjukkan parameter unggahan. Multi-script reference

  • Python Code Files: paket tar.gz.

  • Primary Python File: file titik masuk program.

Bagaimana cara mengunggah data ke OSS?

Sebelum mengunggah data ke OSS, buat Bucket OSS untuk menyimpan data algoritma pembelajaran mendalam. Kami sarankan membuat Bucket OSS di wilayah yang sama dengan kluster GPU yang digunakan untuk pembelajaran mendalam. Dengan cara ini, Anda dapat mentransmisikan data melalui jaringan klasik Alibaba Cloud tanpa biaya tambahan. Setelah membuat Bucket OSS, Anda dapat membuat folder, mengatur direktori data, dan mengunggah data melalui konsol OSS.

Untuk mengunggah data ke OSS, Anda dapat memanggil Operasi API atau menggunakan SDK. Untuk informasi lebih lanjut, lihat Unggah sederhana. Selain itu, OSS menyediakan berbagai alat untuk mempermudah unggah dan unduh data. Untuk informasi lebih lanjut, lihat Alat oss. Kami sarankan menggunakan ossutil atau osscmd untuk mengunggah dan mengunduh file.

Catatan

Saat menggunakan alat ini untuk mengunggah file, konfigurasikan ID AccessKey dan Rahasia AccessKey. Anda dapat masuk ke Konsol Manajemen Alibaba Cloud untuk membuat atau melihat ID AccessKey dan Rahasia AccessKey Anda.

Bagaimana cara membaca data dari OSS?

Kode Python tidak dapat dieksekusi untuk membaca data langsung dari OSS. Semua kode yang memanggil fungsi seperti Open() Python dan os.path.exist() untuk operasi pada file dan folder tidak akan berfungsi. Contohnya, kode yang memanggil scipy.misc.imread() dan numpy.load() juga tidak dapat dieksekusi.

Anda dapat membaca data di PAI menggunakan metode berikut:

  • Gunakan fungsi modul tf.gfile untuk membaca gambar atau teks. Fungsi sampel berikut didukung:

    tf.gfile.Copy(oldpath, newpath, overwrite=False) # Menyalin file. 
    tf.gfile.DeleteRecursively(dirname) # Menghapus semua file dalam direktori secara rekursif. 
    tf.gfile.Exists(filename) # Memeriksa apakah file ada. 
    tf.gfile.FastGFile(name, mode='r') # Membaca file dalam mode non-blocking. 
    tf.gfile.GFile(name, mode='r') # Membaca file. 
    tf.gfile.Glob(filename) # Meminta semua file dalam direktori. Anda dapat memfilter file-file ini berdasarkan pola. 
    tf.gfile.IsDirectory(dirname) # Memeriksa apakah item adalah direktori.
    tf.gfile.ListDirectory(dirname) # Meminta semua file dalam direktori. 
    tf.gfile.MakeDirs(dirname) # Membuat folder dalam direktori. Jika tidak ada direktori induk yang ada, direktori induk akan dibuat secara otomatis. Jika folder yang ingin Anda buat sudah ada dan dapat ditulis, respons sukses akan dikembalikan. 
    tf.gfile.MkDir(dirname) # Membuat folder dalam direktori. 
    tf.gfile.Remove(filename) # Menghapus file. 
    tf.gfile.Rename(oldname, newname, overwrite=False) # Mengganti nama file. 
    tf.gfile.Stat(dirname) # Meminta data statistik tentang direktori. 
    tf.gfile.Walk(top, inOrder=True) # Meminta pohon file dari direktori.
  • Gunakan fungsi tf.gfile.Glob, tf.gfile.FastGFile, tf.WholeFileReader(), dan tf.train.shuffle_batch() untuk membaca file secara batch. Sebelum membaca file secara batch, Anda harus mendapatkan daftar file dan membuat batch.

Saat membuat eksperimen pembelajaran mendalam di halaman Machine Learning Studio, tentukan parameter seperti file kode yang ingin dibaca dan direktorinya di sisi kanan halaman. Fungsi modul tf.flags dapat meneruskan parameter dalam bentuk -XXX, di mana XXX merupakan string.

import tensorflow as tf
FLAGS = tf.flags.FLAGS
tf.flags.DEFINE_string('buckets', 'oss://{OSS Bucket}/', 'Folder file gambar pelatihan')
tf.flags.DEFINE_string('batch_size', '15', 'Ukuran batch')
files = tf.gfile.Glob(os.path.join(FLAGS.buckets,'*.jpg')) # Meminta jalur semua file JPG di buckets.

Kami sarankan menggunakan metode berikut untuk membaca file secara batch berdasarkan jumlah file:

  • Gunakan fungsi tf.gfile.FastGfile() untuk membaca sejumlah kecil file secara batch.

    for path in files:
        file_content = tf.gfile.FastGFile(path, 'rb').read() # Ingatlah untuk menentukan rb saat Anda memanggil fungsi ini. Jika tidak, kesalahan mungkin terjadi. 
        image = tf.image.decode_jpeg(file_content, channels=3) # Dalam contoh ini, gambar JPG digunakan.
  • Gunakan fungsi tf.WholeFileReader() untuk membaca sejumlah besar file secara batch.

    reader = tf.WholeFileReader()  # Menginstansiasi pembaca. 
    fileQueue = tf.train.string_input_producer(files)  # Membuat antrian untuk pembaca membaca. 
    file_name, file_content = reader.read(fileQueue)  # Menggunakan pembaca untuk membaca file dari antrian. 
    image_content = tf.image.decode_jpeg(file_content, channels=3)  # Mendekode konten file menjadi gambar. 
    label = XXX  # Dalam contoh ini, operasi pemrosesan label dihilangkan. 
    batch = tf.train.shuffle_batch([label, image_content], batch_size=FLAGS.batch_size, num_threads=4,
                                   capacity=1000 + 3 * FLAGS.batch_size, min_after_dequeue=1000)
    sess = tf.Session()  # Membuat sesi. 
    tf.train.start_queue_runners(sess=sess)  # Memulai antrian. Jika perintah ini tidak dieksekusi, thread tetap terblokir. 
    labels, images = sess.run(batch)  # Mendapatkan hasil.

    Penjelasan berikut menjelaskan kode:

    • tf.train.string_input_producer: mengonversi file ke antrian. Gunakan sintaks tf.train.start_queue_runners untuk memulai antrian.

    • tf.train.shuffle_batch mencakup parameter berikut:

      • batch_size: jumlah data yang dikembalikan setiap kali tugas batch dijalankan.

      • num_threads: jumlah thread yang dijalankan. Nilai biasanya diatur ke 4.

      • capacity: jumlah data dari mana Anda ingin mengekstraksi data secara acak. Misalnya, jika dataset memiliki 10.000 data dan Anda ingin mengekstraksi data secara acak dari 5.000 data untuk dilatih, atur kapasitas menjadi 5.000.

      • min_after_dequeue: panjang minimum antrian yang dipertahankan. Nilai harus kurang dari atau sama dengan nilai capacity.

Bagaimana cara menulis data ke OSS?

Anda dapat menulis data ke OSS menggunakan salah satu metode berikut (file yang dihasilkan disimpan di direktori /model/example.txt):

  • Gunakan fungsi tf.gfile.FastGFile() untuk menulis file. Kode berikut menunjukkan fungsi sampel:

    tf.gfile.FastGFile(FLAGS.checkpointDir + 'example.txt', 'wb').write('hello world')
  • Gunakan fungsi tf.gfile.Copy() untuk menyalin file. Kode berikut menunjukkan fungsi sampel:

    tf.gfile.Copy('./example.txt', FLAGS.checkpointDir + 'example.txt')

Mengapa terjadi kesalahan OOM?

Kesalahan kehabisan memori (OOM) terjadi karena penggunaan memori mencapai maksimum 30 GB. Kami sarankan menggunakan fungsi gfile untuk membaca data dari OSS. Untuk informasi lebih lanjut, lihat bagian "Bagaimana cara membaca data dari OSS" dari topik ini.

Kasus penggunaan apa saja dari TensorFlow yang tersedia?

Apa peran model_average_iter_interval ketika dua GPU dikonfigurasi?

Jika parameter model_average_iter_interval tidak diatur, algoritma Stochastic Gradient Descent (SGD) paralel digunakan di GPU, dan gradien diperbarui di setiap iterasi. Jika parameter model_average_iter_interval lebih besar dari 1, metode rata-rata model digunakan untuk menghitung dua parameter model rata-rata setelah data dilatih beberapa kali pada interval iterasi tertentu. Parameter model_average_iter_interval menentukan jumlah pelatihan.

Ekspor model TensorFlow dalam format SavedModel?

Format SavedModel

Sebelum menggunakan prosesor resmi bawaan di Elastic Algorithm Service (EAS) dari Platform for AI (PAI) untuk menerapkan layanan model TensorFlow online, Anda harus mengekspor model dalam format SavedModel. Format SavedModel didefinisikan dan direkomendasikan oleh TensorFlow. Format SavedModel menggunakan struktur direktori berikut:

assets/
variables/
    variables.data-00000-of-00001
    variables.index
saved_model.pb|saved_model.pbtxt

Struktur direktori mencakup direktori berikut:

  • Direktori assets bersifat opsional. Direktori ini menyimpan file pendukung untuk layanan prediksi.

  • Direktori variables menyimpan variabel yang disimpan dengan memanggil metode tf.train.Saver.

  • Direktori saved_model.pb atau saved_model.pbtxt menyimpan MetaGraphDef dan SignatureDef. MetaGraphDef menyimpan logika pelatihan model dan SignatureDef menentukan input dan output layanan model.

Ekspor model dalam format SavedModel

Untuk informasi lebih lanjut tentang cara menggunakan TensorFlow untuk mengekspor model dalam format SavedModel, kunjungi Menyimpan dan Memulihkan. Jika model sederhana, Anda dapat menggunakan metode berikut untuk mengekspornya dalam format SavedModel:

tf.saved_model.simple_save(
  session,
  "./savedmodel/",
  inputs={"image": x},   ## x menentukan variabel input model.
  outputs={"scores": y}  ## y menentukan variabel output model.
)

Saat memanggil layanan prediksi online, Anda harus menetapkan parameter signature_name untuk model dalam permintaan. Jika model diekspor dengan memanggil metode simple_save(), nilai default parameter signature_name adalah serving_default.

Jika model kompleks, Anda dapat mengekspornya secara manual dalam format SavedModel, seperti yang ditunjukkan dalam kode sampel berikut:

print('Mengekspor model yang telah dilatih ke', export_path)
builder = tf.saved_model.builder.SavedModelBuilder(export_path)
tensor_info_x = tf.saved_model.utils.build_tensor_info(x)
tensor_info_y = tf.saved_model.utils.build_tensor_info(y)

prediction_signature = (
    tf.saved_model.signature_def_utils.build_signature_def(
        inputs={'images': tensor_info_x},
        outputs={'scores': tensor_info_y},
        method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME)
)

legacy_init_op = tf.group(tf.tables_initializer(), name='legacy_init_op')

builder.add_meta_graph_and_variables(
    sess, [tf.saved_model.tag_constants.SERVING],
    signature_def_map={
        'predict_images': prediction_signature,
    },
    legacy_init_op=legacy_init_op
)

builder.save()
print('Selesai mengekspor!')

Perhatikan deskripsi parameter berikut:

  • Parameter export_path menentukan jalur ke mana model diekspor.

  • Parameter prediction_signature menunjukkan SignatureDef yang menentukan input dan output model. Untuk informasi lebih lanjut, kunjungi SignatureDef. Dalam contoh ini, parameter signature_name diatur ke predict_images.

  • Metode builder.add_meta_graph_and_variables menentukan parameter untuk mengekspor model.

Catatan
  • Saat mengekspor model yang diperlukan untuk prediksi, Anda harus menentukan tf.saved_model.tag_constants.SERVING sebagai tag model yang diekspor.

  • Untuk informasi lebih lanjut tentang model TensorFlow, kunjungi TensorFlow SavedModel.

Konversi model Keras ke format SavedModel

Anda dapat memanggil metode model.save() Keras untuk mengonversi model Keras ke format H5. Namun, model Keras harus dikonversi ke format SavedModel untuk prediksi online. Untuk mengimplementasikan konversi format, Anda dapat memanggil metode load_model() untuk memuat model H5, dan kemudian mengekspornya dalam format SavedModel, seperti yang ditunjukkan dalam kode sampel berikut:

import tensorflow as tf
with tf.device("/cpu:0"):
    model = tf.keras.models.load_model('./mnist.h5')
    tf.saved_model.simple_save(
      tf.keras.backend.get_session(),
      "./h5_savedmodel/",
      inputs={"image": model.input},
      outputs={"scores": model.output}
    )

Konversi model Checkpoint ke format SavedModel

Saat memanggil metode tf.train.Saver() selama pelatihan model, model disimpan dalam format Checkpoint. Anda harus mengonversinya ke format SavedModel untuk prediksi online. Anda dapat memanggil metode saver.restore() untuk memuat model Checkpoint sebagai tf.Session, dan kemudian mengekspor model dalam format SavedModel, seperti yang ditunjukkan dalam kode sampel berikut:

import tensorflow as tf
# definisi variabel ...
saver = tf.train.Saver()
with tf.Session() as sess:
  # Inisialisasi v1 karena saver tidak akan melakukannya.
    saver.restore(sess, "./lr_model/model.ckpt")
    tensor_info_x = tf.saved_model.utils.build_tensor_info(x)
    tensor_info_y = tf.saved_model.utils.build_tensor_info(y)
    tf.saved_model.simple_save(
      sess,
      "./savedmodel/",
      inputs={"image": tensor_info_x},
      outputs={"scores": tensor_info_y}
    )