1、keras定义模型结构
keras是tensorflow的高级封装的深度学习库,操作简洁、方便,非常容易上手。在keras深度模型的搭建过程中,最基础最底层的就是各种 Layers 的搭建,其中,keras提供了两个接口供使用 Model, Sequential,前者相对灵活,大多数使用场景都能胜用;后者序列搭建模型,类似于一层一层的搭积木的形式,可以快速构建相对简单的模型。
在平时使用中,我们也可以继承Model类,自定义自己的网络结构,好像大家都这么干的,最近在研究语义分割相关的事宜,看到一篇论文,就像将其大概复现,论文题目好像为:Attention U-Net: Learning Where to Look for the Pancreas ,加入了attention机制的Unet,不知道具体效果如何。
下图来自其文章,可以具体看看。
其中,attention模块的具体操作流程如下图所示,感兴趣也可以搜搜看。
2、自定义网络结构
1、首先按照论文写的结构,自定义网络结构,然后通过summary()观察模型的结构。主要集成init与call方法,然后就可以完成模型的搭建,init里面进行一些需要用到层的声明以及一些变量,然后再 call 方法里面进行搭建模型。
2、但是,在此处,一直犯了一个错误,导致无法输出其具体的模型结构:报错内容为:ValueError: This model has not yet been built. Build the model first by calling build()
or calling fit()
with some data, or specify an input_shape
argument in the first layer(s) for automatic build.
3、看到此问题一脸懵逼,平时直接用的 Model 与 Sequential 重来没发生这种情况,原来这种方法里人家已经帮咱们自动build了,这样模型才知道具体的输入数据的形式。
4、解决方法:百度啊,直接添加一个build就行,输入咱们模型的尺寸即可。
atten.build(input_shape=(None,224,224,3))
3、感悟
路漫漫其修远兮,吾将上下而求索!!!
模型搭建过程中,各中shape的计算,很容易出现shape不符合的情况,组好先将模型设计出来,然后动手搭建,做到 心有模型,细嗅蔷薇。