在训练较大网络时, 往往想加载预训练的模型, 但若想在网络结构上做些添补, 可能出现问题一二...

一下是添补的几种情形, 此处以单输出回归任务为例:

# 添在末尾:
base_model = InceptionV3(weights='imagenet', include_top=False)
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1, activation='relu')(x) model = Model(inputs=base_model.input, outputs=x)
model.summary()
# 添在开头和末尾:
# 在开头加1x1卷积层, 使4通道降为3通道, 再传入InceptionV3
def head_model(input_shape=(150, 150, 4)):
input_tensor = Input(input_shape)
x = Conv2D(128, (1, 1), activation='relu')(input_tensor)
x = Conv2D(3, (1, 1), activation='relu')(x)
model = Model(inputs=input_tensor, outputs=x, name='head')
return model head_model = head_model()
body_model = InceptionV3(weights='imagenet', include_top=False)
base_model = Model(head_model.input, body_model(head_model.output))
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1, activation='relu')(x) model = Model(inputs=base_model.inputs, outputs=x, name='net')
base_model.summary()
# 两数据输入流合并于末尾:
base_model = InceptionV3(weights='imagenet', include_top=False, input_shape=(150, 150, 3))
flat = Flatten()(base_model.output)
input_K = Input((100, )) # another_input
K_flow = Activation(activation='linear')(input_K)
x = concatenate([flat, K_flow]) # 合流
x = Dense(1024, activation='relu')(x)
x = Dense(512, activation='relu')(x)
x = Dense(1, activation='relu')(x)
model = Model(inputs=[*base_model.inputs, input_K], outputs=x) # 数据生成器那里也以这种形式生成([x_0, x_1], y)即可.
model.summary()

References:

末尾

开头

末尾合流_0 末尾合流_1

附相关问题:

#开头

在名为convXd_Y的shape得到的是(a, b, c, d), 但本应该为(z, y, x, w) -- 在确保没有模型拼接时的低级错误时, 可尝试将在pre-trained的模型前的那几层, 如Conv2D层, 赋以如name='head_conv_0'等 与 框架默认赋予的形如convXd_Y 不会冲突的名字, 不然按默认的来, pre-trained的模型中的第一个卷积层属性会被赋予你开头新添加的第一个卷积层中, 故生上错. 但其实, 你也可以手动先从pre-trained的模型中get_weights(), 继而逐层往新搭建的模型里set_weights(), 详见Keras相关文档.

#末尾合流

ValueError: The shape of the input to "Flatten" is not fully defined (got (None, None, 512)_1

ValueError: The shape of the input to "Flatten" is not fully defined (got (None, None, 512)_2

最新文章

  1. error: could not read CFBundleIdentifier from Info.plist (null)解决方法之一
  2. SVN使用总结
  3. unslider的用法详解
  4. iOS:控制器间的数据传递
  5. About Curah
  6. MySql修改默认端口号,修改my.ini的端口号
  7. js中的运算符和条件语句
  8. PCB的阻抗控制
  9. hdu-2814-Interesting Fibonacci-斐波那契周期节
  10. WebX框架学习笔记之一
  11. vue.js实例对象+组件树
  12. Tomcat性能优化及JVM内存工作原理
  13. Python基础和原反补码及表达式
  14. HDU 5445 Food Problem(多重背包+二进制优化)
  15. linux命令总结vmstat命令
  16. SFTP文件上传与下载(window 上传文件到linux服务器)
  17. 15分钟入门lua
  18. Wireshark数据包分析(一)——使用入门
  19. Java学习记录-Lambda表达式示例
  20. XSS学习笔记

热门文章

  1. uni-app开发经验分享六:页面跳转及提示框
  2. 容器化安装Mysql 8.0 并部署主从复制
  3. JVM(四)打破双亲委派和SPI机制
  4. 大促密集,CDN如何保障电商体验如丝般顺滑?
  5. 糊糊的学习笔记--Fiddle抓包
  6. ELK (elasticsearch+kibana+logstash+elasticsearch-head) 华为云下载地址
  7. Soul API 网关源码解析 02
  8. 在不同情况下connect失败和ping不通的数据分析
  9. 关于POI相关通用方法源码
  10. java架构《并发线程高级篇二》