多层感知器
多层感知器的数学表达式
- 在不增加高次项数据的情况下,通过MLP实现非线性分类预测:
同或门 或门 异或门:
当x1和x2都为0或1时为1,实现二分类问题
- MLP模型框架
- MLP实现多分类预测
得到的预测结果群为多个线性无关的单位向量,需要对其进行可视化转换(预处理)
- Keras
Keras是一个用Python编写的用于神经网络开发的应用接口,调用接口可以实现神经网络、卷积神经网络、循环神经网络等常用深度学习算法的开发
特点:- 集成了深度学习中各类成熟的算法,易安装和使用,样例丰富、
- 能够以TensorFlow或者Theano作为后端运行
- Tensorflow
Tensorflow是一个采用数据流图,用于数值计算的开源软件库,可自动计算模型相关的微分导数:非常适合用于神经网络模型的求解(Keras可看作为TensorFlow封装后的一个接口(Keras作为前端,TensorFlow作为后端))
Keras为用户提供了一个易于交互的外壳,方便进行深度学习的快速开发
Keras建立MLP模型
#建立一个Sequential顺序模型
from keras.models import Sequential
model = Sequential()
#通过.add()叠加各层网络
from keras.layers import Dense
model.add(Dense(units=3,activation='sigmoid',input_dim=3)) //units表示神经元的个数
model.add(Dense(units=1,activation='sigmoid'))
#通过.compile()配置模型求解过程参数
model.compile(loss='categorical_crossenttropy',optimizer='sgd') //optimizer表示优化器
#训练模型
model.fit(x_train,y_train,epochs=5) //epoch:迭代次数
关于实战(1):建立MLP实现非线性二分类的代码实现
#建立MLP模型,查看模型结构:
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()
#配置模型参数
mlp.compile(optimizer='adam',loss='binary_crossenttropy')
#模型训练
mlp.fit(X_train,y_train,epochs=3000)
#结果预测:
y_test_precit = mlp.predict_classes(X_test)
#把预测结果转换为可用于索引的Series类型:
y_range_predict = pd.Series([i[0] for i in y_range_predict])
mnist数据集介绍:机器学习领域中非常经典的一个数据集,由60000个训练样本跟10000个测试样本组成,每个样本都是一张28*28像素的灰度手写数字图片;包含训练集,训练集标签,测试集,测试集标签
- 关于实战(2):MLP实现图像多分类的代码实现
#加载mnist数据集:
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)
#转换输出结果格式
from keras.utils import to_categorical
y_train_format = to_categorical(y_train)
#转换输入数据维度
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'))
#配置训练参数:
mlp.compile(loss='categorical_crossntropy',optimizer='adam')
#模型训练:
mlp.fit(X_train_normal,y_train_format,epochs=10)