您的位置:首页 > 理论基础 > 计算机网络

python keras (一个超好用的神经网络框架)的使用以及实例

2015-09-20 17:18 741 查看
   先吐槽一下这个基于theano的keras有多难装,反正我是在windows下折腾到不行,所以自己装了一个双系统。这才感到linux系统的强大之初,难怪大公司都是用这个做开发,妹的,谁用谁知道啊!!!!

   先来介绍一下这个框架:我们都知道深度的神经网络,python一开始有theano这个框架用来写神经网络,不过后来我们发现keras这个比theano更加容易构建,很适合初学者。×..×

   以下是对应的英文网站:http://keras.io/#installation,英文好的话自己都可以看懂了。

一:先看安装

有两种:

1.ubuntu下直接用 sudo pip install keras 安装

2.又或者先安装以下的依赖项:

[code]numpy, scipy
pyyaml
Theano
HDF5 and h5py


Once you have the dependencies installed, clone the repo:

git clone https://github.com/fchollet/keras.git

二.模块简介

1.optimizers:

这个是用来选用优化方法的,里面有SGD,Adagrad,Adadelta,RMSprop,Adam可选

2.objectives 这个定义了用什么形式的误差来优化,有

mean_squared_error / mse:平均方差

mean_absolute_error / mae:绝对误差

mean_absolute_percentage_error / mape:平均绝对百分差

mean_squared_logarithmic_error / msle:对数误差

squared_hinge

hinge

binary_crossentropy: Also known as logloss.

categorical_crossentropy:使用这个目标函数需要设置label为二进制数组的形式。

3.model

model = keras.models.Sequential() 初始化一个神经网络

add 添加一层神经网

compile(optimizer, loss, class_mode=”categorical”):

参数:

optimizer: str (优化函数的名称) 或者优化对象.参考 optimizers.

loss: str (目标函数的名称) 或者目标函数. 参考 objectives.

class_mode: 值为”categorical”, “binary”. 用于计算分类正确率或调用 predict_classes方法.

theano_mode: A theano.compile.mode.Mode (reference).

fit(X, y, batch_size=128, nb_epoch=100, verbose=1, validation_split=0., validation_data =None, shuffle=True, show_accuracy=False): 固定的 epochs训练一个模型.

返回值:记录在字典中的训练成功的损失值,也可是验证损失值或精确度(适用的话).

参数:

X: data.

y: labels.

batch_size: int. 每一次迭代的样本数目.

nb_epoch: int.

verbose: 0 表示不更新日志, 1 更新日志, 2 每个epoch一个进度行.

validation_split: float (0 < x < 1).验证集的一部分.

validation_data: tuple (X, y) 数据作为验证集. 将加载validation_split.

shuffle: boolean. 每个 epoch是否随机抽取样本.

show_accuracy: boolean. 每个epoch是否显示分类正确率.

evaluate(X, y, batch_size=128, show_accuracy=False, verbose=1): 通过验证集的数据显示model的性能.

Return: 返回数据的损失值.

Arguments: 和上面fit函数定义相同. verbose用作二进制标识(进度条或无).

predict(X, batch_size=128, verbose=1):

Return: 测试数据的预测数组.

Arguments: 和fit一样.

predict_classes(X, batch_size=128, verbose=1): 返回test data的类预测数组.

Return: 测试数据的标签数组.

Arguments: 和fit一样.

train(X, y, accuracy=False): 一个batch的梯度更新. if accuracy==False, return tuple (loss_on_batch, accuracy_on_batch). Else, return loss_on_batch.

Return: 损失值, 或者tuple (loss, accuracy) if accuracy=True.

test(X, y, accuracy=False): 一个batch的性能计算. if accuracy==False, return tuple (loss_on_batch, accuracy_on_batch). Else, return loss_on_batch.

Return: 损失值, 或 tuple (loss, accuracy) if accuracy=True.

save_weights(fname):保存所有层的权值到HDF5文件中.

load_weights(fname): 加载保存在save_weights中模型权值. 只能加载相同结构的文件.

下面是自己写的一个小程序

[code]#coding:utf-8
'''
Created on 2015-9-12
@author: zzq2015
'''
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
import scipy.io as sio   
import numpy as np 

model = Sequential()
model.add(Dense(4, 200, init='uniform'))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(200, 100, init='uniform'))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(100, 50, init='uniform'))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(50, 20, init='uniform'))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(20, 3, init='uniform'))
model.add(Activation('softmax'))

model.compile(loss='binary_crossentropy', optimizer='adam', class_mode="binary")

matfn=u'/media/zzq2015/学习/python/da/kerasTrain.mat'
data=sio.loadmat(matfn) 
data = np.array(data.get('iris_train'))
trainDa = data[:80,:4]
trainBl  = data[:80,4:]
testDa = data[80:,:4]
testBl  = data[80:,4:] 

model.fit(trainDa, trainBl, nb_epoch=80, batch_size=20)
print model.evaluate(testDa, testBl, show_accuracy=True)
print model.predict_classes(testDa)
print '真实标签:\n'
print testBl


输出结果如下:

[code]Epoch 79

20/80 [======>.......................] - ETA: 0s - loss: 0.1042
40/80 [==============>...............] - ETA: 0s - loss: 0.0857
60/80 [=====================>........] - ETA: 0s - loss: 0.0826
80/80 [==============================] - 0s - loss: 0.1216     

10/10 [==============================] - 0s
[0.15986641560148043, 1.0]

10/10 [==============================] - 0s
[[0 0 1]
 [0 0 1]
 [0 0 1]
 [0 0 1]
 [0 0 1]
 [0 0 1]
 [0 0 1]
 [0 0 1]
 [0 0 1]
 [0 0 1]]
真实标签:

[[ 0.  0.  1.]
 [ 0.  0.  1.]
 [ 0.  0.  1.]
 [ 0.  0.  1.]
 [ 0.  0.  1.]
 [ 0.  0.  1.]
 [ 0.  0.  1.]
 [ 0.  0.  1.]
 [ 0.  0.  1.]
 [ 0.  0.  1.]]


0.15是损失值,1是准确率
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: