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

淺談keras中的Merge層(實(shí)現(xiàn)層的相加、相減、相乘實(shí)例)

 更新時(shí)間:2020年05月23日 10:48:41   作者:C小C  
這篇文章主要介紹了淺談keras中的Merge層(實(shí)現(xiàn)層的相加、相減、相乘實(shí)例),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

【題目】keras中的Merge層(實(shí)現(xiàn)層的相加、相減、相乘)

詳情請(qǐng)參考:

Merge層

一、層相加

keras.layers.Add()

添加輸入列表的圖層。

該層接收一個(gè)相同shape列表張量,并返回它們的和,shape不變。

Example

import keras
 
input1 = keras.layers.Input(shape=(16,))
x1 = keras.layers.Dense(8, activation='relu')(input1)
input2 = keras.layers.Input(shape=(32,))
x2 = keras.layers.Dense(8, activation='relu')(input2)
added = keras.layers.Add()([x1, x2]) # equivalent to added = keras.layers.add([x1, x2])
 
out = keras.layers.Dense(4)(added)
model = keras.models.Model(inputs=[input1, input2], outputs=out)

二、層相減

SubStract

keras.layers.Subtract()

兩個(gè)輸入的層相減。

它將大小至少為2,相同Shape的列表張量作為輸入,并返回一個(gè)張量(輸入[0] - 輸入[1]),也是相同的Shape。

Example

import keras
 
input1 = keras.layers.Input(shape=(16,))
x1 = keras.layers.Dense(8, activation='relu')(input1)
input2 = keras.layers.Input(shape=(32,))
x2 = keras.layers.Dense(8, activation='relu')(input2)
# Equivalent to subtracted = keras.layers.subtract([x1, x2])
subtracted = keras.layers.Subtract()([x1, x2])
 
out = keras.layers.Dense(4)(subtracted)
model = keras.models.Model(inputs=[input1, input2], outputs=out)

三、層相乘

Multiply

keras.layers.Multiply()

該層接收一個(gè)列表的同shape張量,并返回它們的逐元素積的張量,shape不變。

注意:keras.layers.add(inputs)、keras.layers.subtract(inputs)、keras.layers.multiply(inputs)分別是對(duì)應(yīng)的層包裝,一般只用層包裝。

補(bǔ)充知識(shí):Keras天坑:想當(dāng)然的對(duì)層的直接運(yùn)算帶來(lái)的問(wèn)題

天坑

keras如何操作某一層的值(如讓某一層的值取反加1等)?keras如何將某一層的神經(jīng)元拆分以便進(jìn)一步操作(如取輸入的向量的第一個(gè)元素乘別的層)?keras如何重用某一層的值(如輸入層和輸出層乘積作為最終輸出)?

這些問(wèn)題都指向同一個(gè)答案,即使用Lambda層。

另外,如果想要更加靈活地操作層的話,推薦使用函數(shù)式模型寫法,而不是序列式。

Keras當(dāng)中,任何的操作都是以網(wǎng)絡(luò)層為單位,操作的實(shí)現(xiàn)都是新添一層,不管是加減一個(gè)常數(shù)還是做乘法,或者是對(duì)兩層的簡(jiǎn)單拼接。

所以,將一層單獨(dú)劈一半出來(lái),是一件難事。強(qiáng)調(diào),Keras的最小操作單位是Layer,每次操作的是整個(gè)batch。

自然,在keras中,每個(gè)層都是對(duì)象,可以通過(guò)dir(Layer對(duì)象)來(lái)查看具有哪些屬性。

然而,Backend中Tensorflow的最小操作單位是Tensor,而你搞不清楚到底是Layer和Tensor時(shí),盲目而想當(dāng)然地進(jìn)行層的操作,就會(huì)出問(wèn)題。到底是什么?通過(guò)type和shape是看不出來(lái)的。

如果你只是想對(duì)流經(jīng)該層的數(shù)據(jù)做個(gè)變換,而這個(gè)變換本身沒(méi)有什么需要學(xué)習(xí)的參數(shù),那么直接用Lambda Layer是最合適的了。

也就是說(shuō),對(duì)每一層的加減乘除都得用keras的函數(shù),你不能簡(jiǎn)單使用形如 ‘new_layer' =1−= 1-=1−'layer'這樣的表達(dá)方式來(lái)對(duì)層進(jìn)行操作。

當(dāng)遇到如下報(bào)錯(cuò)信息:

AttributeError: 'NoneType' object has no attribute '_inbound_nodes'

TypeError: 'Tensor' object is not callable

等等

這是就要考慮一下將程序中層的操作改成Lambda的方式表達(dá)。

使用Lambda編寫自己的層

Lamda層怎么用?官方文檔給了這樣一個(gè)例子。

# add a x -> x^2 layer
model.add(Lambda(lambda x: x ** 2))

# add a layer that returns the concatenation
# of the positive part of the input and
# the opposite of the negative part

