本文是我在阅读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 )
来源:CSDN
作者:HangGaoao
链接:https://blog.csdn.net/hangsyt108/article/details/104467041