基于keras框架,利用预训练模型参数训练自己的数据

本篇博客主要是对网络中的全连接层进行修改,分为以下两种情况:

(1)如何使用预训练模型(1000类)训练自己的数据(2类):主要修改全连接层;

(2)在自己搭建的模型中使用像cifar10,ImageNet训练时保存的模型,在如何将预训练参数加载到自己的数据中。

如果有错误,欢迎批评指正,谢谢。

针对(1):

比如加载keras中的inceptionv3预训练模型:

我认为这篇文章写得很全:https://www.jianshu.com/p/23295376c44d

from keras.applications.inception_v3 import InceptionV3

from keras.models import Model,load_model

from keras.layers import Dense, GlobalAveragePooling2D

from keras.utils import plot_model

base_model = InceptionV3(weights='imagenet', include_top=False)  

# weights='imagenet':表示加载使用ImageNet预训练的参数;

#include_top是否包含全连接层

print(base_model.summary()) # 打印模型概况

x = base_model.output

x = GlobalAveragePooling2D()(x)

#【2】增加两个全连接层

x = Dense(1024, activation='relu')(x)

predictions = Dense(class_self, activation='softmax')(x)  #class_self:根据自己数据类别设定

self_model = Model(inputs = model.inputs, outputs = predictions)

model.compile(optimizer='rmsprop', loss='categorical_crossentropy')

 

 

针对(2)

与(1)还是有差别的:

首先,加载模型:

model = load_model('./cifar_model.h5')

model = Model(inputs = model.inputs, outputs = model.get_layer('flatten_1').output)  

#flatten_1:根据自己想要提取网络第几层来设定

x = model.output

predictions = Dense(class_self, activation='softmax')(x)  #class_self:根据自己数据类别设定

self_model = Model(inputs = model.inputs, outputs = predictions)

model.compile(optimizer='rmsprop', loss='categorical_crossentropy')

之后就是模型训练了model.fit()  

 

参考文章:

https://www.jianshu.com/p/23295376c44d

https://blog.csdn.net/qq_29462849/article/details/83010854

 

 

 

 

 

 

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值