minist例子相当于深度学习中的'hello,world'
下面以lasagne中的minist为原型解析:
首先需要了解使用的数据集:
minist数据集:共有100000张图片,每张图片大小为28X28,通道数为1,如果是彩色图片,通道数为3,图片显示为0~9手写体数字,每张图片仅包含一个数字,训练集为80000张图片,测试集为20000图片。
1.加载包:
import numpy as np
import theano
import theano.tensor as T
import lasagne
lasagne使用的底层包为theano
2.加载数据集:
def load_dataset():
...
return X_train,y_train,X_val,y_val,X_test,y_test
参数p范围0~1,表示删除全连接中的百分之几的连接
加载数据集的函数包含在minist.py里,在这里不赘述,X_val,y_val为验证集,也可以不需要。
3.建立训练模型,分为3种:
A.Multi-Layer Perceptron(MLP)
该网络是在全连接网络中加入了dropoutLayer,防止过拟合,是最简单的一种网络结构。
输入层:
def build_mlp(input_var = None):
l_in = lasagne.layers.InputLayer(shape=(None,1,28,28),input_var = input_var)
shape = (None,1,28,28),第一个参数为None表示可以适配任何的batch size,,1表示通道数,(28,28)为图片大小
给输入层加入dropout:
l_in_drop = lasagne.layers.DropoutLayers(l_in,p=0.2)
参数p范围0~1,表示删除全连接中的百分之几的连接
隐藏层:
神经元个数为800,激活函数为RELU,W为权重初始值l_hid1 = lasagne.layers.DenseLayer( l_in_drop, num_units=800, nonlinearity=lasagne.nonlinearities.rectify, W=lasagne.init.GlorotUniform())
隐藏层加入dropout
每层的dropout值为0.5l_hid1_drop = lasagne.layers.DropoutLayer(l_hid1, p=0.5) l_hid2 = lasagne.layers.DenseLayer( l_hid1_drop, num_units=800, nonlinearity=lasagne.nonlinearities.rectify) l_hid2_drop = lasagne.layers.DropoutLayer(l_hid2, p=0.5)
最后是输出层: