b belajar.myudak

Split train/val sebelum membuat jendela

Bagi urutan token menjadi bagian train dan validasi lalu buat jendela di masing-masing bagian:

  1. n = int(len(ids) * (1 - val_frac)), train = ids[:n], val = ids[n:].
  2. Dari setiap bagian, buat semua jendela input s[i : i + block] dengan i dari 0 sampai len(s) - block - 1 (seperti X di soal sebelumnya).

Kembalikan [X_train, X_val].

ids = [1..10], block = 2, val_frac = 0.4  →  train = [1..6], val = [7, 8, 9, 10]
X_train = [[1,2], [2,3], [3,4], [4,5]]
X_val   = [[7,8], [8,9]]

Kebocoran data

Kalau jendela dibuat dulu lalu diacak dan dibagi, jendela [5, 6, 7] bisa masuk train sementara [6, 7, 8] masuk validasi. Keduanya hampir identik, jadi loss validasi terlihat bagus padahal model hanya menghafal. Validasi yang bocor membuatmu salah memilih ukuran model, lama training, dan hyperparameter.

Aturannya: potong dulu, baru proses. Untuk teks, ambil bagian awal sebagai train dan bagian akhir sebagai validasi, tanpa ada jendela yang melintasi batas keduanya.

Membaca kurva loss

  • train turun, val turun: model masih belajar.
  • train turun, val naik: overfitting. Hentikan training (early stopping), tambah data, atau tambah regularisasi (dropout, weight decay).
  • keduanya tinggi: model terlalu kecil atau training belum cukup lama (underfitting).

Penjelasan

Yang diminta. Potong urutan token menjadi train dan val dulu, baru buat jendela di masing-masing potongan.

Langkah di kode:

  1. n = int(len(ids) * (1 - val_frac)): batas potong.
  2. train, val = ids[:n], ids[n:]: dua potongan yang bersambung, tanpa diacak.
  3. windows = lambda s: [s[i : i + block] for i in range(len(s) - block)], diterapkan ke masing-masing potongan.

Kenapa urutannya penting. Jendela yang bertetangga hampir identik: [5, 6, 7] dan [6, 7, 8] berbagi dua token. Jika jendela dibuat dari seluruh urutan lalu diacak ke train/val, val berisi jendela yang hampir sama dengan yang ada di train. Loss validasi jadi terlalu optimis, karena model cukup menghafal. Dengan memotong dulu, tidak ada jendela yang melintasi batas.

Cek case 1. 10 token, val_frac = 0.4, jadi n = 6. Train [1..6] memberi 4 jendela; val [7, 8, 9, 10] memberi 2 jendela. Jendela [6, 7] yang melintasi batas tidak ada di keduanya.

Yang dikembalikan: [X_train, X_val]. Salah satunya boleh kosong jika potongannya terlalu pendek.

Topik
datasetvalidasikebocoran data
Petunjuk 1

Bagi urutan token menjadi dua potong yang bersambung: 90% awal untuk train, sisanya untuk val. Jangan diacak.

Petunjuk 2

Baru setelah itu buat jendela di masing-masing potongan. Jendela tidak boleh melintasi batas train/val.

Python 3.14 · NumPy

Pengaturan editor

Ukuran font
Ukuran huruf di editor.
Ukuran tab
Lebar indentasi. Otomatis: 2 spasi untuk TypeScript, 4 untuk Python.
Key bindings
Ganti ke mode Vim.
Nomor baris relatif
Nomor baris dihitung dari posisi kursor (berguna untuk gerakan Vim).
Word wrap
Baris panjang dilipat agar muat di lebar editor.
IntelliSense
Saran kode otomatis saat mengetik (Ctrl+Spasi tetap bisa dipakai saat mati).

Nilai ditulis sebagai JSON. Output yang diharapkan dihitung dari solusi referensi.