AI-DSW 上修改嵌套式模型完成Resnet手势辨认

AI-DSW 上修改嵌套式模型完成Resnet手势辨认

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

进入DSW,现在只要KerasCode和KerasGraph两个Kernel完成了FastNeuralNetwork功用。

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

接下来咱们经过完成Resnet18完成手势辨认为例,体会AI-DSW的运用

咱们的使命为,手语英文字母数据会集包含用手语表明的26个英文字母的信息,咱们经过树立ResNet18模型进行手语英文字母辨认

AI-DSW 上修改嵌套式模型完成Resnet手势辨认

在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的模块,即残差块,根据残差块能够有用提高网络功能,提高模型泛化才能,如图所示:

AI-DSW 上修改嵌套式模型完成Resnet手势辨认

有了中心模块后,咱们可着手建立模型的中心结构,包含输入,卷积,残差,池化,全衔接,输出等一系列过程

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

在 DSW的官方介绍https://www.alibabacloud.com/help/zh/doc-detail/126303.htm 选用的是序贯式来做模型展现,这儿咱们发现,根据嵌套式战略相同能够做生成模型结构,如图所示:

AI-DSW 上修改嵌套式模型完成Resnet手势辨认

相同的,咱们依照官方文档介绍的,也可做模型可视化修改,调整参数等

AI-DSW 上修改嵌套式模型完成Resnet手势辨认

有了模型后,咱们界说丢失函数,参加练习集验证集来练习优化模型,终究得到成果。
AI-DSW 上修改嵌套式模型完成Resnet手势辨认

综上,体会了KerasGraph后,个人感觉它代表了最新的ai开发环境演进方向——相似轻代码(low code)修改器,能够快速构建模型结构并验证模型作用,提高了咱们对模型结构的完成功率,防止纠结与在TF过于繁琐的源码,而是Focus在模型结构优化自身,整体来说仍是不错的。

当然KerasGraph当时运用也存在一些问题:

  • 暂不支撑各类预练习模型,比方keras_bert,resnet这些,不过在支撑了预练习模型,乃至支撑对预练习模型终究几层做修改,将大大提高实用性
  • KerasGraph图形化界面前端占用过多内存,有的时分会导致页面卡塞
  • KerasGraph关于各层参数修改和界说易用性还需要提高,现在并不比查阅文档便利多少

当然这不阻碍KerasGraph已经是个较为超卓的模型展现东西,我也信任假以时日KerasGraph在模型修改上获得打破