keras sequential() 模型

橙三吉。 提交于 2020-02-23 22:55:39

本文是我在阅读https://keras.io/getting-started/sequential-model-guide/时所做的一些笔记

sequential()主要有以下几个步骤。

一、网络的构建

第一种,直接在函数中传递层的实例

from keras.models import Sequential 
from keras.layers import Dense, Activation 
model = Sequential([ Dense(32, input_shape=(784,)), Activation('relu'), Dense(10), Activation('softmax'), ])

第二种,利用.add()方法一层一层地累加

1.1 定义input shape

model = Sequential() 
model.add(Dense(32, input_dim=784)) 
model.add(Activation('relu'))

二维的网络如Dense()可通过input_dim,三维为input_dim,input_length。

为定义输入的batch size(对于含状态量的RNN适用)可向layer传递batch_size参数,如果同时传递了batch_size=32和input_shape=(6, 8),将会认为每批输入都具有(32, 6, 8)的shape。

二、编译

训练模型前,需要对其进行编译,主要确定三个量:优化器optimizer、loss function、度量类型metrics

compile(optimizer, loss=None, metrics=None, loss_weights=None, sample_weight_mode=None, weighted_metrics=None, target_tensors=None)

2.1 optimizer

自定义优化器函数的参数:

from keras import optimizers 
model = Sequential() 
model.add(Dense(64, kernel_initializer='uniform', input_shape=(10,))) model.add(Activation('softmax')) 

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

在这一类中,clipnorm和clipvalue都可以用来定义梯度的范围(gradient clipping):

from keras import optimizers 

# All parameter gradients will be clipped to 
# a maximum norm of 1. 
sgd = optimizers.SGD(lr=0.01, clipnorm=1.) 

# All parameter gradients will be clipped to 
# a maximum value of 0.5 and 
# a minimum value of -0.5. 
sgd = optimizers.SGD(lr=0.01, clipvalue=0.5)

使用定义好的函数,这种情况下将会使用其默认的参数,如学习率:

# pass optimizer by name: default parameters will be used 
model.compile(loss='mean_squared_error', optimizer='sgd')

2.2 loss function

可以直接传递已有loss function的名字:

model.compile(loss='mean_squared_error', optimizer='sgd')

也可以利用tensorflow/Theano的符号函数:

from keras import losses 
model.compile(loss=losses.mean_squared_error, optimizer='sgd')

2.3 metrics

确定用于评估模型性能的函数,度量函数类似于loss function,但是其计算值不用于模型的训练。

例如:

model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['mae', 'acc'])

from keras import metrics 

model.compile(loss='mean_squared_error', optimizer='sgd', metrics=[metrics.mae, metrics.categorical_accuracy])

三、训练

fit(x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None,validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None,validation_freq=1, max_queue_size=10, workers=1, use_multiprocessing=False)

一个epoch是对所有x,y迭代循环一轮。

    verbose = 0 为不在标准输出流输出日志信息

    verbose = 1 为输出进度条记录

    verbose = 2 为每个epoch输出一行记录

validation_split:0~1之间的浮点数,用来指定训练集的一定比例数据作为验证集。验证集数据不用于训练,用于评估每个epoch后的metrics.

若指定了validation_data=(x_val, y_val),则覆盖validation_split

shuffle:布尔值,表示是否在训练过程中每个epoch前随机打乱输入样本的顺序。注意:这个shuffle并不是对整个数据集打乱顺序的,而是先split出训练集和验证集,然后对训练集进行shuffle。

.fit()后返回一个history,对训练过程中metrics值的记录。

 

四、评估

evaluate(x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None,callbacks=None, max_queue_size=10, workers=1, use_multiprocessing=False)

返回在测试模式下损失函数的值&metrics.

    verbose = 0 为不在标准输出流输出日志信息

    verbose = 1 为输出进度条记录

sample_weight:测试样本的可选Numpy权重数组,用于加权损失函数。

五、预测

predict(x, batch_size=None, verbose=0, steps=None, callbacks=None, max_queue_size=10,workers=1, use_multiprocessing=False)

对输入x进行预测

 

六、这一部分引自https://blog.csdn.net/xovee/article/details/91357143

当你使用.fit()函数时,意味着如下两个假设:

1.训练数据可以 完整地 放入到内存(RAM)里

2.数据已经不需要再进行任何处理了

fit_generator()

1.内存不足以一次性加载整个训练数据的时候

2.需要一些数据预处理(例如旋转和平移图片、增加噪音、扩大数据集等操作)

3.在生成batch的时候需要更多的处理

def generator(x, y, b_size):
     ... // 处理函数 

model.fit_generator(generator(train_x, train_y, batch_size),step_per_epochs=np.ceil(len(train_x)/batch_size), epochs=5 )

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!