浅谈keras 的抽象后端(from keras import backend as K)


Posted in Python onJune 16, 2020

keras后端简介:

Keras 是一个模型级库,为开发深度学习模型提供了高层次的构建模块。它不处理诸如张量乘积和卷积等底层操作,目的也就是尽量不重复造轮子。

但是底层操作还是需要的, 所以keras 依赖于一个专门的、优化的张量操作库来完成这个操作。

我们可以简单的认为这是 Keras 的「后端引擎」, keras 有三个后端实现可用 、 即: TensorFlow 后端,Theano 后端,CNTK 后端。

浅谈keras 的抽象后端(from keras import backend as K)

如果你需要修改你的后端, 只要将字段 backend 更改为 theano 或 cntk,Keras 将在下次运行 Keras 代码时使用新的配置。

你也可以定义环境变量 KERAS_BACKEND,这会覆盖配置文件中定义的内容:

定义的方式如下。

KERAS_BACKEND=tensorflow python -c “from keras import backend” Using
TensorFlow backend.

在 Keras 中,可以加载比 “tensorflow”, “theano” 和 “cntk” 更多的后端, 即可以选择你自己所定义的后端。

Keras 也可以使用外部后端,这可以通过更改 keras.json 配置文件和 “backend” 设置来执行。

假设您有一个名为 my_module 的 Python 模块,您希望将其用作外部后端。keras.json 配置文件将更改如下:

{
“image_data_format”: “channels_last”,
“epsilon”: 1e-07,
“floatx”: “float32”,
“backend”: “my_package.my_module” }

必须验证外部后端才能使用,有效的后端必须具有以下函数:placeholder, variable and function.

如果由于缺少必需的条目而导致外部后端无效,则会记录错误,通知缺少哪些条目。

下面我们来看一下 keras 的 json 文件中其他的一些更加详细的配置;

The keras.json 配置文件包含以下设置, 你可以通过编辑 $ HOME/.keras/keras.json 来更改这些设置。

{
“image_data_format”: “channels_last”,
“epsilon”: 1e-07,
“floatx”: “float32”,
“backend”: “tensorflow” }

第一个参数 image_data_format 的可选参数为 : “channels_last” 或者 “channels_first”,当然, 从名字中你就可以看出他们的作用是什么;

如果是 tensorflow作为后端, 那么就应当是channel last , 也就是输入的tensor的shape (height, width, channels);

如果是 theano, 那么就是 channel first。

epsilon: 浮点数,用于避免在某些操作中被零除的数字模糊常量。

floatx: 字符串,“float16”, “float32”, 或 “float64”。默认浮点精度。

backend: 字符串, “tensorflow”, “theano”, 或 “cntk”。

使用抽象 Keras 后端:

如果你希望你编写的 Keras 模块与 Theano (th) 和 TensorFlow (tf) 兼容,则必须通过抽象 Keras 后端 API 来编写它们。

你可以通过以下方式导入后端模块:

from keras import backend as K

下面是后端使用的一些介绍:

这段代码实例化一个输入占位符。它等价于 tf.placeholder() 或 th.tensor.matrix(), th.tensor.tensor3(), 等等。

inputs = K.placeholder(shape=(2, 4, 5))
inputs = K.placeholder(shape=(None, 4, 5))
inputs = K.placeholder(ndim=3)

也就是说你一旦引用了 keras 的 backed, 那么大多数你需要的张量操作都可以通过统一的Keras后端接口完成,

而不关心具体执行这些操作的是Theano还是TensorFlow。

下面的代码实例化一个变量。它等价于 tf.Variable() 或 th.shared()。

import numpy as np
val = np.random.random((3, 4, 5))
var = K.variable(value=val)

var = K.zeros(shape=(3, 4, 5))
var = K.ones(shape=(3, 4, 5))

你需要的大多数张量操作都可以像在 TensorFlow 或 Theano 中那样完成:

b = K.random_uniform_variable(shape=(3, 4), low=0, high=1) # 均匀分布
c = K.random_normal_variable(shape=(3, 4), mean=0, scale=1) # 高斯分布
d = K.random_normal_variable(shape=(3, 4), mean=0, scale=1)

以上这篇浅谈keras 的抽象后端(from keras import backend as K)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python函数学习笔记
Oct 07 Python
浅谈Python中重载isinstance继承关系的问题
May 04 Python
numpy添加新的维度:newaxis的方法
Aug 02 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
Dec 05 Python
python实现字符串加密 生成唯一固定长度字符串
Mar 22 Python
Python学习笔记之For循环用法详解
Aug 14 Python
简单了解python中的f.b.u.r函数
Nov 02 Python
Series和DataFrame使用简单入门
Nov 13 Python
如何写python的配置文件
Jun 07 Python
在django中查询获取数据,get, filter,all(),values()操作
Aug 09 Python
4种非常实用的python内置数据结构
Apr 28 Python
Python如何识别银行卡卡号?
Jun 10 Python
记录模型训练时loss值的变化情况
Jun 16 #Python
python实现批量转换图片为黑白
Jun 16 #Python
在keras中实现查看其训练loss值
Jun 16 #Python
安装python3.7编译器后如何正确安装opnecv的方法详解
Jun 16 #Python
Keras在训练期间可视化训练误差和测试误差实例
Jun 16 #Python
如何在Windows中安装多个python解释器
Jun 16 #Python
使用pyplot.matshow()函数添加绘图标题
Jun 16 #Python
You might like
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
PHP系统命令函数使用分析
2013/07/05 PHP
国产PHP开发框架myqee新手快速入门教程
2014/07/14 PHP
php变量与数组相互转换的方法(extract与compact)
2016/12/02 PHP
php curl 模拟登录并获取数据实例详解
2016/12/22 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
tp5实现微信小程序多图片上传到服务器功能
2018/07/16 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
js将当前时间格式转换成时间搓(自写)
2013/09/26 Javascript
JS数组去重与取重的示例代码
2014/01/24 Javascript
jQuery遍历之next()、nextAll()方法使用实例
2014/11/08 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
2015/05/25 Javascript
JS实现的Select三级下拉菜单代码
2015/08/20 Javascript
JavaScript 通过Ajax 动态加载CheckBox复选框
2017/08/31 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
2019/05/24 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
2019/05/30 Javascript
Vue父组件向子组件传值以及data和props的区别详解
2020/03/02 Javascript
Python中针对函数处理的特殊方法
2014/03/06 Python
python使用百度翻译进行中翻英示例
2014/04/14 Python
Python中的Classes和Metaclasses详解
2015/04/02 Python
Python多线程实现同步的四种方式
2017/05/02 Python
python binascii 进制转换实例
2019/06/12 Python
PyQT5 QTableView显示绑定数据的实例详解
2019/06/25 Python
用python实现英文字母和相应序数转换的方法
2019/09/18 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
大学毕业感言
2014/01/10 职场文书
机械设备与数控技术专业求职信
2014/08/10 职场文书
先进事迹演讲稿
2014/09/01 职场文书
2014国庆节幼儿园亲子活动方案
2014/09/16 职场文书
小学五一劳动节活动总结
2015/02/09 职场文书
2015年度房地产工作总结
2015/04/09 职场文书
学校标语口号大全
2015/12/26 职场文书
通知怎么写?
2019/04/17 职场文书
vue动态绑定style样式
2022/04/20 Vue.js