keras和tensorflow

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 相关的操作,也就是例如算术操作、张量(矩阵)操作、数据类型转换、矩阵的变形、切片、合并、规约、分割、序列比较与索引提取等常用功能。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值