产品经理也能动手实践的AI(七)- 正规化&深入卷积神经网络

正文共: 3002字 8图

预计阅读时间: 8分钟

3256c20ef393a6cd76a6c8b3180e9563.jpeg

好久没更新了,Lesson5是个坎,也不是里面内容有多难,可能是知识点比较杂乱,所以一直没有产出,今天把Lesson6看完了,视频1遍,练习一遍,文字一遍(Transcript),算是基本都理解了,所以上一课的内容之后更新吧。

1.概览

本节主要围绕两个例子:1.根据Rossmann商店运营数据预测未来销量 2.用宠物识别的例子讲解CNN原理

讲解了正则化 Regularization 的 dropout 和卷积神经网络 CNN

2.1核心概念

  1. 连续变量和非连续变量:很多看起来的连续变量作为类别效果更好,比如一周的第N天

  2. Dropout:一种Regularization方法,可以避免过度拟合,原理是类似于随机抽一部分老师来监考,防止内外勾结,通过P值来控制挑选的概率

  3. Batch Normalization:通过小批次的Normalization,加速训练,因为可以把问题简化到每个批次上

  4. Transform:对图片进行亮度、饱和度、灰度、扭曲、翻转等操作,从而提高训练效果,因为相当于多了N倍的训练图像

  5. Convolution & Kernel:类似于PS中的滤镜,通过一个N*N的kernel,将每个小块的图像重新加工成新图像上的点。最上面的这个3*3的就是Kernel,像一个过滤器,针对图像上的3*3的一个块,矩阵乘积后,生成新图像的一个点。http://setosa.io/ev/image-kernelsfa923639855ced6d2958699ce575171f.jpeg

  6. 特征点热力图:让ML变得可以解释,通过热力图,显示机器是根据图像上的哪部分的特征点判断属于哪个类别,效果如下

43d77101a6aa533e57f0c5cbf7274933.jpeg

2.2机器学习概念

  • Normalization:将数据转换到[0,1]区间,如下图公式,还有其他变种

    fd8ec103c15cba4c798d24e53eaeb755.png

  • Regularization:loss function的惩罚机制,防止overfit

  •   Weight Decay:L2 regularization 的升级版

  • Model 内部结构,一个基础的block,2d就是二阶向量

    • Conv2d

    • BatchNorm2d

    • ReLu

    • Conv2d

    • BatchNorm2d

  • Data argumentation:数据增强,通过transform把图片各种变形,以达到更好的训练效果

  • 卷积:一个用RGB显示的图片,会存储为一个3阶张量,于是也需要把Kernel变为一个3阶张量2c385b4bfdbe9ddd950d026feed58bef.jpeg

  • 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商店数据,还有竞争对手数据,预测销量

  1. 数据有点老,所以专门有个data_clean的文件先把数据处理一遍,主要是把需要的数据提炼出来合成一张表

  2. 先小范围测试下数据

    1. 主要是区分类别变量和连续变量,会把类别变量都映射成数字

    2. 空数据用类别方式标注

    3. 数据归一化Normalization

  3. 在准备完整数据

  4. 然后用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是通过哪部分的特征,识别了这张图,热力图

  1. 创建databunch

  2. 变形transform

  3. cnn训练模型

  4. 卷积内核

  5. 热力图

  6. 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 (一)|(二)|(三)|(四)

2dd0f8a9cd1c8ca51920e575824152df.png

如果你喜欢思考,别忘记关注+置顶公众号哦!

我是Hawk,8年产品经理,目前专注AI机器学习。

2d9b982f46df6bba983b431882a66cb1.jpeg

好看的人都点了在看 4acc7aba554f44cabb143c9b31350ee1.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值