您当前的位置:首页 > 电脑百科 > 人工智能

迁移学习概论

时间:2020-09-03 10:06:21  来源:  作者:

介绍

作为人类,我们有能力将在一项任务中获得的知识迁移到另一项任务中去,任务越简单,利用知识就越容易。一些简单的例子是:

  • 了解数学和统计学→学习机器学习
  • 学会骑自行车→学骑摩托车

到目前为止,大多数机器学习和深度学习算法都是针对解决特定任务而设计的。如果分布发生变化,这些算法会再次被重建,并且很难重建和重新训练,因为它需要计算能力和大量的时间。

迁移学习是关于如何使用预训练好的网络,并将其应用到我们的定制任务中,将它从以前的任务中学到的知识进行迁移。

迁移学习我们可以采用VGG 16和ResNet等架构。这些架构经过了广泛的超参数调整,基于他们已经学到的,我们将这些知识应用到一个新的任务/模型中,而不是从头开始,这就是所谓的迁移学习。

一些迁移学习模型包括:

  • Xception
  • VGG16
  • VGG19
  • Resnet, ResnetV2
  • InceptionV3
  • MobileNet

应用迁移学习实现医学应用

在此应用程序中,我们将检测患者是否患有肺炎。我们使用Kaggle数据集进行分类。下面给出了数据集和代码的链接。

数据集链接

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, Flatten
from keras.models import Model
from keras.Applications.vgg16 import VGG16
from keras.applications.vgg16 import preprocess_input
from keras.preprocessing import image
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
import numpy as np
from glob import glob
import matplotlib.pyplot as plt

调整图像大小

这里,我们将调整所有图像的大小为224*224,因为我们使用VGG16模型,它接受224*224大小的图像。

# 调整图像大小
IMAGE_SIZE = [224, 224]

训练和测试路径

我们将指定训练和测试路径。

train_path = 'Datasets/train'
valid_path = 'Datasets/test'

导入VGG16

vgg = 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()
迁移学习概论

 

上图是我们模型的摘要,在全连接层,我们有两个节点,因为两个不同的类别我们有肺炎和正常。

编译

我们使用categoricaa_cross_entropy作为损失,adam优化器和精度作为度量标准来编译我们的模型。

model.compile(
  loss='categorical_crossentropy',
  optimizer='adam',
  metrics=['accuracy']
)

预处理

为了避免过度拟合,我们将对训练图像进行一些变换,如果不进行变换,训练集和测试集的精度会有很大的差异。

我们执行一些几何变换,比如水平翻转图像、垂直翻转图像、放大、缩小等等,我们应用它,这样我们的模型就不会过拟合我们的训练图像。我们使用ImageDataGenerator类执行上述方法。

我们不为测试集应用转换,因为我们只使用它们来评估,我们测试集的唯一任务就是重新调整图像大小,因为在训练部分,我们为图像定义了一个可以输入网络的目标大小。

from keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rescale = 1./255,
                                   shear_range = 0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip = True)

test_datagen = ImageDataGenerator(rescale = 1./255)

flow_from_directory将图像增强过程连接到我们的训练集。我们需要传递我们训练集的路径。Target size是需要输入神经网络的图像的大小。batch size定义32,class mode是分类(categorical)的,因为我们只有两个输出。

training_set = train_datagen.flow_from_directory('Datasets/train',
                                                 target_size = (224, 224),
                                                 batch_size = 32,
                                                 class_mode = 'categorical')

现在我们定义从目录导入测试映像的测试集。我们定义了参数,跟训练集一样。

test_set = test_datagen.flow_from_directory('Datasets/test',
                                            target_size = (224, 224),
                                            batch_size = 32,
                                            class_mode = 'categorical')

拟合模型

我们将拟合我们的模型,并声明epoch的数量为5,每个epoch的长度是训练集的长度,验证的长度是测试集的长度。

r = model.fit_generator(
  training_set,
  validation_data=test_set,
  epochs=5,
  steps_per_epoch=len(training_set),
  validation_steps=len(test_set)
)
迁移学习概论

 

很好,我们达到了97.7%的准确率和91.5%的验证准确率,这就是迁移学习的力量。希望你喜欢这篇关于迁移学习的教程。



