浅谈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 中的列表解析和生成表达式
Mar 10 Python
Python列表切片用法示例
Apr 19 Python
Django使用Celery异步任务队列的使用
Mar 13 Python
python3实现指定目录下文件sha256及文件大小统计
Feb 25 Python
python3实现表白神器
Apr 09 Python
python SQLAlchemy 中的Engine详解
Jul 04 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
Dec 22 Python
Python3的socket使用方法详解
Feb 18 Python
python要安装在哪个盘
Jun 15 Python
使用anaconda安装pytorch的实现步骤
Sep 03 Python
Django实现文章详情页面跳转代码实例
Sep 16 Python
Jupyter notebook 不自动弹出网页的解决方案
May 21 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
咖啡知识 咖啡养豆要养多久 排气又是什么
2021/03/06 新手入门
php 格式化数字的时候注意数字的范围
2010/04/13 PHP
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
2013/05/08 PHP
PHP文件缓存类实现代码
2015/10/26 PHP
深入浅析用PHP实现MVC
2016/03/02 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
2016/04/11 PHP
PHP的swoole扩展安装方法详细教程
2016/05/18 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
DOM Scripting中的图片切换[兼容Firefox]
2010/06/12 Javascript
JavaScript实现的日期控件具体代码
2013/11/18 Javascript
jQuery验证元素是否为空的两种常用方法
2015/03/17 Javascript
初识Node.js
2015/03/20 Javascript
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
js实现按钮颜色渐变动画效果
2015/08/20 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
Angular页面间切换及传值的4种方法
2016/11/04 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
2017/02/27 Javascript
Vue使用mixins实现压缩图片代码
2018/03/14 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
Vue 如何使用props、emit实现自定义双向绑定的实现
2020/06/05 Javascript
Node.js 中如何收集和解析命令行参数
2021/01/08 Javascript
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
15行Python代码带你轻松理解令牌桶算法
2018/03/21 Python
利用Python半自动化生成Nessus报告的方法
2019/03/19 Python
python实现最大优先队列
2019/08/29 Python
浅谈django 重载str 方法
2020/05/19 Python
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
运动会通讯稿200字
2014/02/16 职场文书
《秋姑娘的信》教学反思
2014/02/28 职场文书
触电现场处置方案
2014/05/14 职场文书
2015年世界环境日活动总结
2015/02/11 职场文书
2017元旦、春节期间廉洁自律承诺书
2016/03/25 职场文书
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL