Tensorflow2.0之tf.keras.applacations迁移学习

当在做使用神经网络做分类(或回归)问题时,我们倾向于选择较复杂的网络来提高准确率,但是复杂的网络会使得训练时间变很长。而如果我们使用其他人已经训练好的模型来给我们的任务做分类,需要训练的参数数量就会大大减少。
使用tf.keras.applacations可以轻松地进行迁移学习,下面用VGG19模型举例。

直接使用模型(包含分类层)

对输入的图片进行预处理

因为输入VGG19的图片需要满足VGG19的要求,所以我们要先对输入的图片进行预处理,其实就是对图片进行归一化处理。一般 image 的范围是[0, 255],经过预处理后,image 的范围会变成VGG19希望输入的范围([-127.5, 127.5]),当然,不是所有网络都是这个范围,像GoogLeNet的输入范围就是[-1, 1]。

image_pre = tf.keras.applications.vgg19.preprocess_input(image)

实例化VGG19模型

vgg = tf.keras.applications.VGG19(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, classes=1000)
  • include_top:是否保留顶层的所有全连接网络
  • weights:None代表随机初始化,即不加载预训练权重。'imagenet’代表加载预训练权重
  • input_tensor:可填入Keras tensor作为模型的图像输出tensor
  • input_shape:可选,仅当include_top=False有效,应为长为3的tuple,指明输入图片的shape,图片的宽高必须大于71,如(150,150,3)
  • classes:可选,图片分类的类别数,仅当include_top=True并且不加载预训练权重时可用。

将图片输入VGG19进行分类

prediction_probabilities = vgg(image_pre)

此时得到的数据形状为1x1000,即这张图片分别属于这1000个类别的概率。

查看概率最高的5个类别

predicted_top_5 = tf.keras.applications.vgg19.decode_predictions(prediction_probabilities.numpy())[0]

已有网络+自定义分类层

此时在导入VGG19时,不需要导入分类层(即所有全连接层)。

实例化VGG19模型

vgg = tf.keras.applications.VGG19(include_top=False, weights='imagenet')
vgg.trainable = False

vgg.trainable = False表示不对vgg中的参数进行训练。

在vgg的基础上添加自己的分类层

model = tf.keras.Sequential([
  vgg,
  tf.keras.layers.GlobalAveragePooling2D(),
  tf.keras.layers.Dense(1)
])

之后的训练过程就很常规了。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cofisher

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值