Apa perbedaan antara langkah dan epoch di TensorFlow?

125

Di sebagian besar model, ada parameter langkah yang menunjukkan jumlah langkah untuk menjalankan data . Namun saya melihat di sebagian besar penggunaan praktis, kami juga menjalankan fungsi fit N epoch .

Apa perbedaan antara menjalankan 1000 langkah dengan 1 epoch dan menjalankan 100 langkah dengan 10 epoch? Mana yang lebih baik dalam praktiknya? Adakah logika yang berubah antara periode yang berurutan? Mengacak data?

Yang
sumber
1
Jason Brownlee dari machinelearningmastery.com memiliki jawaban yang sangat bagus dan mendetail untuk pertanyaan itu.
BmyGuest

Jawaban:

84

Epoch biasanya berarti satu iterasi atas semua data pelatihan. Misalnya jika Anda memiliki 20.000 gambar dan ukuran kumpulan 100 maka epoch harus berisi 20.000 / 100 = 200 langkah. Namun saya biasanya hanya menetapkan jumlah langkah tetap seperti 1000 per epoch meskipun saya memiliki kumpulan data yang jauh lebih besar. Di akhir periode, saya memeriksa biaya rata-rata dan jika membaik, saya menyimpan pos pemeriksaan. Tidak ada perbedaan antara langkah-langkah dari satu zaman ke zaman lainnya. Saya hanya memperlakukan mereka sebagai pos pemeriksaan.

Orang-orang sering kali memilih kumpulan data di antara zaman. Saya lebih suka menggunakan fungsi random.sample untuk memilih data yang akan diproses di zaman saya. Jadi katakanlah saya ingin melakukan 1000 langkah dengan ukuran batch 32. Saya hanya akan mengambil 32.000 sampel secara acak dari kumpulan data pelatihan.

chasep255
sumber
47
Bagian kedua dari jawaban Anda salah, menurut saya. Epoch didefinisikan sebagai satu siklus melalui data pelatihan. Ini bukan zaman, jika Anda memperbaiki jumlah langkah. Secara analogis, Anda tidak dapat menyebutnya epoch, jika Anda mengambil contoh pelatihan secara independen di setiap langkah. Anda dapat menyimpan pos pemeriksaan Anda dan melakukan pemeriksaan setiap N Langkah, tetapi ini tidak berarti bahwa N Langkah menjadi sebuah zaman. Saya akan menghindari menyebut zaman ini dalam kode, itu berpotensi membingungkan.
MarvMind
84

Langkah pelatihan adalah satu pembaruan gradien. Dalam satu langkah batch_size banyak contoh diproses.

Epoch terdiri dari satu siklus penuh melalui data pelatihan. Ini biasanya banyak langkah. Sebagai contoh, jika Anda memiliki 2.000 gambar dan menggunakan ukuran batch 10, epoch terdiri dari 2.000 gambar / (10 gambar / langkah) = 200 langkah.

Jika Anda memilih gambar pelatihan kami secara acak (dan independen) di setiap langkah, Anda biasanya tidak menyebutnya epoch. [Di sinilah jawaban saya berbeda dari yang sebelumnya. Lihat juga komentar saya.]

MarvMind
sumber
Saya mengedit perhitungan 200 langkah tetapi lupa log in, jadi jika Anda ingin berbicara dengan "pengguna tidak dikenal" ... Saya di sini
Chris Chiasson
16

Karena saya saat ini sedang bereksperimen dengan API tf.estimator, saya ingin menambahkan temuan saya yang berembun di sini juga. Saya belum tahu apakah penggunaan parameter langkah dan epochs konsisten di seluruh TensorFlow dan oleh karena itu saya hanya berkaitan dengan tf.estimator (khususnya tf.estimator.LinearRegressor) untuk saat ini.

Langkah-langkah pelatihan ditentukan oleh num_epochs: stepstidak ditentukan secara eksplisit

estimator = tf.estimator.LinearRegressor(feature_columns=ft_cols)
train_input =  tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
estimator.train(input_fn=train_input)

Komentar: Saya telah menyetel num_epochs=1untuk input pelatihan dan entri dokumen untuk numpy_input_fnmemberi tahu saya "num_epochs: Integer, jumlah masa untuk mengulang data. Jika Noneakan berjalan selamanya." . Dengan num_epochs=1contoh di atas, pelatihan berjalan tepat x_train.size / batch_size times / steps (dalam kasus saya ini adalah 175000 langkah karena x_trainmemiliki ukuran 700000 dan batch_size4).

