نقدم الشبكات العصبية التلافيفية بايزي مع استدلال متغير ، وهو متغير من الشبكات العصبية التلافيفية (CNNs) ، حيث يتم استنتاج توزيعات الاحتمالات الخلفية المستعصية على الأوزان بواسطة Bayes بواسطة Backprop . نوضح كيف تحقق طريقة الاستدلال المتنوع المقترح لدينا العروض المكافئة للاستدلال المتكرر في البنية المتطابقة على عدة مجموعات بيانات (MNIST ، CIFAR10 ، CIFAR100) كما هو موضح في الورقة.


يحتوي هذا المستودع على نوعين من تنفيذ Bayesian Lauer:
BBB (Bayes by Backprop):
بناء على هذه الورقة. هذه الطبقة عينات جميع الأوزان بشكل فردي ثم تجمعها مع المدخلات لحساب عينة من التنشيط.
BBB_LRT (Bayes by backprop w/ خدعة إعادة التثبيت المحلية):
تجمع هذه الطبقة بين Bayes by Backprop مع خدعة إعادة التثبيت المحلية من هذه الورقة. هذه الخدعة تجعل من الممكن عينة مباشرة من التوزيع على التنشيط.
لإنشاء شبكة بايزي مخصصة ، وراثي layers.misc.ModuleWrapper misc.modulewrapper بدلاً من torch.nn.Module واستخدام BBBLinear و BBBConv2d من أي من الطبقات المحددة ( BBB أو BBB_LRT ) بدلاً من torch.nn.Linear و torch.nn.Conv2d . علاوة على ذلك ، لا حاجة لتحديد الطريقة forward . سيتم الاعتناء بها تلقائيًا بواسطة ModuleWrapper .
على سبيل المثال:
class Net ( nn . Module ):
def __init__ ( self ):
super (). __init__ ()
self . conv = nn . Conv2d ( 3 , 16 , 5 , strides = 2 )
self . bn = nn . BatchNorm2d ( 16 )
self . relu = nn . ReLU ()
self . fc = nn . Linear ( 800 , 10 )
def forward ( self , x ):
x = self . conv ( x )
x = self . bn ( x )
x = self . relu ( x )
x = x . view ( - 1 , 800 )
x = self . fc ( x )
return xيمكن تحويل الشبكة أعلاه إلى بايزي على النحو التالي:
class Net ( ModuleWrapper ):
def __init__ ( self ):
super (). __init__ ()
self . conv = BBBConv2d ( 3 , 16 , 5 , strides = 2 )
self . bn = nn . BatchNorm2d ( 16 )
self . relu = nn . ReLU ()
self . flatten = FlattenLayer ( 800 )
self . fc = BBBLinear ( 800 , 10 )FlattenLayer قبل أول كتلة BBBLinear .forward للنموذج إلى إرجاع tuple كـ (logits, kl) .priors كحجة إلى الطبقات. القيمة الافتراضية هي: priors = {
'prior_mu' : 0 ,
'prior_sigma' : 0.1 ,
'posterior_mu_initial' : ( 0 , 0.1 ), # (mean, std) normal_
'posterior_rho_initial' : ( - 3 , 0.1 ), # (mean, std) normal_
}حاليًا ، يتم دعم مجموعات البيانات والموديلات التالية.
python main_bayesian.py
config_bayesian.py python main_frequentist.py
config_frequentist.py layers/ : يحتوي على ModuleWrapper و FlattenLayer و BBBLinear و BBBConv2d .
models/BayesianModels/ : يحتوي على نماذج بايزي قياسية (BBBLENET ، BBBALEXNET ، BBB3CONV3FC).
models/NonBayesianModels/ : يحتوي على نماذج قياسية غير بيسية (Lenet ، Alexnet).
checkpoints/ : دليل نقطة التفتيش: سيتم حفظ النماذج هنا.
tests/ : الحالات الأساسية غير المتوفرة للطبقات والنماذج.
main_bayesian.py : تدريب وتقييم نماذج بايزي.
config_bayesian.py : hyperparameters للملف main_bayesian .
main_frequentist.py : تدريب وتقييم نماذج غير بيسية (متكررة).
config_frequentist.py : hyperparameters لملف main_frequentist .
هناك نوعان من أوجه عدم اليقين: aleatoric و extemic .
عدم اليقين aleatoric هو مقياس للاختلاف في البيانات وعدم اليقين المعرفي يحدث النموذج.
هنا ، يتم توفير طريقتين في uncertainty_estimation.py ، هاتان 'softmax' و 'normalized' ويعتمدان على التوالي على المعادلة 4 من هذه الورقة والمعادلة 15 من هذه الورقة.
أيضًا ، يمكن استخدام uncertainty_estimation.py لمقارنة أوجه عدم اليقين بواسطة شبكة عصبية بايزي على مجموعة بيانات MNIST و notMNIST . يمكنك تقديم حجج مثل:
net_type : lenet ، alexnet أو 3conv3fc . الافتراضي هو lenet .weights_path : أوزان لـ net_type المحددة. الافتراضي هو 'checkpoints/MNIST/bayesian/model_lenet.pt' .not_mnist_dir : دليل مجموعة بيانات notMNIST . الافتراضي هو 'data' .num_batches : عدد الدُفعات التي تحتاج إلى حساب عدم اليقين.ملحوظات :
layer_type و activation_type المستخدمة في uncertainty_etimation.py من config_bayesian.py من أجل مطابقة الأوزان المقدمة.إذا كنت تستخدم هذا العمل ، يرجى الاستشهاد:
@article{shridhar2019comprehensive,
title={A comprehensive guide to bayesian convolutional neural network with variational inference},
author={Shridhar, Kumar and Laumann, Felix and Liwicki, Marcus},
journal={arXiv preprint arXiv:1901.02731},
year={2019}
}
@article{shridhar2018uncertainty,
title={Uncertainty estimations by softplus normalization in bayesian convolutional neural networks with variational inference},
author={Shridhar, Kumar and Laumann, Felix and Liwicki, Marcus},
journal={arXiv preprint arXiv:1806.05978},
year={2018}
}
}