当前位置:   article > 正文

TensorFlow 2keras开发深度学习模型实例:多层感知器(MLP),卷积神经网络(CNN)和递归神经网络(RNN)...

本次实验用keras实现以下四种模型对对花的类别识别,通过构造不同的多层感知器比较

原文链接:http://tecdat.cn/?p=15850


在本文中,您将发现如何使用标准深度学习模型(包括多层感知器(MLP),卷积神经网络(CNN)和递归神经网络(RNN))开发,评估和做出预测点击文末“阅读原文”获取完整代码数据)。

相关视频

开发多层感知器模型

多层感知器模型(简称MLP)是标准的全连接神经网络模型。

它由节点层组成,其中每个节点连接到上一层的所有输出,每个节点的输出连接到下一层节点的所有输入。

通过一个或多个密集层创建MLP 。此模型适用于表格数据,即表格或电子表格中的数据,每个变量一列,每个变量一行。您可能需要使用MLP探索三个预测建模问题;它们是二进制分类,多分类和回归。

让我们针对每种情况在真实数据集上拟合模型。

二进制分类的MLP

我们将使用二进制(两类)分类数据集来演示用于二进制分类的MLP。

该数据集涉及预测结构是否在大气中或不给定雷达回波。

数据集将使用Pandas自动下载。

  • 电离层数据集(csv) 

  • 电离层数据集描述(csv) 

我们将使用LabelEncoder将字符串标签编码为整数值0和1。该模型将适合67%的数据,其余的33%将用于评估,请使用train_test_split()函数进行拆分。

最好将' relu '激活与' he_normal '权重初始化一起使用。在训练深度神经网络模型时,这种组合可以大大克服梯度消失的问题。

该模型预测1类的可能性,并使用S型激活函数。 

下面列出了代码片段。

  1. # mlp二分类包
  2. from pandas import read_csv
  3. from sklearn.model_selection import train_test_split
  4. from sklearn.preprocessing import LabelEncoder
  5. from tensorflow.keras import Sequential
  6. from tensorflow.keras.layers import Dense
  7. # 加载数据
  8. path = 'osph.csv'
  9. df = read_csv(path, header=None)
  10. # 分割输入和输出
  11. X, y = df.values[:, :-1], df.values[:, -1]
  12. # ensure all data are floating point values
  13. X = X.astype('float32')
  14. # 文本转换数字变量
  15. y = LabelEncoder().fit_transform(y)
  16. # 分割训练测试集
  17. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
  18. print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)
  19. # 定义输入变量维度
  20. n_features = X_train.shape[1]
  21. #定义模型
  22. model = Sequential()
  23. model.add(Dense(10, activation='relu', kernel_initializer='he_normal', input_shape=(n_features,)))
  24. model.add(Dense(8, activation='relu', kernel_initializer='he_normal'))
  25. model.add(Dense(1, activation='sigmoid'))
  26. # compile the model
  27. model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
  28. # 拟合模型
  29. model.fit(X_train, y_train, epochs=150, batch_size=32, verbose=0)

运行示例将首先报告数据集的形状,然后拟合模型并在测试数据集上对其进行评估。最后,对单行数据进行预测。

鉴于学习算法的随机性,您的具体结果会有所不同。尝试运行该示例几次。

在这种情况下,我们可以看到该模型实现了约94%的分类准确度,然后预测单行数据属于1类的概率为0.9。

  1. (235, 34) (116, 34) (235,) (116,)
  2. Test Accuracy: 0.940
  3. Predicted: 0.991

用于多类分类的MLP

我们将使用鸢尾花多类分类数据集来演示用于多类分类的MLP。

该问题涉及在给定花的度量的情况下预测鸢尾花的种类。

数据集将使用Pandas自动下载,但您可以在此处了解更多信息。

  • 鸢尾花数据集(csv) 

  • 鸢尾花数据集描述(csv) 

鉴于它是一个多类分类,因此该模型在输出层中的每个类必须具有一个节点,并使用softmax激活函数。损失函数是' sparse_categorical_crossentropy ',它适用于整数编码的类标签(例如,一个类为0,下一类为1,等等)

下面列出了在鸢尾花数据集上拟合和评估MLP的代码片段。

  1. # 预测
  2. row = [5.1,3.5,1.4,0.2]
  3. yhat = model.predict([row])
  4. print('Predicted: %s (class=%d)' % (yhat, argmax(yhat)))

运行示例将首先报告数据集的形状,然后拟合模型并在测试数据集上对其进行评估。最后,对单行数据进行预测。

鉴于学习算法的随机性,您的具体结果会有所不同。尝试运行该示例几次。

在这种情况下,我们可以看到该模型实现了约98%的分类精度,然后预测了属于每个类别的一行数据的概率,尽管类别0的概率最高。

  1. (100, 4) (50, 4) (100,) (50,)
  2. Test Accuracy: 0.980
  3. Predicted: [[0.8680804 0.12356871 0.00835086]] (class=0)

回归的MLP

我们将使用波士顿住房回归数据集来演示用于回归预测建模的MLP。

这个问题涉及根据房屋和邻里的属性来预测房屋价值。

数据集将使用Pandas自动下载,但您可以在此处了解更多信息。

  • 波士顿住房数据集(csv)。

  • 波士顿房屋数据集说明(csv)。

这是一个回归问题,涉及预测单个数值。因此,输出层具有单个节点,并使用默认或线性激活函数(无激活函数)。拟合模型时,均方误差(mse)损失最小。

  1. # 预测
  2. row = [0.00632,18.00,2.310,0,0.5380,6.5750,65.20,4.0900,1,296.0,15.30,396.90,4.98]
  3. yhat = model.predict([row])
  4. print('Predicted: %.3f'
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/978475
推荐阅读
相关标签
  

闽ICP备14008679号