Bagaimana cara mengekspresikan hal-hal dalam BrainScript
- Dapatkan penyorotan sintaks yang bagus untuk file konfigurasi BrainScript ?
- Mengekspresikan tingkat kesalahan pengklasifikasi biner saya?
- Mengekspresikan softmax dengan parameter suhu?
- Mengekspresikan mekanisme pembatasan?
- Mengekspresikan softmax melalui sumbu dinamis?
- Zona keluar?
- Membangun tensor 3D konstanta?
- Menggabungkan atau menggabungkan vektor dalam BrainScript?
- Menginterpretasikan kehilangan pelatihan?
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.