Keras 如何修改图片通道的顺序

 更新时间:2021年05月17日 17:01:31   作者:autoliuweijie  
这篇文章主要介绍了Keras 修改图片通道顺序的操作方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

1. Error

在使用Keras.layers.convolutional.Convolution2D的时候

Convolution2D(32, 5, 5, border_mode='valid', input_shape=(1, 28, 28), activation='relu')

报如下错误:

OverflowError: Range exceeds valid bounds

这是因为Keras配置图片通道顺序错误导致的。上面代码使用图片通道顺序是[channels][height][width]

2. 修改图片通道顺序

检查 ~/.keras/keras.json文件

if "image_dim_ordering": is "th" and "backend": "theano", your input_shape must be (channels, height, width)
if "image_dim_ordering": is "tf" and "backend": "tensorflow", your input_shape must be (height, width, channels)

所以,要保证你使用的通道顺序和配置的通道顺序一致

或者通过这样修改

from keras import backend
backend.set_image_dim_ordering('th')

补充:Keras设置后端数据维度顺序

Keras是比较高级的深度学习框架,其对几个比较常见的主流深度学习框架的封装而来,也就是按照Keras的说法就是其后端是以Tensorflow、Theano和CNTK为基础封装而来。

CNTK我没做过多了解,tensorflow的tensor的维度顺序和Theano的维度顺序是不一样的,所以在使用Keras的时候要格外注意这一点,如果后端不同的话,设置的数据维度顺序也是要不一样的。

tensorflow的数据维度默认顺序是channels_last的好像,也就是说其一个tensor的数据维度是[samples,rows,cols,channels],而Theano不同,其数据顺序是channels_first,也就是[samples,rows,cols,channels],这个其实也就是这两个框架的不同而已,如果用keras来写深度学习模型的话,其实就只要设置好后端基本也没啥问题,也不必太考虑数据维度的问题。

但是Keras的数据维度是可以改变的,即使是使用tensorflow为后端,Keras的数据格式也可以是channels_first的,并且这个是可以通过配置文件来改,也可以通过代码来改的。

Keras的配置文件默认是在$HOME/.keras/keras.json,可以用txt编辑器打开直接修改后端配置的:

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

这是我的windows下的配置信息,默认是以tensorflow为后端,数据格式是channels_last,但是我有个小项目是一开始是以Theano为后端来写的,本来就只要稍微改一下就好,但是因为只是这个项目需要改为Theano,所以我并没有直接改配置文件,而是在代码里修改后端,这里需要用到Keras的后端backend来实现,修改的代码如下:

from keras import backend as BK
BK.set_image_data_format("channels_first")
BK.set_image_dim_ordering("th")

这样设置之后再这个程序跑起来的时候其后端并不会被改变,改变的只是数据的维度顺序而已,而且仅仅是针对当前的程序,对其它程序是不影响的。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python实现自动签到脚本功能

    Python实现自动签到脚本功能

    这篇文章主要介绍了Python实现自动签到脚本,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • 如何用python绘制雷达图

    如何用python绘制雷达图

    这篇文章主要介绍了如何用python绘制雷达图,帮助大家更好的利用python进行数据分析,感兴趣的朋友可以了解下
    2021-04-04
  • 用Python实现一本个性化日历

    用Python实现一本个性化日历

    大家好,本篇文章主要讲的是用Python实现一本个性化日历,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • 复制粘贴功能的Python程序

    复制粘贴功能的Python程序

    接下来,由于我觉得手动复制粘贴这29000条插入语句实在是太痛苦了,所以打算用Python来完成这项工作。这是我第一次自己动手写Python代码,感觉还挺顺利的。
    2008-04-04
  • Python 迭代器工具包【推荐】

    Python 迭代器工具包【推荐】

    迭代器工具在产生数据的时候将会显得非常便捷、高效,掌握了这些基本的方法之后,通过简单的组合就可以获得更多迭代器工具。
    2016-05-05
  • Python3 合并二叉树的实现

    Python3 合并二叉树的实现

    这篇文章主要介绍了Python3 合并二叉树的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 详解Python是如何实现issubclass的

    详解Python是如何实现issubclass的

    这篇文章主要介绍了详解Python是如何实现issubclass的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 13个简便高效的Python脚本分享

    13个简便高效的Python脚本分享

    Python是顶级编程语言之一,它具有许多程序员从未使用过的许多隐藏功能。在这篇博客中,将和大家分享一下你可能从未使用过的13个Python脚本,感兴趣的可以学习一下
    2023-01-01
  • Python实用技巧之临时文件的妙用

    Python实用技巧之临时文件的妙用

    当我们用Python编写程序时,有时候需要临时存储数据且不希望占用多少内存,这些情况下以创建临时文件的方式进行处理,既不会干扰本地文件系统,又安全省事。本文主要介绍了临时文件的一些妙用,希望大家能够喜欢
    2023-02-02
  • pandas改变df列的顺序的方法实现

    pandas改变df列的顺序的方法实现

    本文主要介绍了pandas改变df列的顺序的方法实现,主要使用 Pandas 中的 reindex() 方法,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-03-03

最新评论