介绍作为人类 , 我们有能力将在一项任务中获得的知识迁移到另一项任务中去 , 任务越简单 , 利用知识就越容易 。一些简单的例子是:
- 了解数学和统计学→学习机器学习
- 学会骑自行车→学骑摩托车
迁移学习是关于如何使用预训练好的网络 , 并将其应用到我们的定制任务中 , 将它从以前的任务中学到的知识进行迁移 。
迁移学习我们可以采用VGG 16和ResNet等架构 。这些架构经过了广泛的超参数调整 , 基于他们已经学到的 , 我们将这些知识应用到一个新的任务/模型中 , 而不是从头开始 , 这就是所谓的迁移学习 。
一些迁移学习模型包括:
- Xception
- VGG16
- VGG19
- Resnet, ResnetV2
- InceptionV3
- MobileNet
数据集链接:
https://www.kaggle.com/paultimothymooney/chest-xray-pneumonia
代码链接:
https://github.com/ajaymuktha/DeepLearning/blob/master/TransferLearning/transfer-learning.ipynb
数据集由一个训练集和测试集组成 , 子文件夹为normal(正常)和pneumonia(肺炎) 。pneumonia文件夹有肺炎患者的胸部x光图像 , normal文件夹中有正常的图像 , 即没有肺部疾病 。
安装Tensorflow如果你的电脑没有GPU , 你可以使用google colab , 或者你可以使用Jupyter Notebook 。如果你使用你的系统 , 请升级pip , 然后安装TensorFlow , 如下所示
文章插图
导入库
from keras.layers import Input, Lambda, Dense, Flattenfrom keras.models import Modelfrom keras.Applications.vgg16 import VGG16from keras.applications.vgg16 import preprocess_inputfrom keras.preprocessing import imagefrom keras.preprocessing.image import ImageDataGeneratorfrom keras.models import Sequentialimport numpy as npfrom glob import globimport matplotlib.pyplot as plt
调整图像大小这里 , 我们将调整所有图像的大小为224*224 , 因为我们使用VGG16模型 , 它接受224*224大小的图像 。# 调整图像大小IMAGE_SIZE = [224, 224]
训练和测试路径我们将指定训练和测试路径 。train_path = 'Datasets/train'valid_path = 'Datasets/test'
导入VGG16vgg = VGG16(input_shape=IMAGE_SIZE + [3], weights='imagenet', include_top=False)
在这里 , 我们将为我们的应用程序导入VGG16模型权重 。我们应该向模型声明一个图像大小 , 我们已经在上一步中完成了 , 参数3表示图像将接受RGB图像 , 即彩色图像 。为了训练我们的模型 , 我们使用imagenet权重 , include_top = False意味着它将从模型中删除最后的层 。
训练像VGG16、VGG19、Resnet等模型已经在成千上万的图像上进行了训练 , 这些权重用于对数千个类进行分类 , 因此我们使用这些模型权重对模型进行分类 , 因此我们不需要再次训练模型 。
# 不要训练现有的权重for layer in vgg.layers:layer.trainable = False
类数量我们使用glob来找出模型中类的数量 。train文件夹中的子文件夹数表示模型中的类数 。folders = glob('Datasets/train/*')
Flattening不管我们从VGG16得到的输出是什么 , 我们都要把它展平 , 我们把VGG16的最后一层去掉 , 这样我们就可以保留我们自己的输出层了 。我们用问题陈述中的类别数替换最后一层 。我们使用softmax做我们的激活函数 , 我们把它附加到x上 。x = Flatten()(vgg.output)prediction = Dense(len(folders), activation='softmax')(x)
模型我们将把它包装成一个模型 , 其中输入指的是我们从VGG16得到的 , 而输出是指我们在上一步中创建的输出层 。model = Model(inputs=vgg.input, outputs=prediction)model.summary()
推荐阅读
- 学习Numpy,看这篇文章就够啦
- 如何将物理机Windows系统迁移到VMware虚拟机?
- 活动回顾学习茶道礼仪,山东青州博物馆举行品茗悟道茶文化体验活动
- 学习高中化学有哪些方法和技巧
- 注意学习啦!夫妻恩爱的卧室风水有妙招
- 树莓派无屏上手指南
- 睡不着的原因
- 快来学习姜茶怎么煮,驱寒退烧姜茶的做法
- 机器学习中的音频特征:理解Mel频谱图
- 高尔夫教学须知 高尔夫学习技巧