赞
踩
以已经训练好的模型A为起点,在新场景中,根据新数据建立模型B。
目的:将某个领域或任务上学习到的知识或模型,应用到不同但相关的领域或问题中
模型A存储了模型结构,权重系数(‘weights’),模型B基于新数据,实现了对模型A的部分结构或权重系数的更新
在方法的选择中,不要局限于某种方式:
给已经训练好的模型输入新的数据,模型将进行更新,适应新数据的趋势
目的:针对新数据,在不需要对全数据集进行再次训练的基础上,实现模型更新
适用场景:场景中有连续的数据流
特点:不改变模型结构,更新新数据跟新权重系数
新数据(x,y)输入后,对模型的系数更新(类似梯度下降):
监督学习与无监督学习相结合的一种学习方法,它同时利用有标记样本与无标记样本进行学习
目的:在标记样本优先的情况下,尽可能识别出总样本的共同特性
当单一的学习模型无法有效解决问题时,我们采用混合模型,灵活运用
任务:基于csv格式数据,建立mlp模型,再实现模型迁移学习:
1.实现x对y的预测,可视化结果
2.基于新数据csv,对前模型进行二次训练,对比模型训练次数少的情况下的表现
模型结构:mlp,两个隐藏层,每层50个神经元,激活函数relu,输出层激活函数linear,迭代次数:100次
- #建立mlp模型:
- from keras.models import Sequential
- from keras.layers import Dense
- model = Sequential()
- model.add(Dense(units=50,input_dim = 1,activation = 'relu'))
- model.add(Dense(units=50,activation='relu'))
- model.add(Dense(units=1,activation='linear'))
- model.compile(optimizer='adam',loss='mean_squared_error')
- model.summary()
-
- #模型训练与二次训练
- model.fit(x,y)
- model.fit(x2,y2)
- #模型保存到本地
- from sklearn.externals import joblib
- joblib.dump(model,"model1.m")
-
- #加载本地模型:
- model2 = joblib.load("model1.m")
任务:根据数据样本,建立模型,对test_data的图片进行普通/其他苹果判断:
1.数据增强,扩充确认为普通苹果的样本数量
2.特征提取,使用VGG16模型提取图像特征
3.图片批量处理
4.Kmeans模型尝试普通,其他苹果聚类
5.基于标签数据矫正结果,并可视化
6.Meanshift模型提升模型表现
7.数据降维PCA处理,提升模型表现
- #单张图片载入
- from keras.preprocessing.image import load_img,img_to_load
- img_path = '1.jpg'
- img = load_img(img_path,target_size=(224,224))
- img = img_to_array(img)
-
- #单张图片可视化:
- %matplotlib inline
- from matplotlib inline
- from matplotlib import pyplot as plt
- fig = plt.figure(figsize=(5,5))
- img = load_img(img_path,target_size=(224,224))
- plt.imshow(img)
-
单张图片特征提取:
- #模型加载、图像矩阵预处理
- from keras.applications.vgg16 import VGG16
- from keras.applications.vgg16 import preprocess_input
- import numpy as np
- model_vgg = VGG16(weight='imagenet',include_top=False)
- x = np.expand_dims(img,axis=0)
- x = preprocess_input(x)
-
- #特征提取
- features = model_vgg.predict(x)
-
- #特征数据格式预处理
- features = features.reshape(1,7*7*512)
定义一个提取图片特征的方法;
- def modelProcess(img_path,model):
- img = load_img(img_path,target_size=(224,224))
- img = img_to_array(img)
- x = np.expand_dims(img,axis=0)
- x = preprocess_input(x)
- x_vgg = model.predict(x)
- x_vgg = x_vgg.reshape(1,7*7*512)
- return x_vgg
批量提取图片特征:
- features1 = np.zeros([len(img_path),7*7*512])
- for i in range(len(img_path)):
- feature_i = modelProcess(img_path[i],model_vgg)
- print('preprocessed:',img_path[i])
- features1[i] = feature_i
使用聚类分析:
- #KMeans聚类(2类):
- from sklearn.cluster import KMeans
-
- cnn_kmeans = KMeans(n_cluster=2,max_iter=2000)
- cnn_kmeans.fit(X)
- y_pred_kmeans = cnn_kmeans.fit_predict(X)
-
- #Meanshift聚类:
- from sklearn.cluster import MeanShift,estimate_bandwidth
- #自动获取区域宽度
- bw = estimate_bandwidth(X1,n_samples=140)
- #建立模型
- ms = MeanShift(bandwidth = bw)
- ms.fit(X)
- y_pred_ms = ms.predict(X)
模型的优化:
- #数据降维(PCA处理):
- from sklearn.preprocessing import StandardScaler
- #数据标准化处理
- stds = StandardScaler()
- X_norm = stds.fit_transform(X)
- #PCA降维
- from sklearn.decomposition import PCA
- pca = PCA(n_components=200)
- X_pca = pca.fit_transform(X_norm)
- #计算主成分方差比例
- var_ratio = pca.explained_variance_ratio
- #查看主成分方差比之和
- print(np.sum(var_ratio))
- 统计数据次数:
-
- from collections import Counter
-
- print(Counter(y_pred_ms))
-
-
- 批量可视化结果:
-
- plt.figure(figsize=(10,30))
-
- for i in range(45):
-
- for j in range(5):
-
- img = load_img(img_path[i*5+j]) //read the image as a PIL image
-
- plt.subplot(45,i*5+j+1)
-
- plt.title('apple' if y_pred_ms[i*5+j] == normal_apple_id else 'others')
-
- plt.imshow(img),plt.axis('off')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。