正文共: 3002字 8图
预计阅读时间: 8分钟
好久没更新了,Lesson5是个坎,也不是里面内容有多难,可能是知识点比较杂乱,所以一直没有产出,今天把Lesson6看完了,视频1遍,练习一遍,文字一遍(Transcript),算是基本都理解了,所以上一课的内容之后更新吧。
1.概览
本节主要围绕两个例子:1.根据Rossmann商店运营数据预测未来销量 2.用宠物识别的例子讲解CNN原理
讲解了正则化 Regularization 的 dropout 和卷积神经网络 CNN
2.1核心概念
连续变量和非连续变量:很多看起来的连续变量作为类别效果更好,比如一周的第N天
Dropout:一种Regularization方法,可以避免过度拟合,原理是类似于随机抽一部分老师来监考,防止内外勾结,通过P值来控制挑选的概率
Batch Normalization:通过小批次的Normalization,加速训练,因为可以把问题简化到每个批次上
Transform:对图片进行亮度、饱和度、灰度、扭曲、翻转等操作,从而提高训练效果,因为相当于多了N倍的训练图像
Convolution & Kernel:类似于PS中的滤镜,通过一个N*N的kernel,将每个小块的图像重新加工成新图像上的点。最上面的这个3*3的就是Kernel,像一个过滤器,针对图像上的3*3的一个块,矩阵乘积后,生成新图像的一个点。http://setosa.io/ev/image-kernels
特征点热力图:让ML变得可以解释,通过热力图,显示机器是根据图像上的哪部分的特征点判断属于哪个类别,效果如下
2.2机器学习概念
Normalization:将数据转换到[0,1]区间,如下图公式,还有其他变种
Regularization:loss function的惩罚机制,防止overfit
Weight Decay:L2 regularization 的升级版
Model 内部结构,一个基础的block,2d就是二阶向量
Conv2d
BatchNorm2d
ReLu
Conv2d
BatchNorm2d
Data argumentation:数据增强,通过transform把图片各种变形,以达到更好的训练效果
Channel:用了多少个Kernel,就会产生多少channel,近似于feature,如图生成了16个channel,
Stride:步伐,为了降低内存占用,如果步伐为2,则每次和Kernel的运算会跳过一个,所以生成的tensor高宽会/2,channel会*2
Average pooling:相当于求纵向的平均值,比如最后生成了11*11*512的tensor,那就求11*11平面上每个点的纵向512个值的均值,这样得到的11*11的值就可以用于热力图的显示
2.3 FastAI命令
add_datepart:可以将日期转化成每周的第N天,每月每年的第N天,是否是月初或月末等
label class (label_cls=FloatList):设置label值为float,因为int会被当成分类任务,本节课是要预测销量
procs=[FillMissing, Categorify, Normalize]:数据训练前的一次性处理,process设置的简写
data.one_item(x):创建一个mini-batch的数据
data.cuda():放到GPU上
2.4 Pandas命令
train_df.head().T:可以转置表格数据
small_train_df.PromoInterval.cat.categories:查看类别
small_train_df['PromoInterval'].cat.codes[:5]:查看类别对应的编号,-1就是不存在的意思
2.5 PyTorch命令
hook:可以调取训练过程的任意环节
hook.store():存下来
t[None]:维度+1
3.1实例详细分析
根据Rossmann商店数据,还有竞争对手数据,预测销量
数据有点老,所以专门有个data_clean的文件先把数据处理一遍,主要是把需要的数据提炼出来合成一张表
先小范围测试下数据
主要是区分类别变量和连续变量,会把类别变量都映射成数字
空数据用类别方式标注
数据归一化Normalization
在准备完整数据
然后用tabular_learner跑数据
data = (TabularList.from_df(df, path=path, cat_names=cat_vars, cont_names=cont_vars, procs=procs,)
.split_by_idx(valid_idx)
.label_from_df(cols=dep_var, label_cls=FloatList, log=True)
.add_test(TabularList.from_df(test_df, path=path, cat_names=cat_vars, cont_names=cont_vars))
.databunch())
learn = tabular_learner(data, layers=[1000,500], ps=[0.001,0.01], emb_drop=0.04,
y_range=y_range, metrics=exp_rmspe)
3.2实例详细分析
宠物图片增强,找到cnn是通过哪部分的特征,识别了这张图,热力图
创建databunch
变形transform
cnn训练模型
卷积内核
热力图
grad-cam
src = ImageList.from_folder(path).split_by_rand_pct(0.2,seed=2)
def get_data(size, bs, padding_mode='reflection'):
return (src.label_from_re(r'([^/]+)_\d+.jpg$')
.transform(tfms, size=size, padding_mode=padding_mode)
.databunch(bs=bs).normalize(imagenet_stats))
learn = cnn_learner(data,models.resnet34,metrics=error_rate,bn_final=True)
def show_heatmap(hm):
_,ax = plt.subplots()
xb_im.show(ax)
ax.imshow(hm, alpha=0.8, extent=(0,352,352,0),
interpolation='bilinear', cmap='magma');
show_heatmap(avg_acts)
4.最后
本课还讲了platform.ai和AI的伦理,platform.ai是一个快速训练未打标签的数据的网站,AI伦理讲的是很多性别偏见,以及过度满足人性的推荐系统,酿成的悲剧,号召从业者用技术将生活变得更好,而不是制造更多冲突。
相关阅读
产品经理也能动手实践的AI (一)|(二)|(三)|(四)|(五)
人人都能搞懂的AI (一)|(二)|(三)|(四)
如果你喜欢思考,别忘记关注+置顶公众号哦!
我是Hawk,8年产品经理,目前专注AI机器学习。