Mendapatkan kombinasi dari beberapa list di Python

Beberapa bulan lalu, saya mengerjakan skripsi yang menerapkan grid search *sigh* dengan beberapa kombinasi hyperparameter/hyperparams. Tentu tak menyenangkan jika saya harus membuat kombinasi secara manual.

learning_rate_list = [0.001, 0.01, 0.1, 1.0, 10, 100]
decay_rate_list = [0.00005, 0.0001, 0.001, 0.01, 0.1]
momentum_rate_list = [0.1, 0.2, 0.4, 0.8, 1]
batch_size_list = [64, 128, 256, 512, 1024, 2048]

Dari 4 list di atas, harus dibuat kombinasi hyperparams untuk dimasukkan sebagai argumen saat membuat model di Keras. (Btw, saya tahu bahwa batch size bukanlah hyperparams.) Misalnya salah satu kombinasi adalah:

learning_rate = 0.1
decay_rate = 0.001
momentum_rate = 0.1
batch_size = 64

Berarti jika ada 4 list dengan masing-masing memiliki elemen sejumlah 6, 5, 5, dan 6, maka akan muncul 900 kombinasi dari keempat list tersebut. Sungguh tak menyenangkan jika saya harus memasukkan satu per satu kombinasi hyperparams ke dalam model. Not good. Jadi yang saya lakukan adalah membuat daftar kombinasi sebanyak 900 itu terlebih dahulu.

import itertools
import random

combination_list = list(itertools.product(*[learning_rate_list, decay_rate_list, momentum_rate_list, batch_size_list]))

print(len(combination_list))
print(combination_list[:3])

Jika kode di atas dijalankan, maka konsol Python akan menampilkan jumlah elemen dari daftar kombinasi yaitu 900 dan 3 kombinasi pertama. Saya juga tak lupa untuk mengacak daftar kombinasi tersebut agar nantinya pemrosesan grid search tidak urut dari kombinasi (0.001, 0.00005, 0.1, 64) sampai (100, 0.1, 1, 2048).

random.shuffle(combination_list)

Good luck!

How to concatenate two numpy arrays

Two-dimensional array

a = np.array([[1,5,9],[2,6,10]])
b = np.array([[3,7,11],[4,8,12],[13,14,15]])
np.concatenate((a,b))
np.vstack((a,b))

Both concatenate and vstack return same output:

array([[ 1, 5, 9],
      [ 2, 6, 10],
      [ 3, 7, 11],
      [ 4, 8, 12],
      [13, 14, 15]])
array([[ 1, 5, 9],
       [ 2, 6, 10],
       [ 3, 7, 11],
       [ 4, 8, 12],
       [13, 14, 15]])

One dimensional array

a = np.array([1,5,3])
b = np.array([3,7,11])
np.concatenate((a,b))
np.vstack((a,b))

concatenate returns:

array([ 1, 5, 3, 3, 7, 11])

but vstack returns:

array([[ 1, 5, 3],
       [ 3, 7, 11]])