Langkah-langkah pelatihan ditentukan oleh num_epochs: stepsdidefinisikan secara eksplisit lebih tinggi dari jumlah langkah yang secara implisit didefinisikan olehnum_epochs=1

estimator = tf.estimator.LinearRegressor(feature_columns=ft_cols)
train_input =  tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
estimator.train(input_fn=train_input, steps=200000)

Komentar: num_epochs=1dalam kasus saya berarti 175.000 langkah ( x_train.size / batch_size dengan x_train.size = 700.000 dan batch_size = 4 ) dan ini persis jumlah langkahnya estimator.trainmeskipun parameter langkah disetel ke 200.000 estimator.train(input_fn=train_input, steps=200000).

Langkah-langkah pelatihan ditentukan oleh steps

estimator = tf.estimator.LinearRegressor(feature_columns=ft_cols)
train_input =  tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
estimator.train(input_fn=train_input, steps=1000)

Komentar: Meskipun saya telah mengatur num_epochs=1kapan memanggil numpy_input_fnpelatihan berhenti setelah 1000 langkah. Ini karena steps=1000di estimator.train(input_fn=train_input, steps=1000)menimpa num_epochs=1in tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True).

Kesimpulan : Apapun parameter num_epochsuntuk tf.estimator.inputs.numpy_input_fndan stepsuntuk estimator.trainditentukan, batas bawah menentukan jumlah langkah yang akan dijalankan.

dmainz.dll
sumber
11

Dengan kata mudah
Epoch: Epoch dianggap sebagai jumlah satu lintasan dari seluruh dataset
Langkah: Dalam tensorflow satu langkah dianggap sebagai jumlah epoch dikalikan dengan contoh dibagi dengan ukuran batch

steps = (epoch * examples)/batch size
For instance
epoch = 100, examples = 1000 and batch_size = 1000
steps = 100
Muhammad Umar Amanat
sumber
Umar, saya mendapatkan hasil yang lebih baik dengan menggunakan rumus Anda tetapi hanya ingin tahu mengapa setiap orang memiliki rumus yang berbeda? Seperti yang dikatakan orang lain di atas, langkah = (jumlah total gambar) / ukuran tumpukan.
Satyendra Sahani
@SatyendraSahani Formula ini saya dapat dari salah satu instruktur kursus GCP yang ditawarkan di coursera, semoga anda mendapatkan hasil yang lebih baik.
Muhammad Umar Amanat
@Umar, tetapi terkadang jumlah sampelnya sangat besar. Seperti dalam kasus kami, kami memiliki 99.000 sampel. Jika kita memilih ukuran batch 8 dan epochs 20. jumlah total step_size adalah (20 * 99000) / 8 = 247.500. Angka yang sangat tinggi. di sana saya mulai meragukan metode ini.
Satyendra Sahani
8

Epoch: Epoch pelatihan menunjukkan penggunaan lengkap semua data pelatihan untuk penghitungan dan pengoptimalan gradien (melatih model).

Langkah: Langkah pelatihan berarti menggunakan satu ukuran kumpulan data pelatihan untuk melatih model.

Jumlah langkah pelatihan per epoch: total_number_of_training_examples/ batch_size.

Jumlah total langkah pelatihan: number_of_epochsx Number of training steps per epoch.

Xin Su
sumber
2

Karena belum ada jawaban yang diterima: Secara default, waktu menjalankan semua data pelatihan Anda. Dalam hal ini Anda memiliki n langkah, dengan n = Training_lenght / batch_size.

Jika data pelatihan Anda terlalu besar, Anda dapat memutuskan untuk membatasi jumlah langkah selama satu periode. [ Https://www.tensorflow.org/tutorials/structured_data/time_series?_sm_byp=iVVF1rD6n2Q68VSN]

Ketika jumlah langkah mencapai batas yang Anda tetapkan, proses akan dimulai kembali, memulai epoch berikutnya. Saat bekerja di TF, data Anda biasanya diubah terlebih dahulu menjadi daftar batch yang akan dimasukkan ke model untuk pelatihan. Pada setiap langkah Anda memproses satu kelompok.

Mengenai apakah lebih baik menyetel 1000 langkah untuk 1 epoch atau 100 langkah dengan 10 epoch, saya tidak tahu apakah ada jawaban langsung. Namun berikut adalah hasil dari melatih CNN dengan kedua pendekatan menggunakan tutorial data rangkaian waktu TensorFlow:

Dalam hal ini, kedua pendekatan tersebut menghasilkan prediksi yang sangat mirip, hanya profil pelatihan yang berbeda.

langkah = 20 / epochs = 100 masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

langkah = 200 / epochs = 10

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Yoan B.
sumber