keras做多层神经网络

Posted lavi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keras做多层神经网络相关的知识,希望对你有一定的参考价值。

一、 背景与目的

背景:配置好了theano,弄了gpu, 要学dnn方法。

目的:本篇学习keras基本用法, 学习怎么用keras写mlp,学keras搞文本的基本要点。

 

二、 准备

工具包: theano、numpy、keras等工具包

数据集: 如果下不来, 可以用迅雷下,弄到~/.keras/datasets/下面即可

代码位置:examples/reuters_mlp.py

三、 代码赏析

‘‘‘Trains and evaluate a simple MLP
on the Reuters newswire topic classification task.
‘‘‘

from __future__ import print_function
import numpy as np
np.random.seed(1337)  # for reproducibility

from keras.datasets import reuters
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.utils import np_utils
from keras.preprocessing.text import Tokenizer

max_words = 1000 #vocab大小
batch_size = 32 #mini_batch_size 
nb_epoch = 5 #大循环次数

print(‘Loading data...‘)
(X_train, y_train), (X_test, y_test) = reuters.load_data(nb_words=max_words, test_split=0.2) #载入路透社语料
#打印 print(len(X_train), ‘train sequences‘) print(len(X_test), ‘test sequences‘)
#分类数目--原版路透社我记着是10来着,应该是语料用的是大的那个 nb_classes = np.max(y_train)+1 print(nb_classes, ‘classes‘) print(‘Vectorizing sequence data...‘)
#tokenize tokenizer = Tokenizer(nb_words=max_words)
#序列化,取df前1000大
#这里有个非常好玩的事, X_train 里面初始存的是wordindex,wordindex是按照词大小来的(应该是,因为直接就给撇了)
#所以这个效率上还是很高的
#转化的还是binary,默认不是用tfidf X_train = tokenizer.sequences_to_matrix(X_train, mode=‘binary‘) X_test = tokenizer.sequences_to_matrix(X_test, mode=‘binary‘) print(‘X_train shape:‘, X_train.shape) print(‘X_test shape:‘, X_test.shape) print(‘Convert class vector to binary class matrix (for use with categorical_crossentropy)‘)
#这个就好理解多了, 编码而已 Y_train = np_utils.to_categorical(y_train, nb_classes) Y_test = np_utils.to_categorical(y_test, nb_classes) print(‘Y_train shape:‘, Y_train.shape) print(‘Y_test shape:‘, Y_test.shape) print(‘Building model...‘) model = Sequential()
#第一层
#Dense就是全连接层 model.add(Dense(512, input_shape=(max_words,))) #输入维度, 512==输出维度 model.add(Activation(‘relu‘)) #激活函数 model.add(Dropout(0.5)) #dropout

#第二层 model.add(Dense(nb_classes)) model.add(Activation(‘softmax‘))
#损失函数设置、优化函数,衡量标准 model.compile(loss=‘categorical_crossentropy‘, optimizer=‘adam‘, metrics=[‘accuracy‘])
#训练,交叉验证 history = model.fit(X_train, Y_train, nb_epoch=nb_epoch, batch_size=batch_size, verbose=1, validation_split=0.1) score = model.evaluate(X_test, Y_test, batch_size=batch_size, verbose=1) print(‘Test score:‘, score[0]) print(‘Test accuracy:‘, score[1])

 

四、 训练速度比较

此表调整到了相对好一点的两万词表,要不然我觉得讨论效果没什么意义

  训练时间-cpu 训练时间-gpu val-cpu val-gpu
第一轮 22s     3s 79 79
第二轮 22s 3s 81 81
第三轮 23s 3s 80 80
第四轮 33s 3s 78 79
第五轮 40s 3s 80 80

 

看的出来,即使是mlp,效果的提升也是非常非常大的。

 

以上是关于keras做多层神经网络的主要内容,如果未能解决你的问题,请参考以下文章

Keras中的LSTM

(数据科学学习手札44)在Keras中训练多层感知机

Keras篇---利用keras改写VGG16经典模型在手写数字识别体中的应用

框架《Keras深度学习实战》中英文PDF+源代码分析

小白学习keras教程一基于波士顿住房数据集训练简单的MLP回归模型

多层感知器 (MLP) Keras 张量流模型