深层神经网络权值矩阵分析
WeightWatcher的Python项目详细描述
体重观察者
weight watcher分析deep的权重矩阵中的胖尾 神经网络(dnns)。
这个工具可以预测 一系列dnn,如vgg11、vgg13,…,甚至是整个dnn系列 resnet模型-不需要测试集!
这依赖于最近对Heavy (Fat) Tailed Self Regularization in DNNs
的研究。该工具允许计算 一系列dnn,使用相同的数据进行训练,但使用不同的 超参数,甚至不同但相关的架构。为了 例如,它可以预测vgg19-bn比vgg19具有更好的泛化性,并且 优于VGG16、VGG16等。
容量指标类型:
有两个指标可用。平均值log norm,这是 更快但不太准确。平均值加权α更高 精确但速度慢得多,因为它需要同时计算 层权重矩阵,然后将singluar/特征值拟合为 权力法则。
- 对数范数(默认、快速、不太准确)
- 加权alpaha(慢,更准确)
下面是所有 当前的预训练VGG模型。
注意:我们没有查看imagenet测试数据来构建这个图。
支持的框架
- 路缘石
- 火把
支持的层
- 密集/线性/完全连接(和conv1d)
- conv2d
安装
pip install weightwatcher
用法
Weight Watcher可与Keras和Pythorch两种型号配合使用。
importweightwatcheraswwwatcher=ww.WeightWatcher(model=model)results=watcher.analyze()watcher.get_summary()watcher.print_results()
高级用法
analyze函数具有以下几个功能
defanalyze(self,model=None,layers=[],min_size=50,max_size=0,compute_alphas=False,compute_lognorms=True,plot=False):...
加权α(慢)
幂律拟合,这里有pytorch示例
importweightwatcheraswwimporttorchvision.modelsasmodelsmodel=models.vgg19_bn(pretrained=True)watcher=ww.WeightWatcher(model=model)results=watcher.analyze(compute_alphas=True)data.append({"name":"vgg19bntorch","summary":watcher.get_summary()})### data:{'name':'vgg19bntorch','summary':{'lognorm':0.81850576,'lognorm_compound':0.9365272010550088,'alpha':2.9646726379493287,'alpha_compound':2.847975521455623,'alpha_weighted':1.1588882728052485,'alpha_weighted_compound':1.5002343912892515}},
容量指标(所有层的评估):
- log norm:平均对数norm,快速
- alpha_权重:平均加权alpha,慢
- alpha:平均alpha,不加权(慢,没有那么有用)
复合平均值:
同上,但平均值的计算略有不同。这个遗嘱 在即将出版的报纸上发表文章。
还提供了每一层的结果;请参见Demo Notebook
其他选项
按层类型过滤
results=watcher.analyze(layers=ww.LAYER_TYPE.CONV1D|ww.LAYER_TYPE.DENSE)
按ID筛选
results=watcher.analyze(layers=[20])
最小、最大权重矩阵
设置分析的权重矩阵的最小和最大大小。 设置max对于快速调试很有用。
results=watcher.analyze(min_size=50,max_size=500)
绘图(对于权重α=真值)
为每个层权重矩阵创建日志图,以观察 幂律适用于功
results=watcher.analyze(compute_alphas=True,plot=True)
链接
Calculation Consulting homepage
Traditional and Heavy Tailed Self Regularization in Neural Network Models
以上两篇论文的笔记本 (https://github.com/CalculatedContent/ImplicitSelfRegularization)
Recent talk (presented at NERSC Summer 2018)
纸质笔记本 (https://github.com/CalculatedContent/PredictingTestAccuracies)
释放
发布到pypi存储库:
# 1. Check in the latest code with the correct revision number (__version__ in __init__.py) vi weightwatcher/__init__.py # Increse release number, remove -dev to revision number git commit # 2. Check out latest version from the repo in a fresh directory cd ~/temp/ git clone https://github.com/CalculatedContent/WeightWatcher cd WeightWatcher/ # 3. Use the latest version of the tools python -m pip install --upgrade setuptools wheel twine # 4. Create the package python setup.py sdist bdist_wheel # 5. Test the package twine check dist/* # 6. Upload the package to PyPI twine upload dist/* # 7. Tag/Release in github by creating a new release (https://github.com/CalculatedContent/WeightWatcher/releases/new)