def antirectifier(x):
  x -= K.mean(x, axis=1, keepdims=True)
  x = K.l2_normalize(x, axis=1)
  pos = K.relu(x)
  neg = K.relu(-x)
  return K.concatenate([pos, neg], axis=1)

def antirectifier_output_shape(input_shape):
  shape = list(input_shape)
  assert len(shape) == 2 # only valid for 2D tensors
  shape[-1] *= 2
  return tuple(shape)

model.add(Lambda(antirectifier,
     output_shape=antirectifier_output_shape))

乍一看,有點(diǎn)懵逼,什么亂七八糟的。事實(shí)上,很簡(jiǎn)單,假設(shè)L0和L1是兩層,你只要將你形如下面這樣的表達(dá):

L1 = F(L0);

改成

L1 = Lambda( lambda L0:F(L0) ) (L0)

即可。為了看得清楚,多加了幾個(gè)空格。

事實(shí)上,無(wú)非就是將原來(lái)的變換,通過(guò)Lambda(lambda 輸入:表達(dá)式)這樣的方式,改成了Lambda型函數(shù),再把輸入傳進(jìn)去,放在尾巴上即可。

參考

https://keras-cn.readthedocs.io/en/latest/layers/core_layer/#lambda

(個(gè)人覺(jué)得這份文檔某些地方比官方中文要完整許多)

keras許多簡(jiǎn)單操作,都需要新建一個(gè)層,使用Lambda可以很好完成需求。當(dāng)你不知道有這個(gè)東西存在的時(shí)候,就會(huì)走不少?gòu)澛贰?/p>

以上這篇淺談keras中的Merge層(實(shí)現(xiàn)層的相加、相減、相乘實(shí)例)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何使用pip安裝清華大學(xué)鏡像源

    如何使用pip安裝清華大學(xué)鏡像源

    這篇文章主要為大家介紹了如何使用pip安裝清華大學(xué)鏡像源步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • linux環(huán)境打包python工程為可執(zhí)行程序的過(guò)程

    linux環(huán)境打包python工程為可執(zhí)行程序的過(guò)程

    本次需求,在ubuntu上面開發(fā)的python代碼程序需要打包成一個(gè)可執(zhí)行程序然后交付給甲方,因?yàn)椴荒苤苯咏o源碼給甲方,所以尋找方法將python開發(fā)的源碼打包成一個(gè)可執(zhí)行程序,本次在ubuntu上打包python源碼的方法和在window上打包的有點(diǎn)類似,感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • python實(shí)現(xiàn)周期方波信號(hào)頻譜圖

    python實(shí)現(xiàn)周期方波信號(hào)頻譜圖

    這篇文章主要介紹了python 周期方波信號(hào)頻譜圖,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 使用k8s部署Django項(xiàng)目的方法步驟

    使用k8s部署Django項(xiàng)目的方法步驟

    這篇文章主要介紹了使用k8s部署Django項(xiàng)目的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python 如何安裝Selenium(推薦)

    Python 如何安裝Selenium(推薦)

    Selenium 是一個(gè) Web的自動(dòng)化測(cè)試工具 ,最初是為網(wǎng)站 自動(dòng)化測(cè)試而開發(fā)的 , Selenium 可以直接調(diào)用瀏覽器 ,它支持所有主流的瀏覽器,本文給大家介紹Python 如何安裝Selenium,感興趣的朋友一起看看吧
    2021-05-05
  • pytorch常用數(shù)據(jù)類型所占字節(jié)數(shù)對(duì)照表一覽

    pytorch常用數(shù)據(jù)類型所占字節(jié)數(shù)對(duì)照表一覽

    這篇文章主要介紹了pytorch常用數(shù)據(jù)類型所占字節(jié)數(shù)對(duì)照表一覽,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python使用pandas和openpyxl讀取Excel表格的方法詳解

    Python使用pandas和openpyxl讀取Excel表格的方法詳解

    這篇文章主要介紹了Python讀取Excel表格數(shù)據(jù)的方法,Python提供了多種讀取Excel文件的方式,最常用的庫(kù)是pandas和openpyxl,下面我將詳細(xì)介紹如何使用這兩個(gè)庫(kù)來(lái)讀取Excel文件,并包含一些實(shí)用示例,需要的朋友可以參考下
    2024-10-10
  • 使用pycharm進(jìn)行繪圖,圖片無(wú)法顯示的解決

    使用pycharm進(jìn)行繪圖,圖片無(wú)法顯示的解決

    這篇文章主要介紹了使用pycharm進(jìn)行繪圖,圖片無(wú)法顯示的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • python在Windows下安裝setuptools(easy_install工具)步驟詳解

    python在Windows下安裝setuptools(easy_install工具)步驟詳解

    這篇文章主要介紹了python在Windows下安裝setuptools(easy_install工具)步驟,簡(jiǎn)單介紹了setuptools并分析了其安裝步驟與所涉及的相關(guān)軟件,需要的朋友可以參考下
    2016-07-07
  • Python hashlib模塊的使用示例

    Python hashlib模塊的使用示例

    這篇文章主要介紹了Python hashlib模塊的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-10-10

最新評(píng)論