文章目录
keras
1 各种层
1.1 dense层注意要点
Dense类 :全连接层
参数说明:
tf.layers.dense(
units, #输出的维度大小,改变inputs的最后一维
activation=None,
use_bias=True,
kernel_initializer=None, ##卷积核的初始化器
bias_initializer=tf.zeros_initializer(), ##偏置项的初始化器,默认初始化为0
kernel_regularizer=None, ##卷积核的正则化,可选
bias_regularizer=None, ##偏置项的正则化,可选
activity_regularizer=None, ##输出的正则化函数
kernel_constraint=None,
bias_constraint=None,
trainable=True,
name=None, ##层的名字
reuse=None ##是否重复使用参数
)
注意:units为输出的维度大小,只改变inputs的最后一维; Dense的输入为一个矩阵时, 相当于它的每一个行向量分别进入Dense层进行计算, 然后把计算得到的向量拼接成矩阵。
例如:
输出结果:
**
参考资料:
keras基础-Dense的输入的秩大于2时的注意事项
tf.layers.dense()的用法
1.2 keras2.0.8中的merge和Merge
keras/legacy/layers.py中的merge和Merge:(尽量别用)
merge:是个函数,应用于张量,不能用于层,后来被弃用,用法如下:
from keras.layers import merge
merge_old = merge([tensor1, tensor2], mode = 'concat', concat_axis = 3)
注意:最好别用这个,否则在训好模型以后导入会出问题(不认识Merge)
Merge:是个类,可用于张量和层,用法如下:
from keras.layers import Merge
merge_model.add(Merge([layer1,layer2], mode = 'concat', concat_axis = 1))
keras/layers/merge.py中的Merge:
基于类和函数的方法完全相同,且均可用于张量和层,具体使用方法:
# 法一:基于函数的方式
from keras.layers import merge
merge = merge.concatenate([layer1, layer2], axis=3)
# 法二:基于函数的方式,与法一的不同之处在于法二将法一的merge省略了
from keras.layers import concatenate
merge = concatenate([layer1, layer2], axis=3)
# 法三:基于类的方式,与采用函数的方式完全相同
from keras.layers import Concatenate
merge = Concatenate()([layer1, layer2], axis=3)
keras/layers/merge.py中add和Add完全相同,其它类似运算也是如此。可以看到,用这种方式更简洁。
concatenate----连接
add---相加
multiply---相乘,各维度相同或者满足广播条件
subtract---相减
average---平均
maximum---最大值
minimum---最小值
dot---点乘
1.3 tf.keras.layers.Lambda()——匿名函数层
2 多GPU训练
2.1 多GPU训练的实现
(1)设置可见的GPU:
(2)建立模型single_model;设置多GPU模型:model_mul_gpu
(3)多GPU模型的编译和训练:
2.2 多GPU训练模型的保存
一定要保存初始的模型,即上图中的single_model,而不能保存model_mul_gpu模型,否则会出问题。实现方式见参考:【keras】多GPU训练ModelCheckpoint()保存模型
3 张量操作
3.1 获取张量 tensor 的维度大小
在进行keras 网络计算时,有时候需要获取输入张量的维度来定义自己的层。但是由于keras是一个封闭的接口。因此在调用由于是张量不能直接用numpy 里的A.shape()。要用K.int_shape(x) 方法,例如:
>>> from keras import backend as K
>>> input = K.placeholder(shape=(2, 4, 5))
>>> K.int_shape(input)
(2, 4, 5)
>>> val = np.array([[1, 2], [3, 4]])
>>> kvar = K.variable(value=val)
>>> K.int_shape(kvar)
(2, 2)
3.2 张量增/减一个维度:tf.expand_dims()/tf.squeeze()
详见tensorflow将张量增/减一个维度:tf.expand_dims()/tf.squeeze()
tensorflow
1 TensorFlow 的常用模块介绍
详见TensorFlow 的常用模块介绍,说的很条理
- Module: tf.nn
神经网络的功能支持模块,最常用到的一个模块,所有经典神经网络的操作都在其中
- Module: tf.contrib
contrib 里面是实验性质的操作
- Module: tf.train
这个模块主要是用来支持训练模型的,主要包含了模型优化器、tfrecord 数据准备、模型保存、模型读取四个大类的功能。
- Module: tf.summary
主要用来配合 tensorboard 展示模型的信息
- 常用函数和方法
TensorFlow 还把那些经常使用的 Tensor 操作功能直接放在了 tf 下面,包括了:
Maths、Array、Matrix 相关的操作,也就是例如算术操作、张量(矩阵)操作、数据类型转换、矩阵的变形、切片、合并、规约、分割、序列比较与索引提取等常用功能。