راه
۴ کیو· سختپیشرفتهPYTHON۴ ثانیه · ۲۵۶ مگابایت

نرمال‌سازی دسته‌ای در آموزش و ارزیابی

لایه‌ی nn.BatchNorm1d در حالت آموزش (model.train()) هر ستون دسته را با میانگین و واریانس همان دسته استاندارد می‌کند، و هم‌زمان یک میانگین متحرک از آن‌ها نگه می‌دارد. در حالت ارزیابی (model.eval()) از همان میانگین‌های متحرک استفاده می‌کند — برای همین فراموش کردن model.eval() پیش‌بینی‌ها را به ترکیب دسته وابسته می‌کند.

با پیش‌فرض‌های PyTorch — γ=1\gamma = 1، β=0\beta = 0، momentum =0.1= 0.1، ϵ=10−5\epsilon = 10^{-5}، و شروع از running_mean =0= 0 و running_var =1= 1 — برای هر دسته‌ی آموزشی BB:

μB=میانگین ستون‌هاσB2=1n∑i(xi−μB)2x^i=xi−μBσB2+ϵ\mu_B = \text{میانگین ستون‌ها} \qquad \sigma^2_B = \frac{1}{n}\sum_i(x_i - \mu_B)^2 \qquad \hat x_i = \frac{x_i - \mu_B}{\sqrt{\sigma^2_B + \epsilon}} running_mean←0.9 running_mean+0.1 μBrunning_var←0.9 running_var+0.1 nn−1σB2\text{running\_mean} \leftarrow 0.9\,\text{running\_mean} + 0.1\,\mu_B \qquad \text{running\_var} \leftarrow 0.9\,\text{running\_var} + 0.1\,\frac{n}{n - 1}\sigma^2_B

توجه: نرمال‌سازی با واریانس اریب (1/n1/n) است ولی میانگین متحرک با واریانس نااریب (1/(n−1)1/(n-1)) به‌روز می‌شود. در ارزیابی:

x^=x−running_meanrunning_var+ϵ\hat x = \frac{x - \text{running\_mean}}{\sqrt{\text{running\_var} + \epsilon}}

تابع batchnorm(batches, X_eval) دسته‌ها (batches با شکل T×n×pT \times n \times p) را به ترتیب در حالت آموزش از لایه رد می‌کند، و بعد X_eval را در حالت ارزیابی. خروجی، پشت‌سرهم: running_mean، running_var، و خروجی ارزیابی (سطر به سطر).

نمونه‌ها

ورودی نمونه ۱
[[[[1.47, 2.93], [0.23, 3.31], [1.0, 2.49], [0.72, 3.21]], [[0.06, 1.18], [0.28, 3.36], [0.73, 0.8], [0.02, 0.9]]], [[0.7, 0.85], [1.8, 4.53], [-1.64, -3.78]]]
خروجی نمونه ۱
[0.1042, 0.4247, 0.8449, 0.9687, 0.6482, 0.4322, 1.8449, 4.1711, -1.8976, -4.272]

برای نوشتن پاسخ و دریافت امتیاز، ابتدا وارد حساب شوید.

ورود