Keras学习笔记(一)认识序贯(Sequential)模型

Keras由纯Python编写而成并基Tensorflow、Theano以及CNTK后端。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,它的可读性非常强!笔者在这参考了中文文档给自己做了个小结,方便以后查阅。

认识序贯(Sequential)模型

序贯模型是深度学习中最基本的模型,从字面意思理解就是顺序排列,也就是线形叠加的结构,比如最基本的BP神经网络、VGGNet等。
实现起来很简单。
模型类包含在keras.model中,我们从其中导入Sequential,隐含层、激活函数等都在layers库里面。如下为一个简单的例子。

from keras.models import Sequential
from keras.layers import Dense, Activation

model = Sequential([
Dense(32, units=784),#隐含层[784,32]
Activation('relu'),#激活函数
Dense(10),#隐含层[32,10]
Activation('softmax'),#激活函数
])

好,上面搭好了一个两层的BP神经网络(包含输出层),接下来我们就得定义怎么训练,装载输入数据,简单两句话搞定。

编译compile

需要配置三个参数:优化器、损失函数、指标列表。最简单的示例如下

# For a multi-class classification problem
model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

optimizer是优化器,可以用预先定义好的rmsprop等也可以自己定义。先导入optimizers库,再定义一个优化器,主要参数有学习率…不同的优化器各有不同。

from keras import optimizers
sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer=sgd)

自定义optimizer
from keras import optimizers
1、SGD
keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False)
其中decay学习率衰减率;momentum动量;nesterov:确定是否使用Nesterov动量
2、Adam
keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08)
3、RMSprop
keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=1e-06)
4、Adagrad
keras.optimizers.Adagrad(lr=0.01, epsilon=1e-06)
5、Adadelta
keras.optimizers.Adadelta(lr=1.0, rho=0.95, epsilon=1e-06)

损失函数是第二个参数,对于损失函数也有很多。

mean_squared_error或mse mean_absolute_error或mae
mean_absolute_percentage_er or或mape
mean_squared_logarithmic_error或msle squared_hinge hinge
categorical_hinge binary_crossentropy(亦称作对数损失,logloss) logcosh
categorical_crossentropy:亦称交叉熵损失函数,注意使用该目标函数时,需要将标签转化为形如(nb_samples,
nb_classes)的二值序列
sparse_categorical_crossentrop:如上,但接受稀疏标签。注意,使用该函数时仍然需要你的标签与输出值的维度相同,你可能需要在标签数据上增加一个维度:np.expand_dims(y,-1)
kullback_leibler_divergence:从预测值概率分布Q到真值概率分布P的信息增益,用以度量两个分布的差异.
poisson:即(predictions - targets * log(predictions))的均值
cosine_proximity:即预测值与真实标签的余弦距离平均值的相反数

训练

训练用fit函数,首先装载训练集data、label。还可以定义batch_size,epoch
一般来说对于2分类问题可以直接label装进去即可。如下

# Train the model, iterating on the data in batches of 32 samples
model.fit(data, labels, epochs=10, batch_size=32)

多分类时,考虑把标签[1000,1]转为[1000,n]也就是tensorflow中的onehot。

# Convert labels to categorical one-hot encoding
one_hot_labels = keras.utils.to_categorical(labels, num_classes=10)

# Train the model, iterating on the data in batches of 32 samples
model.fit(data, one_hot_labels, epochs=10, batch_size=32)

verbose:日志显示,0为不在标准输出流输出日志信息,1为输出进度条记录,2为每个epoch输出一行记录

预测

预测结果用到predict函数

model.predict( x, batch_size=32, verbose=0)
predict_on_batch( x)#预测一个batch

评估

对前面的metrics=[‘accuracy’]进行评估

model.evaluate( x, y, batch_size=32, verbose=1, sample_weight=None)

你可能感兴趣的:(计算机视觉,Tensorflow)