zoukankan      html  css  js  c++  java
  • MLP用于MNIST数据集

    实践:用keras训练一个MLP用于MNIST数据集

    总体思路:

    1. 数据预处理
    2. 构建神经网络模型
    3. 训练模型
    4. 验证模型的泛化能力,并调节超参数

    1.数据预处理

    • keras自带了MNIST数据集的例子,因此使用mnist.load_data读取数据集。
    • x代表数据,y代表标签,数据的大小为(数据量,28,28)。由于我们采用多层感知机,因此输入数据应该是1维,即28*28=784,因此首先将数据维度变换为784
    • 将数据标准化,每个像素均除以255
    • 原数据中标签为0-9,需要转化为1-hot标签。keras提供了一个转化标签的函数to_categorical,将标签转化为1-hot标签
    • 分配训练集与验证集
    import keras
    import numpy as np
    from keras.datasets import mnist
    from keras.utils import to_categorical
    
    (x_train,y_train), (x_test, y_test) = mnist.load_data()
    x_train = x_train.reshape(-1, 784)
    x_train = x_train / 255
    y_train = to_categorical(y_train)
    x_test = x_test.reshape(-1, 784)
    x_test = x_test / 255
    y_test = to_categorical(y_test)

    2.构建神经网络模型

    Keras提供了两种建立神经网络的模型:

    • Sequential序贯式:适用于没有分支结构的神经网络 
    • Functional函数式:适用于结构复杂的模型

    2.1Sequential方法构建模型

    1. 导入模块keras.models.Sequential
    2. 建立空模型 model=Sequential()
    3. 逐层加入神经网络模块。第一层必须指定输入的尺寸。
    from keras.models import Sequential
    from keras.layers import Dense
    
    model = Sequential()
    model.add(Dense(300, activation='sigmoid', input_shape=(784,)))
    model.add(Dense(100, activation='sigmoid'))
    model.add(Dense(10,activation='softmax'))

    2.2 函数式方法

    1. 导入keras.models.Model模块
    2. 定义输入层并指定大小(Input层)
    3. 逐个添加层,每层之后加入(x)代表与x指代的层相连。
    4. 使用Model函数指定模型的输入和输出
    from keras.models import Model
    from keras.layers import Input, Dense
    input_layer = Input((784,))
    x = Dense(300, activation='sigmoid')(input_layer)
    x = Dense(100, activation='sigmoid')(x)
    x = Dense(10, activation='softmax')(x)
    model = Model(input_layer, x)

    3.模型的训练

    在开始训练之前,要指定模型训练的损失函数和参数的更新方法,利用complie方法将其整合到模型中。

    • loss:指定损失函数。keras内置了很多损失函数,可以使用字符串形式指定。这里我们是多分类模型,因此使用交叉熵作为损失函数。
    • optimizer:指定梯度优化算法。这里我们使用随机梯度下降法sgd
    • metrics:可选参数,与训练过程无关,仅仅用于训练中观察训练情况。这里我们使用准确率
    • 使用fit方法进行训练。Fit方法需要给定数据、标签、每批数据大小、训练轮数等参数
    model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['acc'])
    model.fit(x_train, y_train, batch_size=32, epochs=10)

     

    4.模型验证

     

    • 当我们在测试集中评价我们模型的泛化能力时,使用evaluate,指定数据与真实标签,输出在测试集上的损失函数loss值和metric值(准确率)。
    • 当我们没有真实标签,仅仅用于预测时,使用predict,指定数据。
    • 可见,仅仅经过10轮训练,我们的准确率就达到了90.35%.
    • 存储模型:save(文件名)                         model.save('my_first_dnn.h5')
    • 读取模型:load_model(文件名)

     在keras框架下运行的第一个小程序完成~~~

  • 相关阅读:
    vue中的样式
    v-model 双向数据绑定
    v-on 事件修饰符
    Linq Join
    Elasticsearch.Net 异常:[match] query doesn't support multiple fields, found [field] and [query]
    MongoDB开启权限认证
    elasticsearch备份与恢复
    elasticserach + kibana环境搭建
    Kibana TypeError : Object #<GlobalState> has no method 'setDefaults'
    匿名函数
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/11844598.html
Copyright © 2011-2022 走看看