迁移学习(迁移学习简介)

精英怪
广告

介绍

迁移学习(迁移学习简介)

人类从小就在日常活动中成长和学习。人类通过学习一项任务来获取知识。通过使用相同的知识,我们倾向于解决相关的任务。

在实时场景中

知道如何骑自行车⮫学习如何骑摩托车知道如何弹奏古典钢琴⮫学习如何弹奏爵士钢琴了解数学和统计学⮫学习机器学习

机器学习中的迁移学习

传统的ML用于为提供的每个任务/域创建单独的模型。没有保存模型的知识库。迁移学习过去有一个知识库来存储针对特定任务/领域训练/利用的模型。此外,我们可以使用相同的知识来训练新模型。

为了更好地理解,请考虑将这两个可能的场景实现为

在餐馆的限定区域内识别图像中的物体,例如T1从公园或café的图像中检测物体,例如T2

让我们使用传统的ML开始执行任务,我们需要创建两个模型,即Model A和Model B。其中Model A用于实现任务T1, Model B用于实现任务T2。最后,利用A和B各自的模型,可以根据业务需求检测出对象。

好吧! !如果我们采用迁移学习方法,下面的方法将会实现。如果我们开始执行任务T1,使用深度学习(TFOD, CV2等)来创建新模型,检测餐厅中的对象,最后将模型保存到知识库中。为了实现任务T2,我们不需要创建另一个新模型,而是从知识库中获取已保存的模型。从已保存的模型中,我们也可以将其用于任务T2。因此,我们可以选择迁移学习作为这一问题的最佳实现。如果任务有车道检测/交通灯检测手段,我们不能使用同一模型来训练数据。

让我们使用Python实现二元分类。这里我们使用Keras mnist数据集。用优化后的参数训练模型,最后保存模型。使用保存的模型进行二元分类。让我们看看在迁移学习的方法上是如何实现的。

import numpy as np import tensorflow as tf from matplotlib import pyplot as plt import os import time import pandas as pd df = tf.keras.datasets.mnist (x_train_full,y_train_full),(x_test, y_test) = df.load_data() x_valid, x_train = x_train_full[:5000]/255, x_train_full[5000:]/255 y_valid, y_train = y_train_full[:5000], y_train_full[5000:] x_test = x_test/255

创建模型

tf.random.set_seed(42) np.random.seed(42) LAYERS = [ tf.keras.layers.Flatten(input_shape=[28,28]), tf.keras.layers.Dense(300, kernel_initializer='he_normal'), tf.keras.layers.LeakyReLU(), tf.keras.layers.Dense(100, kernel_initializer='he_normal'), tf.keras.layers.LeakyReLU(), tf.keras.layers.Dense(10, activation='softmax') ] model = tf.keras.models.Sequential(LAYERS) model.compile(loss=tf.losses.sparse_categorical_crossentropy, optimizer=tf.keras.optimizers.SGD(0.02), metrics=['accuracy'] )

训练

history = model.fit(x_train,y_train, epochs=10, validation_data=(x_valid,y_valid)) model.save('pretrained_model_workout.h5')

迁移学习

pretrained_model = tf.keras.models.load_model('pretrained_model_workout.h5') pretrained_model.summary()

for layer in pretrained_model.layers[:-1]: layer.trainable = False print(f"{layer.name} - {layer.trainable}")

def updated_even_odd_labels(labels): for idx, label in enumerate(labels): labels[idx] = np.where(label % 2 == 0 , 1, 0) return labels

使用updated_even_odd_labels()应用训练和测试数据

y_train_bin, y_test_bin, y_valid_bin = updated_even_odd_labels([y_train, y_test, y_valid])

编译模型和训练

new_model.compile(loss=tf.losses.sparse_categorical_crossentropy, optimizer=tf.keras.optimizers.SGD(0.02), metrics=['accuracy'] ) new_history = new_model.fit(x_train,y_train_bin, epochs=10, validation_data=(x_valid,y_valid_bin))

验证模型

new_model.evaluate(x_test, y_test_bin) x_new_sample = x_test[:3] y_test[:3], y_test_bin[:3] np.argmax(new_model.predict(x_new_sample), axis=-1)

希望本文能让你对迁移学习有一个更好的认识。

感谢阅读这篇文章:)

作者:Antony Christopher

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (暂无评论,252人围观)

还没有评论,来说两句吧...