欢迎访问www.allbetgaming.com!

首页科技正文

欧博亚洲:深度学习趣谈:什么是迁徙学习?(附带Tensorflow代码实现)

admin2020-07-1858

一.迁徙学习的观点

什么是迁徙学习呢?迁徙学习可以由下面的这张图来示意:

 

 

 这张图最左边示意了迁徙学习也就是把已经训练好的模子和权重直接纳入到新的数据集当中举行训练,然则我们只改变之前模子的分类器(全毗邻层和softmax/sigmoid),这样就可以节约训练的时间的到一个新训练的模子了!

然则为什么可以这么做呢?

二.为什么可以使用迁徙学习?

一样平常在图像分类的问题当中,卷积神经网络最前面的层用于识别图像最基本的特征,好比物体的轮廓,颜色,纹理等等,尔后面的层才是提取图像抽象特征的要害,因此最好的设施是我们只需要保留卷积神经网络当中底层的权重,对顶层和新的分类器举行训练即可。那么在图像分类问题当中,我们若何使用迁徙学习呢?一样平常使用迁徙学习,也就是预训练神经网络的步骤如下;

1.冻结预训练网络的卷积层权重

2.置换旧的全毗邻层,换上新的全毗邻层和分类器

3.解冻部门顶部的卷积层,保留底部卷积神经网络的权重

4.同时对卷积层和全毗邻层的顶层举行团结训练,获得新的网络权重

既然我们知道了迁徙学习的基本特点,何不试试看呢?

三.迁徙学习的代码实现

我们使用迁徙学习的方法来举行猫狗图像的分类识别,猫猫的图像在我的文件夹里如下图所示:

 

 

然后导包:

import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt
import numpy as np
import glob
import os

获取图片的路径,标签,制作batch数据,图片的路径我存放在了F盘下的train文件夹下,路径为:F://UNIVERSITY STUDY/AI/dataset/catdog/train/。

代码如下:

keras=tf.keras
layers=tf.keras.layers
#获得图片的所有label
train_image_label=[int(p.split("\\")[1]=='cat') for p in train_image_path ]


#现在我们的jpg文件举行解码,酿成三维矩阵
def load_preprosess_image(path,label):
    #读取路径
    image=tf.io.read_file(path)
    #解码
    image=tf.image.decode_jpeg(image,channels=3)#彩色图像为3个channel
    #将图像改变为同样的巨细,行使裁剪或者扭曲,这里应用了扭曲
    image=tf.image.resize(image,[360,360])
    #随机裁剪图像
    image=tf.image.random_crop(image,[256,256,3])
    #随机上下翻转图像
    image=tf.image.random_flip_left_right(image)
    #随机上下翻转
    image=tf.image.random_flip_up_down(image)
    #随机改变图像的亮度
    image=tf.image.random_brightness(image,0.5)
    #随机改变对比度
    image=tf.image.random_contrast(image,0,1)
    #改变数据类型
    image=tf.cast(image,tf.float32)
    #将图像举行归一化
    image=image/255
    #现在还需要对label举行处置,我们现在是列表[1,2,3],
    #需要酿成[[1].[2].[3]]
    label=tf.reshape(label,[1])
    return image,label

train_image_ds=tf.data.Dataset.from_tensor_slices((train_image_path,train_image_label))
AUTOTUNE=tf.data.experimental.AUTOTUNE#凭据计算机性能举行运算速率的调整
train_image_ds=train_image_ds.map(load_preprosess_image,num_parallel_calls=AUTOTUNE)
#现在train_image_ds就读取进来了,现在举行乱序和batchsize的划定
BATCH_SIZE=32
train_count=len(train_image_path)
#现在设置batch和乱序
train_image_ds=train_image_ds.shuffle(train_count).batch(BATCH_SIZE)
train_image_ds=train_image_ds.prefetch(AUTOTUNE)#预处置一部门处置,准备读取

imags,labels=iter(train_image_ds).next()#放到生成器里,单独取出数据
plt.imshow(imags[30])

显示出制作batch数据当中的猫猫图片:

 

 搭建网络架构,引入经典图像分类模子VGG16,同时挪用VGG16预训练网络的权重。最后调整卷积层的最后三层为可训练的,也就是说顶层的卷积神经网路可以和全毗邻层分类器一起举行团结训练:

conv_base=keras.applications.VGG16(weights='imagenet',include_top=False)
#weights设置为imagenet示意使用imagebnet训练出来的权重,若是填写False示意不使用权重
#仅适用网络架构,include_top示意是否使用用于分类的全毗邻层
#我们在这个卷积层上添加全毗邻层和输出层即可
model=keras.Sequential()
model.add(conv_base)
model.add(layers.GlobalAveragePooling2D())
model.add(layers.Dense(512,activation='relu'))
model.add(layers.Dense(1,activation='sigmoid'))

conv_base.trainable=True#一共有19层
for layer in conv_base.layers[:-3]:
    layer.trainable=False
#从第一层到倒数第三层重新设置为是不能训练的,现在卷积的顶层已经解冻,最先团结训练

#编译这个网络
model.compile(optimizer=keras.optimizers.Adam(lr=0.001),
              loss='binary_crossentropy',
              metrics=['acc'])

history=model.fit(
train_image_ds,
steps_per_epoch=train_count//BATCH_SIZE,
    epochs=1
)

仅仅训练一个epoch的效果如下所示;

Train for 62 steps
62/62 [==============================] - 469s 8s/step - loss: 0.6323 - acc: 0.6159

一次迭代准确率已经达到了百分之六十。怎么样呢?你现在对迁徙学习有一定的感受了吗?

,

联博统计

www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。

转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源!

本文链接:https://www.juneview.com/post/1019.html

网友评论

最新评论

  • 联博API 10/22 说:

    欧博客户端欢迎进入欧博客户端(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。没废话,我喜欢

  • 联博API 10/22 说:

    欧博客户端欢迎进入欧博客户端(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。没废话,我喜欢

  • 皇冠APP下载 10/21 说:

    欧博电脑版欢迎进入欧博电脑版(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。有看点

  • Allbet注册 10/21 说:

    欧博亚洲客户端欢迎进入欧博亚洲客户端(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。为你达call

  • Allbet手机版下载 10/21 说:

    联博www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。看过的比较好的文了。

  • UG环球客户端下载 10/19 说:

    欧博会员开户欢迎进入欧博会员开户(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。贼棒,看得揪心啊

  • 环球UG官网开户网址 10/19 说:

    联博www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。为你开的流量

  • UG环球充值 10/19 说:

    欧博客户端欢迎进入欧博客户端(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。你是当代马良吗