深层神经网络权值矩阵分析

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模型。alt text

注意:我们没有查看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):...

Demo Notebook

加权α(慢)

幂律拟合,这里有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)

释放

发布到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)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
regex Java split(),使用包含特定字符的整个单词作为分隔符   java无法启动发现(Android附近连接API v2)   多线程Java:producerconsumer两个线程停止工作,冻结   java XDocReport:生成的docx文档错误“Word在尝试打开文件时遇到错误”   安卓 java。ClassCastException:java。util。无法将HashMap强制转换为com。保罗。ImapNotes。杂项。OneNote   找不到java CassandraSQLContext密钥   java重命名Derby模式   java是否可以扩展使用生成器模式和私有构造函数的类?   java如何获取Hotmail验证码图像   如何用Java在项目文件夹中创建文件?   java JOptionPane取消按钮和获取输入   变量如何打开equals语句以接受Java中的多个参数?   Ping url并获取java中的状态   tokenize是否有任何基于Java的智能单词标记器可以对句子中的相邻单词进行标记?   java如何从纹理下删除上面的纹理?   java递归除以3   弗莱希指数问题(Java)   Java正则表达式模式匹配在第二次出现时不起作用