利用keras实现多层感知器MLP模型

一、什么是keras

   Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化。
   Keras的神经网络API是在封装后与使用者直接进行交互的API组件,在使用时可以调用Keras的其它组件。除数据预处理外,使用者可以通过神经网络API实现机器学习任务中的常见操作,包括人工神经网络的构建、编译、学习、评估、测试等。
英文文档百度百科中文文档

二、基于keras的MLP模型实现(序贯模型Sequential)

   序贯模型是多个网络层的线性堆叠,也就是“一条路走到黑”。

1、搭建模型

1.1、序列化模型:

   Keras的序列化模型是由其API中网络层对象堆叠得到的神经网络模型 。
   序列化模型有两种创建方式:
   (1)将网络层实例的列表传递给 Sequential 的构造器,来创建一个 Sequential 模型。
   (2)对Sequential类使用model.add()添加层对象。

from keras.models import Sequential
from keras.layers import Dense, Activation
model = Sequential([
    	Dense(32, input_shape=(784,)),
    	Activation('relu'),
   	    Dense(10),
    	Activation('softmax'),])
 或
 model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))
1.2、核心网络层:Core Layers,英文链接中文链接

Dense(全连接层):多层感知器的各个层都是全连接层。
Dense 实现以下操作: 输出output = activation(dot(input, kernel) + bias) 其中 activation 是按逐个元素计算的激活函数,kernel 是由网络层创建的权值矩阵,以及 bias 是其创建的偏置向量 (只在 use_bias 为 True 时才有用)。
Dense类
keras.layers.Dense(units, activation=None, use_bias=True, kernel_initializer=‘glorot_uniform’, bias_initializer=‘zeros’, kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
参数说明

参数名称解释
units代表该层的输出维度
activation激活函数 ,默认None,为线性
use_bias是否使用偏置b,默认None
kernel_initializer权重初始化方法,默认均匀分布初始化
bias_initializer偏置初始化方法,默认为0
kernel_regularizer施加在权重上的正则项,默认None
bias_regularizer运用到偏置向的的正则化函数,默认None
activity_regularizer运用到层的输出的正则化函数,默认为None
kernel_constraint运用到权值矩阵的约束函数 ,默认为None
bias_constraint运用到偏置向量的约束函数,默认为None

若想指定输入输出尺寸shape
   输入尺寸:inputshape,最常见的是 (batch_size, input_dim) 的2维输入。
   输出尺寸:output shape,nD , 对于尺寸为 (batch_size, input_dim) 的 2维 输入, 输出的尺寸为 (batch_size, units)。
   注意:batch_size是当样本数很大时, 有时需要将样本分为N个batch, 这个N就是nb_batch(batch数量), 此时一个batch中包含的样本数量即是batch_size。
   使用方法:模型需要知道输入数据的shape,因此,Sequential的第一层需要接受一个关于输入数据shape的参数,有几种方法来为第一层指定输入数据的shape:
   (1)使用input_shape:传递一个input_shape的关键字参数给第一层,input_shape是一个tuple类型的数据,其中也可以填入None,如果填入None则表示此位置可能是任何正整数。数据的batch大小不应包含在其中。
   (2)input_dim等:使用有些2维层,如Dense,支持通过指定其输入维度input_dim来隐含的指定输入数据shape,是一个Int类型的数据。一些3维的时域层,支持通过参数input_dim和input_length来指定输入shape。
   (3)batch_size使用:如果你需要为输入指定一个固定大小的batch_size(常用于RNN网络),可以传递batch_size参数到一个层中,例如你想指定输入张量的batch大小是32,数据shape是(6,8),则你需要传递batch_size=32和input_shape=(6,8)

model = Sequential()
model.add(Dense(32, input_shape=(16,)))
或
model.add(Dense(units=32, input_dim=16))
或
model.add(Dense(32, input_shape=(5000,16)))

2、模型编译

   在训练模型之前,您需要配置学习过程,这是通过 compile 方法完成的。它接收三个参数:
   (1)优化器 optimizer:它可以是现有优化器的字符串标识符,如 rmsprop 或 adagrad,也可以是 Optimizer 类的实例。详见:optimizers中的各个优化器实例。
   (2)损失函数 loss:模型试图最小化的目标函数。它可以是现有损失函数的字符串标识符,如 categorical_crossentropy 或 mse,也可以是一个目标函数。详见:losses的损失函数实例化。
   (3)评估标准 metrics:对于任何分类问题,你都希望将其设置为 metrics = [‘accuracy’]。评估标准可以是现有的标准的字符串标识符,也可以是自定义的评估标准函数。

3、模型训练

   Keras 模型在输入数据和标签的 Numpy 矩阵上进行训练。为了训练一个模型,你通常会使用 fit 函数。参数为样本特征和标签,以及迭代次数和批大小,如:

import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout
# 生成虚拟数据
x_train = np.random.random((1000, 20))
y_train = np.random.randint(2, size=(1000, 1))
x_test = np.random.random((100, 20))
y_test = np.random.randint(2, size=(100, 1))
model = Sequential()
model.add(Dense(64, input_dim=20, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])
model.fit(x_train, y_train,
          epochs=20,
          batch_size=128)
score = model.evaluate(x_test, y_test, batch_size=128)

4、利用tensorflow的keras实现

   实际过程和直接利用keras基本一致:
tensorflow中文文档

import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([
	  tf.keras.layers.Flatten(input_shape=(28, 28)),
	  tf.keras.layers.Dense(512, activation=tf.nn.relu),
	  tf.keras.layers.Dropout(0.2),
	  tf.keras.layers.Dense(10, activation=tf.nn.softmax)])
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)
  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值