多層感知器(Multi-Layer Perceptron)(人工神經(jīng)網(wǎng)絡(luò))
多層感知器模型框架
MLP用于非線性分類預(yù)測
在不增加高次項數(shù)據(jù)的情況下,如何通過MLP實現(xiàn)非線性分類預(yù)測
MLP模型框架
MLP實現(xiàn)多分類預(yù)測
實戰(zhàn)準備
Keras
Keras是一個用Python編寫的用于神經(jīng)網(wǎng)絡(luò)開發(fā)的應(yīng)用接口,調(diào)用開接口可以實現(xiàn)神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)等常用深度學習算法的開發(fā)
特點:
- 集成了深度學習中各類成熟的算法,容易安裝和使用,樣例豐富,教程和文檔也非常詳細
- 能夠以TensorFlow,或者Theano作為后端運行
Keras or Tensorflow
Tensorflow是一個采用數(shù)據(jù)流圖,用于數(shù)值計算的開源軟件庫,可自動計算模型相關(guān)的微分導(dǎo)數(shù):非常適合用于神經(jīng)網(wǎng)絡(luò)模型的求解。
Keras可看作為tensorflow封裝后的一個接口(Keras作為前端,TensorFlow作為后端。
Keras為用戶提供了一個易于交互的外殼,方便進行深度學習的快速開發(fā)
Keras建立MLP模型
# 建立一個Sequential順序模型
from keras.models import Sequential
model = Sequential()
# 通過.add()疊加各層網(wǎng)絡(luò)
from keras.layers import Dense
model.add(Dense(units=3,activation='sigmoid',input_dim=3))
model.add(Dense(units=1,activation='sigmoid'))
# 通過.compile()配置模型求解過程參數(shù)
model.compile(loss='categorical_crossentropy',optimizer='sgd'])
# 訓(xùn)練模型
model.fit(x_train,y_train,epochs=5)
實戰(zhàn)-建立MLP實現(xiàn)非線性二分類
任務(wù):基于data.csv數(shù)據(jù),建立mlp模型,計算其在測試數(shù)據(jù)上的準確率,可視化模型預(yù)測結(jié)果︰
- 進行數(shù)據(jù)分離:
test_size=0.33,random_state=10
- 模型結(jié)構(gòu):一層隱藏層,有20個神經(jīng)元
建立MLP模型,查看模型結(jié)構(gòu)
from keras.models import Sequential
from keras.layers import Dense,Activation
mlp = Sequential()
mlp.add(Dense(20,input_dim=2,activation='sigmoid'))
mlp.add(Dense(1,activation='sigmoid'))
mlp.summary()
配置模型參數(shù)
mlp.compile(optimizer='adam',loss='binary_crossentropy')
模型訓(xùn)練
mlp.fit(X_train,y_train,epochs=3000)
結(jié)果預(yù)測
y_test_predict = mlp.predict_classes(X_test)
把預(yù)測結(jié)果轉(zhuǎn)換為可用于索引的Series類型
y_range_predict = pd.Series([i[0] for i in y_range_predict])
實戰(zhàn):MLP實現(xiàn)圖像多分類
任務(wù):基于mnist數(shù)據(jù)集,建立mlp模型,實現(xiàn)0-9數(shù)字的十分類:
- 實現(xiàn)mnist數(shù)據(jù)載入,可視化圖形數(shù)字
- 完成數(shù)據(jù)預(yù)處理:圖像數(shù)據(jù)維度轉(zhuǎn)換與歸一化、輸出結(jié)果格式轉(zhuǎn)換
- 計算模型在預(yù)測數(shù)據(jù)集的準確率
- 模型結(jié)構(gòu):兩層隱藏層,每層有392個神經(jīng)元
mnist數(shù)據(jù)集介紹
機器學習領(lǐng)域中非常經(jīng)典的一個數(shù)據(jù)集,由60000個訓(xùn)練樣本和10000個測試樣本組成,每個樣本都是一張28*28像素的灰度手寫數(shù)字圖片。
- 官方網(wǎng)站: http://yann.lecun.com/exdb/mnist/
- 一共4個文件,訓(xùn)練集、訓(xùn)練集標簽、測試集、測試集標簽
加載mnist數(shù)據(jù)集
from keras.datasets import mnist
(X_train,y_train),(X_test,y_test) = mnist.load_data()
可視化圖片
img1=X_train[0]
fig1=plt.figure(figsize=(3,3))
plt.imshow(img1)
轉(zhuǎn)換輸出結(jié)果格式
from keras.utils import to_categorical
y_train_format = to_categorical(y_train)
轉(zhuǎn)換輸入數(shù)據(jù)維度
feature_size = (img1.shape[0])*(img1.shape[1])
X_train_format = X_train.reshape(X_train.shape[0],feature_size)
模型建立
mlp = Sequential()
mlp.add(Dense(units=392,activation='sigmoid',input_dim=feature_size))
mlp.add(Dense(units=392,activation='sigmoid'))
mlp.add(Dense(units=10,activation='softmax'))
模型訓(xùn)練參數(shù)
mlp.compile(loss='categorical_crossentropy',optimizer='adam'])
模型訓(xùn)練
mlp.fit(X_train_normal,y_train_format,epochs=10)
實戰(zhàn)-建立MLP實現(xiàn)非線性二分類
任務(wù):基于data.csv數(shù)據(jù),建立mlp模型,計算其在測試數(shù)據(jù)上的準確率,可視化模型預(yù)測結(jié)果
- 進行數(shù)據(jù)分離test_size=0.33,random_state=10
- 模型結(jié)構(gòu):一層隱藏層,有20個神經(jīng)元
加載數(shù)據(jù)
import pandas as pd
import numpy as np
data = pd.read_csv('data.csv')
data.head()
賦值
X = data.drop(['y'],axis=1)
y = data.loc[:,'y']
X.head()
數(shù)據(jù)可視化
from matplotlib import pyplot as plt
fig1 = plt.figure(figsize=(5,5))
passed=plt.scatter(X.loc[:,'x1'][y==1],X.loc[:,'x2'][y==1])
failed=plt.scatter(X.loc[:,'x1'][y==0],X.loc[:,'x2'][y==0])
plt.legend((passed,failed),('passed','failed'))
plt.xlabel('x1')
plt.ylabel('x2')
plt.title('raw data')
plt.show()
數(shù)據(jù)分離
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.33,random_state=10)
print(X_train.shape,X_test.shape,X.shape)
建立模型
from keras.models import Sequential
from keras.layers import Dense, Activation
mlp = Sequential()
mlp.add(Dense(units=20, input_dim=2, activation='sigmoid'))
mlp.add(Dense(units=1,activation='sigmoid'))
mlp.summary()
配置
mlp.compile(optimizer='adam',loss='binary_crossentropy')
訓(xùn)練
mlp.fit(X_train,y_train,epochs=3000)
計算模型預(yù)測準確率
y_train_predict = mlp.predict_classes(X_train)
from sklearn.metrics import accuracy_score
accuracy_train = accuracy_score(y_train,y_train_predict)
print(accuracy_train)
測試數(shù)據(jù)集準確率
y_test_predict = mlp.predict_classes(X_test)
accuracy_test = accuracy_score(y_test,y_test_predict)
print(accuracy_test)
查看數(shù)據(jù)格式
print(y_train_predict[0:10])
生成點集 預(yù)測
xx, yy = np.meshgrid(np.arange(0,1,0.01),np.arange(0,1,0.01))
x_range = np.c_[xx.ravel(),yy.ravel()]
y_range_predict = mlp.predict_classes(x_range)
print(type(y_range_predict))
轉(zhuǎn)換格式
y_range_predict_form = pd.Series(i[0] for i in y_range_predict)
print(y_range_predict_form)
可視化
fig2 = plt.figure(figsize=(5,5))
passed_predict=plt.scatter(x_range[:,0][y_range_predict_form==1],x_range[:,1][y_range_predict_form==1])
failed_predict=plt.scatter(x_range[:,0][y_range_predict_form==0],x_range[:,1][y_range_predict_form==0])
passed=plt.scatter(X.loc[:,'x1'][y==1],X.loc[:,'x2'][y==1])
failed=plt.scatter(X.loc[:,'x1'][y==0],X.loc[:,'x2'][y==0])
plt.legend((passed,failed,passed_predict,failed_predict),('passed','failed','passed_predict','failed_predict'))
plt.xlabel('x1')
plt.ylabel('x2')
plt.title('prediction result')
plt.show()
實戰(zhàn)二:MLP實現(xiàn)圖像多分類
基于mnist數(shù)據(jù)集,建立mlp模型,實現(xiàn)0-9數(shù)字的十分類task::
- 實現(xiàn)mnist數(shù)據(jù)載入,可視化圖形數(shù)字
- 完成數(shù)據(jù)預(yù)處理:圖像數(shù)據(jù)維度轉(zhuǎn)換與歸一化、輸出結(jié)果格式轉(zhuǎn)換
- 計算模型在預(yù)測數(shù)據(jù)集的準確率
- 模型結(jié)構(gòu):兩層隱藏層,每層有392個神經(jīng)元
載入數(shù)據(jù)
from keras.datasets import mnist
(X_train,y_train),(X_test,y_test) = mnist.load_data()
查看數(shù)據(jù)類別和維度
print(type(X_train),X_train.shape)
可視化一個數(shù)據(jù)
img1 = X_train[0]
%matplotlib inline
from matplotlib import pyplot as plt
fig1 = plt.figure(figsize=(3,3))
plt.imshow(img1)
plt.title('image size: 28 X 28')
plt.show()
創(chuàng)建一個新數(shù)組
feature_size = img1.shape[0]*img1.shape[1]
X_train_format = X_train.reshape(X_train.shape[0],feature_size)
X_test_format = X_test.reshape(X_test.shape[0],feature_size)
print(X_train_format.shape)
歸一化
X_train_normal = X_train_format/255
X_test_normal = X_test_format/255
輸出結(jié)果轉(zhuǎn)換
from keras.utils import to_categorical
y_train_format = to_categorical(y_train)
y_test_format = to_categorical(y_test)
print(y_train_format[0])
查看轉(zhuǎn)換效果
print(X_train_normal.shape,y_train_format.shape)
設(shè)置模型
from keras.models import Sequential
from keras.layers import Dense, Activation
mlp = Sequential()
mlp.add(Dense(units=392,activation='relu',input_dim=784))
mlp.add(Dense(units=392,activation='relu'))
mlp.add(Dense(units=10,activation='softmax'))
mlp.summary()
模型配置
mlp.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['categorical_accuracy'])
訓(xùn)練
mlp.fit(X_train_normal,y_train_format,epochs=10)
評估模型
y_train_predict = mlp.predict_classes(X_train_normal)
print(type(y_train_predict))
print(y_train_predict[0:10])
from sklearn.metrics import accuracy_score
accuracy_train = accuracy_score(y_train,y_train_predict)
print(accuracy_train)
y_test_predict = mlp.predict_classes(X_test_normal)
accuracy_test = accuracy_score(y_test,y_test_predict)
print(accuracy_test)
查看結(jié)果、
img2 = X_test[100]
fig2 = plt.figure(figsize=(3,3))
plt.imshow(img2)
plt.title(y_test_predict[100])
plt.show()
img2 = X_test[19]
fig2 = plt.figure(figsize=(3,3))
plt.imshow(img2)
plt.title(y_test_predict[19])
plt.show()
文章來源:http://www.zghlxwxcb.cn/news/detail-821078.html
# coding:utf-8
import matplotlib as mlp
font2 = {'family' : 'SimHei',
'weight' : 'normal',
'size' : 20,
}
mlp.rcParams['font.family'] = 'SimHei'
mlp.rcParams['axes.unicode_minus'] = False
a = [i for i in range(1,10)]
fig4 = plt.figure(figsize=(5,5))
for i in a:
plt.subplot(3,3,i)
plt.tight_layout()
plt.imshow(X_test[i])
plt.title('predict:{}'.format(y_test_predict[i]),font2)
plt.xticks([])
plt.yticks([])
文章來源地址http://www.zghlxwxcb.cn/news/detail-821078.html
環(huán)境版本
numpy | 1.20.3 |
---|---|
matplotlib | 3.4.3 |
pandas | 1.3.4 |
keras | 2.6.0 |
scikit-learn | 0.24.2 |
到了這里,關(guān)于深度學習-多層感知器-建立MLP實現(xiàn)非線性二分類-MLP實現(xiàn)圖像多分類的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!