AI-DSW 上编辑嵌套式模型实现Resnet手势识别

简介: 体验了KerasGraph后,个人感觉它代表了最新的ai开发环境演进方向——类似轻代码(low code)编辑器,可以快速构建模型结构并验证模型效果,提升了我们对模型结构的实现效率,避免纠结与在TF过于繁琐的源码,而是Focus在模型结构优化本身,总体来说还是不错的。

AI-DSW 上编辑嵌套式模型实现Resnet手势识别

AI-DSW(Data science workshop)是专门为算法开发者准备的云端深度学习开发环境,

进入DSW,目前只有KerasCode和KerasGraph两个Kernel实现了FastNeuralNetwork功能。

  • KerasCode:先写深度学习网络代码,然后将代码转成图
  • KerasGraph:直接通过画布构建深度学习网络,并且将图转成代码

接下来我们通过实现Resnet18实现手势识别为例,体验AI-DSW的使用

我们的任务为,手语英文字母数据集中包含用手语表示的26个英文字母的信息,我们通过建立ResNet18模型进行手语英文字母识别

_2020_05_16_9_39_01

在AI-DSW 的官方文档中推荐我们采用序贯式(sequential)的方式构建模型,但是嵌套式封装来构建模型可以使结构更清晰,一些内容可以复用,我们来具体看下代码:

def Conv2d_BN(x, nb_filter, kernel_size, strides=(1, 1), padding='same'):

    x = Conv2D(nb_filter, kernel_size, padding=padding, strides=strides)(x)
    x = BatchNormalization(axis=3)(x)
    x = Activation('relu')(x)
    return x

首先我们将最常见的CNN模块封装,包括卷积,BN,激活函数;用于Resnet模型的复用;

def identity_Block(inpt, nb_filter, kernel_size, strides=(1, 1), with_conv_shortcut=False):
    x = Conv2d_BN(inpt, nb_filter=nb_filter, kernel_size=kernel_size, strides=strides, padding='same')
    x = Conv2d_BN(x, nb_filter=nb_filter, kernel_size=kernel_size, padding='same')
    if with_conv_shortcut:#shortcut的含义是:将输入层x与最后的输出层y进行连接,如上图所示
        shortcut = Conv2d_BN(inpt, nb_filter=nb_filter, strides=strides, kernel_size=kernel_size)
        x = add([x, shortcut])
        return x
    else:
        x = add([x, inpt])
        return x

接下来我们实现Resnet用于Residual Block的模块,即残差块,基于残差块可以有效提升网络性能,提升模型泛化能力,如图所示:

image

有了核心模块后,我们可着手搭建模型的核心结构,包括输入,卷积,残差,池化,全连接,输出等一系列步骤

def resnet_18(width,height,channel,classes):
    inpt = Input(shape=(width, height, channel))
    # x = ZeroPadding2D((3, 3))(inpt)
 
    #conv1
    x = Conv2d_BN(inpt, nb_filter=64, kernel_size=(7, 7), strides=(2, 2), padding='valid')
    x = MaxPooling2D(pool_size=(3, 3), strides=(2, 2), padding='same')(x)
 
    #conv2_x
    x = identity_Block(x, nb_filter=64, kernel_size=(3, 3))
    x = identity_Block(x, nb_filter=64, kernel_size=(3, 3))
 
    #conv3_x
    x = identity_Block(x, nb_filter=128, kernel_size=(3, 3), strides=(2, 2), with_conv_shortcut=True)
    x = identity_Block(x, nb_filter=128, kernel_size=(3, 3))
 
    #conv4_x     
    x = identity_Block(x, nb_filter=256, kernel_size=(3, 3), strides=(2, 2), with_conv_shortcut=True)
    x = identity_Block(x, nb_filter=256, kernel_size=(3, 3))
 
    #conv5_x
    x = identity_Block(x, nb_filter=512, kernel_size=(3, 3), strides=(2, 2), with_conv_shortcut=True)
    x = identity_Block(x, nb_filter=512, kernel_size=(3, 3))

    x = GlobalAvgPool2D()(x)
    x = Dense(classes, activation='softmax')(x)
 
    model = Model(inputs=inpt, outputs=x)
    return model

基于嵌套式策略同样可以做生成模型结构,如图所示:

_2020_05_16_10_40_44

同样的,我们按照官方文档介绍的,也可做模型可视化编辑,调整参数等

_2020_05_16_11_19_10

有了模型后,我们定义损失函数,加入训练集验证集来训练优化模型,最终得到结果。
_2020_05_16_10_47_38

综上,体验了KerasGraph后,个人感觉它代表了最新的ai开发环境演进方向——类似轻代码(low code)编辑器,可以快速构建模型结构并验证模型效果,提升了我们对模型结构的实现效率,避免纠结与在TF过于繁琐的源码,而是Focus在模型结构优化本身,总体来说还是不错的。

