Kaggle猫狗识别Pytorch详细搭建过程
文章源码链接,包括Notebook和对应的Pycharm项目。求个Star!!
需求Kaggle比赛链接 ,给出猫狗图片,然后预测图片中是狗的概率。
训练集有25,000张图片,测试集12,500 张图片。
自己最开始构思大致框架的时候的一个思维导图:
包的导入需要注意的是将tqdm 改为tqdm.notebook,从而在notebook环境下获得更好的体验。因为导入tqdm的话,会发生进度条打印多次的情况,体验很不好
12345678910111213import os import pandas as pd from PIL import Imageimport torchfrom torch.utils.data import Datasetfrom torchvision import transforms,models,utilsfrom tqdm.notebook import tqdm# from tqdm import tqdm_notebook as tqdmfrom torch import nnimport matplotlib.pyplot as pltim ...
LSTM与Prophet时间序列预测实验
LSTM与Prophet时间序列预测实验分别使用Pytorch构建的LSTM网络与Facebook开源的Prophet工具对时间序列进行预测的一个对比小实验,同时作为一个小白也借着这个实验来学习下Pytorch的使用,因为第一次使用,所以会比较详细的注释代码。
使用的数据为了与Prophet进行对比,因此使用了Prophet官网例子上用到的数据集。该时间序列数据集来自维基百科上面对美国橄榄球运动员佩顿·曼宁(Peyton Williams Manning)的日访问量的记录日志,时间跨度为2007年12月10号到2016年1月20号共2905条数据。
Jupyter代码与数据集地址在我的github上,欢迎star。
LSTMLSTM的介绍参考夕小瑶与陈诚的介绍,代码主要参考凌空的桨与源码链接 ,在Pytorch1.3.1的版本上面改了一下,主要是测试的逻辑修改成了使用测试集以及取消了Variable的使用。整体的逻辑是使用前面的两天的数据来预测下一天的数据,网络的结构是使用了两层LSTM与一层线性回归层。
数据预处理首先是数据的预处理代码如下:
123456789101112131 ...
NSQ学习笔记2——lookupd
在官方教程Demo中,首先需要启动的程序就是lookupd,因此首先从lookupd程序进行学习。loookupd的作用参见上篇简介文章,作为中间件将生产者与消费者解耦,通过lookupd进行节点发现,以及生产者和消费者的互相发现。
启动main函数的位置在 nsq/apps/nsqlookupd/main.go文件中。代码很简洁:
123456func main() { prg := &program{} if err := svc.Run(prg, syscall.SIGINT, syscall.SIGTERM); err != nil { logFatal("%s", err) }}
这里面主要使用svc这个运行框架包来提供程序的启动和安全退出。使用svc这个启动框架监听SIGINT和SIGTERM这两个信号,通过安全退出来保证相关defer函数得以执行,以及关键日志能够被记录。如果不监听信号,kill -9这样的强制退出会使得程序的defer函数等不执行,没有退出日志也会使得后续排查问题比 ...
NSQ学习笔记1——简介
NSQ是一个使用Go开发的分布式消息队列,对于学习Go语言和消息队列而言都是一个非常不错的开源项目,因此记录下学习NSQ的一些笔记。
简介官网上NSQ宣传的特点包括
分布式——去中心化,无单点故障,推模型来降低消息延迟
可扩展——可水平扩展
运维友好——容易配置和部署,提供预编译和Docker镜像版本
易集成——支持主流语言的客户端,以及HTTP接口发送消息实际简单体验下来,的确部署和启动都比较快速方便,不需要提前做大量的配置就可以简单启动demo。
作为消息队列,NSQ的消息语义保证有:
消息默认非持久化。消息保存在内存中,超过存储水位后会临时存到磁盘中。
消息传递最少一次。这也意味着使用者自己去处理消息重传后导致的幂等问题。
接受到的消息是无序的。主要是因为各个节点之前没有共享数据造成的,官方建议使用者自己使用延迟窗口来进行排序。
消费者最终一定会发现所有生产者。
架构设计Topic与Kafka的Topic设计做一个简单的对比,方便更好的学习。NSQ中和Kafka一样使用Topic来组织消息也主要是发布定于模式,但使用推模型发送消息,而Kafka是基于拉模型的。因此实时性上 ...
C专家编程读书笔记
第一章 C 穿越时空的迷雾
每次编写新函数时,都应该使用函数原型。(可以放在头文件中)
const关键字限定的变量,表示该变量只读。最有用的地方是用来限定函数的形参,防止函数内部修改实参指针所指的数据。const并不表示该变量是常量。
尽量不使用unsigned 无符号类型,只在使用位段和二进制掩码时使用无符号类型。
进行比较的时候,使操作数均为有符号数或者无符号数。
下面的代码int 在比较的时候会升级为unsigned int, 从-1转换后得到的结果是非常大的正整数,从而if语句不会进入。
123456789101112int solution() { int array[] = { 23, 34,12,17,204,99,16}; int d = -1, x; if (d <= (int) (sizeof(array) / sizeof(array[0])) - 2){ // 不加int 不会进入if语句 cout << d << endl ...
C语言传递指针参数的陷阱
简介师兄发来一段代码问代码是否有误。
12345678910void Malloc1(char *p, int num) { p = (char*)malloc(num * sizeof(char));// 传进来的地址值没有用到,没有使用解引用。}void MyTest1() { char *s = NULL; Malloc1(s, 10); strcpy(s, "hello"); printf("%s\n", s);}
基础知识二级指针指针是一个变量,它的值是一个地址,地址指向为一个对应类型的变量。
赋值符号=, 左边是一个地址,右边是赋给该地址的值。变量是一个地址的别名。
&符号int &a =b a是b的引用,是b的别名,此时&用来表示引用
单独使用时,取地址符&,用来获得一个变量的地址。&a为变量a的地址
*符号int *a = &b a是指向b的指针,此时*表示指针变量
解引用符*,用来得到指针指向的内存地址的值。*a为a这个指针指向的对象的值。
...
Measuring and Benchmarking Power Consumption and Energy Efficiency
来源ICPE 18
关键词功率,能效,性能,基准,测量,负载水平,SPEC
摘要
显存能耗测量方法不考虑多个负载级别和工作负载组合。
介绍了PTDaemon 能耗测量工具和Chauffeur 能耗评测框架
SPEC SERT 包含的工作负载,并介绍行业标准的计算效率基准
引言
如何精确测量能耗?
数据中心的冗余机制(灾难备份)导致的额外负载需要被考虑
SPEC 能耗方法学多重负载级别下进行能耗效率测评
功率测量是在SPEC PTDaemon中实现的,它与功率分析仪和温度传感器进行通信。工作负载分派,结果收集和测试执行由Chauffeur框架处理。
方法遵守的原则
可重现
公平
可验证
可使用
评测电力要求
均方根电力测量
每秒通过通讯接口将测量值记录到外部设备上
不确定性少于1%
定期校准至国家标准
设备配置控制和程序界面记录
能够处理安培数峰值(波峰因数),以在恶劣的功率条件下实现正确的读数
考虑环境温度
PTDaemon基于TCP-IP的公共接口集成到基准线束中,对评测软件隐藏不同硬件接口的协议和行为
通过PTDaemon与传感器进行交互(TCP/IP),设备类型由守护 ...
Extremely Large Minibatch SGD:Training ResNet-50 on ImageNet in 15 Minutes
摘要本文通过将minibatch size提高到32k实现了在ImageNET上用15分钟训练完ResNet50。为了保证精读使用了RMSprop warm-up,batch normalization,以及slow-start learning rate schedule.
引言训练深度神经网络在计算上是昂贵的。更高的可扩展性(更大的数据集和更复杂的模型)和更高的生产率(更短的培训时间以及更快的试验和错误)要求通过分布式计算来加速。本文证明,在不影响准确性经过精心设计的软件和硬件系统的情况下,使用large batch可以进行高度并行的训练。
方法主要使用了《Accurate, large minibatch SGD: training ImageNet in 1 hour》文章的方法。
RMSprop Warm-up本文发现主要的挑战是训练开始时的优化难度。为了解决这个问题,本文从RMSprop [7]开始训练,然后逐步过渡到SGD。
momentum SGD 和RMSprop 的结合
\begin{aligned}
m_{t} &=\mu_{2} m_{t-1}+\left( ...
Convolutional Neural Networks for Sentence Classification
来源2014 EMNLP
关键词摘要本文报告了一系列在卷积神经网络(CNN)上进行的一系列实验,这些卷积神经网络在针对句子级别分类任务的预训练词向量之上进行了训练。本文表明,几乎没有超参数调整和静态矢量的简单CNN在多个基准上均能获得出色的结果。通过微调学习特定于任务的向量可进一步提高性能。本文另外建议对体系结构进行简单的修改,以允许使用特定于任务的向量和静态向量。本文讨论的CNN模型在7个任务中的4个改进了现有技术,其中包括情感分析和问题分类。
结论
图表引言在自然语言处理中,深度学习方法的许多工作都涉及通过神经语言模型学习单词向量表示并对学习的词向量进行合成以进行分类。Word Vector:本质上是特征提取器,可在其维度上编码单词的语义特征。在这种密集表示中,语义上接近的词在较低维向量空间中同样接近(以欧几里得或余弦距离)。
CNN模型在语义解析,搜索查询,句子建模以及其他的一些NLP任务中取得了出色的结果。
本文从无监督的神经语言模型获得的单词向量之上训练一个具有卷积层的简单CNN。单词向量为Mikolov等从1000亿单词的谷歌新闻中预训练得到。使单词向量保持静态,仅学习模型 ...
LARGE BATCH OPTIMIZATION FOR DEEP LEARNING TRAINING BERT IN 76 MINUTES
来源ICLR 2020
关键词摘要Large Batch加速训练的方法LARS,在注意力机制模型比如BERT上表现不好,性能提升在各个任务中表现不一致。本文首先研究一种有原则的分层自适应策略,以使用Large mini-batches来加快深度神经网络的训练。使用这种策略,本文开发了一种称为LAMB的新的分层自适应大批量优化技术。本文提供LAMB以及LARS的收敛分析,表明算法可以在一般非凸设置下的收敛到固定点。
LAMB在各种任务(例如BERT和RESNET-50训练)中的表现出色,而超参数调整却非常少。在BERT训练中,本文的优化程序可以使用非常大的32868批量,而不会降低性能。通过batch size增加到TPUv3 Pod的内存限制,BERT训练时间可以从3天减少到仅76分钟。 LAMB实现公布在网上 )
引言随着大规模数据集的出现,即使使用诸如梯度梯度下降(SGD)等计算有效的优化方法来训练大型深度神经网络也变得特别具有挑战性。即训练大型模型的时间变得非常长。
本文的目标是研究和开发优化技术,以加速训练大型深度神经网络,其中主要集中在基于SGD变体的方法上。SGD的可扩展性 ...