Bagikan melalui


Bagaimana cara mengekspresikan hal-hal dalam BrainScript

Dapatkan penyorotan sintaks yang bagus untuk file konfigurasi BrainScript

Berikut cara melakukannya jika Anda menggunakan vim; editor lain harus serupa

:set syntax=conf

Ini tidak sempurna tetapi jauh lebih baik daripada tidak ada penyorotan sintaks. Jika Anda tahu cara menulis .vim file sintaks, silakan kirimi kami permintaan pull.

Di Emacs, conf-mode paling cocok. Untuk beralih, tekan M-x untuk mulai memasukkan perintah, lalu masukkan conf-mode. Pada Windows Emacs, ada juga conf-windows-mode, namun mode itu tampaknya kadang-kadang dikacaukan oleh karakter khusus dalam komentar.

Mengekspresikan tingkat kesalahan pengklasifikasi biner saya

Jangan gunakan ClassificationError karena hanya berfungsi untuk label multikelas. Menggunakan operator aritmetika dan logis standar, Anda dapat mengekspresikan ini sebagai

err = (label != (prediction > 0.5))
...
evaluationNodes = (err)  

di mana kami berasumsi di sini bahwa prediksi adalah perkiraan probabilitas kelas positif yang diberikan input.

Mengekspresikan softmax dengan parameter suhu

Softmax suhu sangat mudah di BrainScript

TemperatureSoftmax (z, T) = Softmax (z / Constant (T))

Mengekspresikan mekanisme pembatasan

Cara paling sederhana adalah menggunakan

BS.Boolean.If (condition, thenExpression, elseExpression)

yang bekerja dengan skalar serta tensor (semua argumen dapat menyiarkan).

Mengekspresikan softmax melalui sumbu dinamis

Softmax melalui sumbu dinamis dapat dilakukan melalui pengulangan:

BrainScript:

SoftMaxOverSequence (z) = {
    # define a recursive expression for \log(\sum_{i=1}^t \exp(z_i))
    runningLogSumExp = LogPlus (z,
                           PastValue (0, runningLogSumExp, defaultHiddenActivation=-1e30)) 
    logSumExp = If (BS.Loop.IsLast (runningLogSumExp),  # if last entry
                /*then*/ runningLogSumExp,              # then copy that
                /*else*/ FutureValue (0, logSumExp))    # else just propagate to the front
    result = Exp (z - logSumExp)
}.result

Terapkan Zona Keluar

Anda mungkin bertanya-tanya apakah Dropout yang diterapkan ke Konstanta dievaluasi secara dinamis. Benar sekali! Oleh karena itu Zoneout sesingkat

Zoneout (x, xprev) =
{
    mask = Dropout (BS.Constants.OnesLike (x))
    res = BS.Boolean.If (mask, xprev, x)
}.res

Membangun tensor 3D konstanta

Saya ingin membangun tensor 3D konstanta di CNTK. Saya belajar cara menghasilkan array konstanta 1D dan 2D, saya dapat menumpuk (menggabungkan atau menggabungkan) mereka dan mengulanginya. Sekarang saya perlu menumpuk Tensor 2D untuk membuat tensor 3D?

Katakanlah Anda memiliki tiga tensor, misalnya.

A = ParameterTensor {100:200}
B = ParameterTensor {100:200}
C = ParameterTensor {100:200}

Anda sekarang dapat mengatakan

    ABC = Splice (A:B:C, axis=3)

yang akan memberi Anda tensor [100 x 200 x 3].

(Jika, di sisi lain, Anda telah mengatakan Splice (A:B:C, sumbu=1), Anda akan mendapatkan tensor [300 x 200], dan Splice (A:B:C, sumbu=2) akan memberi Anda tensor [100 x 600].)

Perhatikan bahwa untuk memata-matai dimensi baru, dimensi semua input harus cocok. Misalnya Anda tidak dapat menumpuk ParameterTensor {100:200} dan ParameterTensor {100:50} di sepanjang sumbu 3 (tetapi Anda dapat menumpuknya di sepanjang sumbu 2, yang akan memberi Anda tensor [100 x 250]).

Perhatikan juga bahwa indeks sumbu berbasis 1, seperti dalam matematika. Misalnya dimensi baris matriks adalah sumbu pertama, sumbu=1, dan dimensi kolom adalah sumbu kedua, sumbu=2.

Menginterpretasikan kerugian pelatihan

Bagaimana CNTK menghitung kerugian pelatihan (sebagai tebal) setelah epoch selesai? Apakah model akhir melalui seluruh set pelatihan untuk mendapatkan nilai, atau apakah hanya rata-rata kerugian pelatihan miniBatch yang dihasilkan oleh model saat diperbarui selama masa?

Finished Epoch[ 1 of 100]: [Training] CE = 0.15920662 * 59999999; totalSamplesSeen = 59999999; learningRatePerSample = 9.9999997e-05; epochTime=641.392s
Final Results: Minibatch[1-3510]: CE = 0.32190538 * 3592929
Finished Epoch[ 1 of 100]: [Validate] CE = 0.32190538 * 3592929

Jawabannya adalah yang terakhir (di mana rata-rata ditimbang oleh sampel dalam minibatch jika panjangnya bervariasi). Yaitu Anda tidak mendapatkan kehilangan pelatihan aktual dari model dalam keadaan berada di akhir masa.