当然KerasGraph当前使用也存在一些问题:

  • 暂不支持各类预训练模型,比如keras_bert,resnet这些,不过在支持了预训练模型,甚至支持对预训练模型最后几层做编辑,将大大提升实用性
  • KerasGraph图形化界面前端占用过多内存,有的时候会导致页面卡塞
  • KerasGraph对于各层参数编辑和定义易用性还需要提升,目前并不比查阅文档方便多少

当然这不妨碍KerasGraph已经是个较为出色的模型展示工具,我也相信假以时日KerasGraph在模型编辑上取得突破

目录
相关文章
|
4天前
|
机器学习/深度学习 人工智能 并行计算
"震撼!CLIP模型:OpenAI的跨模态奇迹,让图像与文字共舞,解锁AI理解新纪元!"
【10月更文挑战第14天】CLIP是由OpenAI在2021年推出的一种图像和文本联合表示学习模型,通过对比学习方法预训练,能有效理解图像与文本的关系。该模型由图像编码器和文本编码器组成,分别处理图像和文本数据,通过共享向量空间实现信息融合。CLIP利用大规模图像-文本对数据集进行训练,能够实现zero-shot图像分类、文本-图像检索等多种任务,展现出强大的跨模态理解能力。
20 2
|
12天前
|
机器学习/深度学习 人工智能 自然语言处理
当语言遇见智慧火花:GPT家族历代模型大起底,带你见证从平凡到卓越的AI进化奇迹!
【10月更文挑战第6天】随着自然语言处理技术的进步,GPT系列模型(Generative Pre-trained Transformers)成为该领域的明星。从GPT-1的开创性工作,到GPT-2在规模与性能上的突破,再到拥有1750亿参数的GPT-3及其无需微调即可执行多种NLP任务的能力,以及社区驱动的GPT-NeoX,这些模型不断进化。虽然它们展现出强大的语言理解和生成能力,但也存在如生成错误信息或偏见等问题。本文将对比分析各代GPT模型的特点,并通过示例代码展示其部分功能。
49 2
|
1月前
|
机器学习/深度学习 人工智能 UED
OpenAI o1模型:AI通用复杂推理的新篇章
OpenAI发布了其最新的AI模型——o1,这款模型以其独特的复杂推理能力和全新的训练方式,引起了业界的广泛关注。今天,我们就来深入剖析o1模型的特点、背后的原理,以及一些有趣的八卦信息。
293 73
|
5天前
|
人工智能 自然语言处理
从迷茫到精通:揭秘模型微调如何助你轻松驾驭AI新热点,解锁预训练模型的无限潜能!
【10月更文挑战第13天】本文通过简单的问题解答形式,结合示例代码,详细介绍了模型微调的全流程。从选择预训练模型、准备新任务数据集、设置微调参数,到进行微调训练和评估调优,帮助读者全面理解模型微调的技术细节和应用场景。
26 6
|
12天前
|
人工智能 自然语言处理 安全
【通义】AI视界|Adobe推出文生视频AI模型,迎战OpenAI和Meta
本文精选了过去24小时内的重要科技新闻,包括微软人工智能副总裁跳槽至OpenAI、Adobe推出文本生成视频的AI模型、Meta取消高端头显转而开发超轻量设备、谷歌与核能公司合作为数据中心供电,以及英伟达股价创下新高,市值接近3.4万亿美元。这些动态展示了科技行业的快速发展和激烈竞争。点击链接或扫描二维码获取更多资讯。
|
10天前
|
机器学习/深度学习 人工智能 TensorFlow
解锁AI潜力:让开源模型在私有环境绽放——手把手教你搭建专属智能服务,保障数据安全与性能优化的秘密攻略
【10月更文挑战第8天】本文介绍了如何将开源的机器学习模型(如TensorFlow下的MobileNet)进行私有化部署,包括环境准备、模型获取与转换、启动TensorFlow Serving服务及验证部署效果等步骤,适用于希望保护用户数据并优化服务性能的企业。
25 4
|
1月前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
86 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
10天前
|
机器学习/深度学习 人工智能 自然语言处理
揭开模型微调Fine-Tuning的神秘面纱:如何在预训练基础上巧妙调整,解锁定制AI解决方案的秘密武器
【10月更文挑战第8天】模型微调是在预训练模型基础上,利用特定领域数据进一步训练,以优化模型在特定任务上的表现。此方法广泛应用于自然语言处理和计算机视觉等领域,通过调整预训练模型的部分或全部参数,结合适当的正则化手段,有效提升模型性能。例如,使用Hugging Face的Transformers库对BERT模型进行微调,以改善文本匹配任务的准确率。
21 1
|
10天前
|
机器学习/深度学习 PyTorch 算法框架/工具
|
1月前
|
存储 人工智能 算法
阿里云AI基础设施升级亮相,模型算力利用率提升超20%
阿里云AI基础设施升级亮相,模型算力利用率提升超20%
172 18

热门文章

最新文章