Tags:迁移学习   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
“终有一天,人工智能会像我们看待非洲平原上低级生物的化石一样看待我们。在人工智能眼中,人类只是直立行走的猿猴,用着粗糙的语言和简陋的工具,从诞生起就注定会灭绝。”&mdash...【详细内容】
2020-12-17  Tags: 迁移学习  点击:(147)  评论:(0)  加入收藏
介绍作为人类,我们有能力将在一项任务中获得的知识迁移到另一项任务中去,任务越简单,利用知识就越容易。一些简单的例子是: 了解数学和统计学→学习机器学习 学会骑自行车&r...【详细内容】
2020-09-03  Tags: 迁移学习  点击:(101)  评论:(0)  加入收藏
机器之心报道编辑:魔王作者:清华大学大数据研究中心近日,清华大学大数据研究中心机器学习研究部开源了一个高效、简洁的迁移学习算法库 Transfer-Learn,并发布了第一个子库&mdas...【详细内容】
2020-08-04  Tags: 迁移学习  点击:(78)  评论:(0)  加入收藏
▌简易百科推荐
作为数据科学家或机器学习从业者,将可解释性集成到机器学习模型中可以帮助决策者和其他利益相关者有更多的可见性并可以让他们理解模型输出决策的解释。在本文中,我将介绍两个...【详细内容】
2021-12-17  deephub    Tags:AI   点击:(15)  评论:(0)  加入收藏
基于算法的业务或者说AI的应用在这几年发展得很快。但是,在实际应用的场景中,我们经常会遇到一些非常奇怪的偏差现象。例如,Facebook将黑人标记为灵长类动物、城市图像识别系统...【详细内容】
2021-11-08  数据学习DataLearner    Tags:机器学习   点击:(32)  评论:(0)  加入收藏
11月2日召开的世界顶尖科学家数字未来论坛上,2013年诺贝尔化学奖得主迈克尔·莱维特、2014年诺贝尔生理学或医学奖得主爱德华·莫索尔、2007年图灵奖得主约瑟夫·斯发斯基、1986年图灵奖得主约翰·霍普克罗夫特、2002...【详细内容】
2021-11-03  张淑贤  证券时报  Tags:人工智能   点击:(39)  评论:(0)  加入收藏
鉴于物联网设备广泛部署、5G快速无线技术闪亮登场,把计算、存储和分析放在靠近数据生成的地方来处理,让边缘计算有了用武之地。 边缘计算正在改变全球数百万个设备处理和传输...【详细内容】
2021-10-26    计算机世界  Tags:边缘计算   点击:(45)  评论:(0)  加入收藏
这是几位机器学习权威专家汇总的725个机器学习术语表,非常全面了,值得收藏! 英文术语 中文翻译 0-1 Loss Function 0-1损失函数 Accept-Reject Samplin...【详细内容】
2021-10-21  Python部落    Tags:机器学习   点击:(43)  评论:(0)  加入收藏
要开始为开源项目做贡献,有一些先决条件:1. 学习一门编程语言:由于在开源贡献中你需要编写代码才能参与开发,你需要学习任意一门编程语言。根据项目的需要,在后期学习另一种语言...【详细内容】
2021-10-20  TSINGSEE青犀视频    Tags:机器学习   点击:(37)  评论:(0)  加入收藏
SimpleAI.人工智能、机器学习、深度学习还是遥不可及?来这里看看吧~ 从基本的概念、原理、公式,到用生动形象的例子去理解,到动手做实验去感知,到著名案例的学习,到用所学来实现...【详细内容】
2021-10-19  憨昊昊    Tags:神经网络   点击:(47)  评论:(0)  加入收藏
语言是人类思维的基础,当计算机具备了处理自然语言的能力,才具有真正智能的想象。自然语言处理(Natural Language Processing, NLP)作为人工智能(Artificial Intelligence, AI)的核心技术之一,是用计算机来处理、理解以及运...【详细内容】
2021-10-11    36氪  Tags:NLP   点击:(48)  评论:(0)  加入收藏
边缘计算是什么?近年来,物联网设备数量呈线性增长趋势。根据艾瑞测算, 2020年,中国物联网设备的数量达74亿,预计2025年突破150亿个。同时,设备本身也变得越来越智能化,AI与互联网在...【详细内容】
2021-09-22  汉智兴科技    Tags:   点击:(54)  评论:(0)  加入收藏
说起人工智能,大家总把它和科幻电影中的机器人联系起来,而实际上这些科幻场景与现如今的人工智能没什么太大关系。人工智能确实跟人类大脑很相似,但它们的显著差异在于人工智能...【详细内容】
2021-09-17  异步社区    Tags:人工智能   点击:(57)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条