赞
踩
tf.keras的使用说明了高层API已经被tensorflow使用。tf.keras下提供了许多模块,如:
1)activations激励函数,如relu、softmax、sigmoid等
2)applications应用模型,如densenet、mobilenet、vgg16等
3)dataset数据,如mnist、fashion_mnist等
4)layers神经网络层,如dense、conv2d等
5)model模型,如save、load等
6)utils工具,如to_categorical将类向量转化为二进制类矩阵等
1、常见layer神经网络层
Input(…): 用于实例化一个输入 Tensor,作为神经网络的输入。
average_pooling1d(…): 一维平均池化层
average_pooling2d(…): 二维平均池化层
average_pooling3d(…):三维平均池化层
batch_normalization(…): 批量标准化层
conv1d(…): 一维卷积层
conv2d(…): 二维卷积层
conv2d_transpose(…): 二维反卷积层
conv3d(…): 三维卷积层
conv3d_transpose(…): 三维反卷积层
dense(…): 全连接层
dropout(…): Dropout层
flatten(…): Flatten层,即把一个 Tensor 展平,变为1维Tensor
max_pooling1d(…): 一维最大池化层
max_pooling2d(…): 二维最大池化层
max_pooling3d(…): 三维最大池化层
separable_conv2d(…): 二维深度可分离卷积层
2、查看Model中某一层的权重和偏置
神经网络中可分为卷积层、池化层、全连接层等,并不是Model中的每一层都是可以查看的,如卷积层可以查看权重和偏置,但池化层就不能查看,因为池化层本身没有权重和偏置,这就首先需要理解神经网络各个层次背后的数学推导。Keras中查看某一层的权重和偏置使用model.get_layer('conv2d_1').get_weights(),其中conv2d_1为卷积层的名称。
weight_bc1, bias_bc1 = east_detect.get_layer('block1_conv1').get_weights()
1、model.compile 配置模型的训练参数,主要是优化器与损失函数
在训练模型之前,我们需要通过compile来对学习过程进行配置,compile接收三个参数:优化器optimizer,损失函数loss,指标列表metrics。
compile(self, optimizer, loss, metrics=None, sample_weight_mode=None)
optimizer:字符串(预定义优化器名)或者优化器对象,,如 rmsprop
或 adagrad
,也可以是 Optimizer 类的实例。详见:optimizers。
loss:字符串(预定义损失函数名)或目标函数,模型试图最小化的目标函数,它可以是现有损失函数的字符串标识符,如categorical_crossentropy
或 mse
,也可以是一个目标函数。详见:losses。
metrics:列表,包含评估模型在训练和测试时的网络性能的指标,典型用法是metrics=[‘accuracy’]。评估标准可以是现有的标准的字符串标识符,也可以是自定义的评估标准函数。
例子:
- # 多分类问题
- model.compile(optimizer='rmsprop',
- loss='categorical_crossentropy',
- metrics=['accuracy'])
-
- # 二分类问题
- model.compile(optimizer='rmsprop',
- loss='binary_crossentropy',
- metrics=['accuracy'])
-
- # 均方误差回归问题
- model.compile(optimizer='rmsprop',
- loss='mse')
-
- # 自定义评估标准函数
- import keras.backend as K
-
- def mean_pred(y_true, y_pred):
- return K.mean(y_pred)
-
- model.compile(optimizer='rmsprop',
- loss='binary_crossentropy',
- metrics=['accuracy', mean_pred])
2、训练模型的三个独立函数fit、fit_generator、train_on_batch
1)使用fit()函数
当使用.fit()函数时,意味着如下两个条件成立:1)训练数据可以 完整地 放入到内存(RAM)里;2)数据已经不需要再进行任何处理了。 (实际的数据集不会都像Tensorflow官方教程中经常使用的MNIST数据集那样小,一次性加载训练数据到fit是行不通的。)
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)
None
(默认)。None
(默认)。None
。每次提度更新的样本数。如果未指定,默认为 32.x
或 y
上的一轮迭代。请注意,与 initial_epoch
一起,epochs
被理解为 「最终轮次」。模型并不是训练了 epochs
轮,而是到第 epochs
轮停止训练。keras.callbacks.Callback
实例。一系列可以在训练时使用的回调函数。callbacks可以做的事情有:1)将每一个训练batch的精度写入tensorBoard中的logs以便查阅;2)周期性地将你的模型保存至disk硬盘中;3)提前终止训练。详见 callbacks。x
和y
数据的最后一部分样本中。https://www.cnblogs.com/wj-1314/p/9967480.html
2)使用fit_generator()
在Keras中对于小样本数据而言可以使用fit()和predict(),因为它们可以被一次性放入到内存中。大多数的数据都是非常大的,并且不能一次性加载到内存中。解决办法就是使用fit_generator()和predict_generator(),这是在训练和预测过程中将图像加载到内存中的常用数据生成函数。
3)model.train_on_batch 运行一批样品的单次梯度更新
train_on_batch用于非固定batch_size的模型训练与模型的继续训练。train_on_batch
allows you to expressly update weights based on a collection of samples you provide, without regard to any fixed batch size. One case when it might be nice to use train_on_batch
is for updating a pre-trained model on a single new batch of samples. Suppose you've already trained and deployed a model, and sometime later you've received a new set of training samples previously never used. You could use train_on_batch
to directly update the existing model only on those samples. Other methods can do this too, but it is rather explicit to use train_on_batch
for this case.
3、model.evaluate 模型评估
model.evaluate是评估你训练的模型,它的输出结果是精度accuracy与损失,而不是预测你输入的数据。若需要对当前输入数据进行预测可使用model.predict。
4、model.predict 模型预测
model.predict除了对于输出层预测外,还能对于中间层进行预测,具体方法为重新搭建一个中间层为最终输出的模型,进行predict。
- # 获取中间层输出
- layer_name = 'dense_2'
- intermediate_layer_model = Model(inputs=load_model.input, outputs=load_model.get_layer(layer_name).output)
- intermediate_output = intermediate_layer_model.predict(x_test_forpredict)
1)to_categorical 将类向量(整数)转换为二进制类矩阵。
keras.utils.to_categorical(y, num_classes=None, dtype='float32')
例如,用于 categorical_crossentropy。
参数
float32
, float64
, int32
...)示例
- # 考虑一组 3 个类 {0,1,2} 中的 5 个标签数组:
- > labels
- array([0, 2, 1, 2, 0])
- # `to_categorical` 将其转换为具有尽可能多表示类别数的列的矩阵。
- # 行数保持不变。
- > to_categorical(labels)
- array([[ 1., 0., 0.],
- [ 0., 0., 1.],
- [ 0., 1., 0.],
- [ 0., 0., 1.],
- [ 1., 0., 0.]], dtype=float32)
返回
输入的二进制矩阵表示。
2)绘制网络模型
- from tensorflow.keras.utils import plot_model
-
- # 用于 Keras绘制网络模型
- draw_model = False
- if draw_model == True:
- plot_model(model, show_shapes=True,to_file='../model.png')
参考文章:
【1】https://www.tensorflow.org/api_docs/python/tf/keras/Model
【2】https://blog.csdn.net/xierhacker/article/details/82747919
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。