亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用keras時input_shape的維度表示問題說明

 更新時間:2020年06月29日 10:43:47   作者:vita2dolce  
這篇文章主要介紹了使用keras時input_shape的維度表示問題說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

Keras提供了兩套后端,Theano和Tensorflow,不同的后端使用時維度順序dim_ordering會有沖突。

對于一張224*224的彩色圖片表示問題,theano使用的是th格式,維度順序是(3,224,224),即通道維度在前,Caffe采取的也是這種方式。而Tensorflow使用的是tf格式,維度順序是(224,224,3),即通道維度在后。

Keras默認使用的是Tensorflow。我們在導入模塊的時候可以進行查看,也可以切換后端。

為了代碼可以在兩種后端兼容,可以通過data_format參數(shù)進行維度順序的設定,data_format='channels_first',對應“th”,data_format='channels_last',對應“tf”。

補充知識:Tensorflow Keras 中input_shape引發(fā)的維度順序沖突問題(NCHW與NHWC)

以tf.keras.Sequential構(gòu)建卷積層為例:

tf.keras.layers.Conv2D(10, 3, input_shape=(2, 9, 9),padding='same',activation=tf.nn.relu,kernel_initializer='glorot_normal', bias_initializer='glorot_normal'),

這是一個簡單的卷積層的定義,主要看input_shape參數(shù):

這是用來指定卷積層輸入形狀的參數(shù),由于Keras提供了兩套后端,Theano和Tensorflow,不同的后端使用時對該參數(shù)所指代的維度順序dim_ordering會有沖突。

Theano(th):

NCHW:順序是 [batch, in_channels, in_height, in_width]

Tensorflow(tf):keras默認使用這種方式

NHWC:順序是 [batch, in_height, in_width, in_channels]

即對于上述input_shape=(2, 9, 9)來說:我們先忽略batch,2會被解析為通道數(shù),矩陣大小為9*9,符合我們預期。而tf會將矩陣大小解析為2 * 9 ,且最后一位9代表通道數(shù),與預期不符。

解決

法一:

在卷積層定義中加入?yún)?shù)來讓keras在兩種后端之間切換:

data_format='channels_first':代表th

data_format='channels_last':代表tf

但是該法在某些時候不成功會報錯:

或許是cpu電腦導致的,只支持NHWC即tf模式。

只能修改相應文件的配置來使其支持NCHW,參考這里

法二:(推薦)

使用tf.transpose函數(shù)進行高維數(shù)據(jù)的轉(zhuǎn)置(維度大于2,軸的轉(zhuǎn)換)

如將上述(2,9,9)轉(zhuǎn)為(9,9,2)并且是以2為通道數(shù),即矩陣為9*9,而不是像reshape函數(shù)簡單的調(diào)整維度,若使用reshape函數(shù)來轉(zhuǎn)換,只會得到通道數(shù)為9,矩陣為9 * 2的數(shù)據(jù)。

tf.transpose(待轉(zhuǎn)矩陣,(1,2,0))

解釋:

​ 其中0,1,2…是原矩陣維度從左到右軸的標號,即(2,9,9)中三個維度分別對應標號0,1,2。而調(diào)整過后將標號順序變?yōu)?,2,0 即是把表通道數(shù)的軸置于最后,這樣轉(zhuǎn)置后的矩陣就滿足了keras的默認tf后端。即可正常訓練。

以上這篇使用keras時input_shape的維度表示問題說明就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

最新評論