Keras 如何修改圖片通道的順序
1. Error
在使用Keras.layers.convolutional.Convolution2D的時(shí)候
Convolution2D(32, 5, 5, border_mode='valid', input_shape=(1, 28, 28), activation='relu')
報(bào)如下錯(cuò)誤:
OverflowError: Range exceeds valid bounds
這是因?yàn)镵eras配置圖片通道順序錯(cuò)誤導(dǎo)致的。上面代碼使用圖片通道順序是[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')
補(bǔ)充:Keras設(shè)置后端數(shù)據(jù)維度順序
Keras是比較高級(jí)的深度學(xué)習(xí)框架,其對(duì)幾個(gè)比較常見的主流深度學(xué)習(xí)框架的封裝而來,也就是按照Keras的說法就是其后端是以Tensorflow、Theano和CNTK為基礎(chǔ)封裝而來。
CNTK我沒做過多了解,tensorflow的tensor的維度順序和Theano的維度順序是不一樣的,所以在使用Keras的時(shí)候要格外注意這一點(diǎn),如果后端不同的話,設(shè)置的數(shù)據(jù)維度順序也是要不一樣的。
tensorflow的數(shù)據(jù)維度默認(rèn)順序是channels_last的好像,也就是說其一個(gè)tensor的數(shù)據(jù)維度是[samples,rows,cols,channels],而Theano不同,其數(shù)據(jù)順序是channels_first,也就是[samples,rows,cols,channels],這個(gè)其實(shí)也就是這兩個(gè)框架的不同而已,如果用keras來寫深度學(xué)習(xí)模型的話,其實(shí)就只要設(shè)置好后端基本也沒啥問題,也不必太考慮數(shù)據(jù)維度的問題。
但是Keras的數(shù)據(jù)維度是可以改變的,即使是使用tensorflow為后端,Keras的數(shù)據(jù)格式也可以是channels_first的,并且這個(gè)是可以通過配置文件來改,也可以通過代碼來改的。
Keras的配置文件默認(rèn)是在$HOME/.keras/keras.json,可以用txt編輯器打開直接修改后端配置的:
{ "floatx": "float32", "epsilon": 1e-07, "image_data_format": "channels_last", "backend": "tensorflow" }
這是我的windows下的配置信息,默認(rèn)是以tensorflow為后端,數(shù)據(jù)格式是channels_last,但是我有個(gè)小項(xiàng)目是一開始是以Theano為后端來寫的,本來就只要稍微改一下就好,但是因?yàn)橹皇沁@個(gè)項(xiàng)目需要改為Theano,所以我并沒有直接改配置文件,而是在代碼里修改后端,這里需要用到Keras的后端backend來實(shí)現(xiàn),修改的代碼如下:
from keras import backend as BK BK.set_image_data_format("channels_first") BK.set_image_dim_ordering("th")
這樣設(shè)置之后再這個(gè)程序跑起來的時(shí)候其后端并不會(huì)被改變,改變的只是數(shù)據(jù)的維度順序而已,而且僅僅是針對(duì)當(dāng)前的程序,對(duì)其它程序是不影響的。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Python+tkinter實(shí)現(xiàn)簡(jiǎn)易計(jì)算器桌面軟件
tkinter是Python的標(biāo)準(zhǔn)GUI庫,對(duì)于初學(xué)者來說,它非常友好,因?yàn)樗峁┝舜罅康念A(yù)制部件,本文小編就來帶大家詳細(xì)一下如何利用tkinter制作一個(gè)簡(jiǎn)易計(jì)算器吧2023-09-09在Django中同時(shí)使用多個(gè)配置文件的方法
這篇文章主要介紹了在Django中同時(shí)使用多個(gè)配置文件的方法,Django是豐富多彩的Python web框架中人氣最高的一個(gè),需要的朋友可以參考下2015-07-07在echarts中圖例legend和坐標(biāo)系grid實(shí)現(xiàn)左右布局實(shí)例
這篇文章主要介紹了在echarts中圖例legend和坐標(biāo)系grid實(shí)現(xiàn)左右布局實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05python連接、操作mongodb數(shù)據(jù)庫的方法實(shí)例詳解
這篇文章主要介紹了python連接、操作mongodb數(shù)據(jù)庫的方法,結(jié)合實(shí)例形式詳細(xì)分析了Python針對(duì)MongoDB數(shù)據(jù)庫的連接、查詢、排序等相關(guān)操作技巧,需要的朋友可以參考下2019-09-09使用python進(jìn)行二維碼生成和識(shí)別的實(shí)現(xiàn)
在Python中,生成和識(shí)別二維碼可以使用不同的庫來實(shí)現(xiàn),最常用的庫包括 qrcode 和 pyzbar,以下是如何使用這些庫來生成和識(shí)別二維碼的示例,感興趣的小伙伴可以參考閱讀下2024-09-09python使用numpy計(jì)算兩個(gè)框的iou方法示例
這篇文章主要介紹了python使用numpy計(jì)算兩個(gè)框的iou方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08