最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Keras實現(xiàn)Tensor的相乘和相加代碼

 更新時間:2020年06月18日 11:10:34   作者:guofuzheng  
這篇文章主要介紹了使用Keras實現(xiàn)Tensor的相乘和相加代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

前言

最近在寫行為識別的代碼,涉及到兩個網(wǎng)絡(luò)的融合,這個融合是有加權(quán)的網(wǎng)絡(luò)結(jié)果的融合,所以需要對網(wǎng)絡(luò)的結(jié)果進行加權(quán)(相乘)和融合(相加)。

最初的想法

最初的想法是用Keras.layers.Add和Keras.layers.Multiply來做,后來發(fā)現(xiàn)這樣會報錯。

rate_rgb = k.variable(np.ones((1024,),dtype='float32')*0.8)
rate_esti = k.variable(np.ones((1024,),dtype='float32')*0.2)
weight_gru1 = Multiply()([rate_rgb,gru1])
weight_gru2 = Multiply()([rate_esti,gru2])
last = Add()([weight_gru1,weight_gru2])

這么寫會報錯,如下

AttributeError: 'Variable' object has no attribute '_keras_history'

正確做法

后來在網(wǎng)上參考大神的博客,改為如下

weight_1 = Lambda(lambda x:x*0.8)
weight_2 = Lambda(lambda x:x*0.2)
weight_gru1 = weight_1(gru1)
weight_gru2 = weight_2(gru2)
last = Add()([weight_gru1,weight_gru2])

這樣就沒問題了。

補充知識:Keras天坑:想當(dāng)然的對層的直接運算帶來的問題

天坑

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

這些問題都指向同一個答案,即使用Lambda層。

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

Keras當(dāng)中,任何的操作都是以網(wǎng)絡(luò)層為單位,操作的實現(xiàn)都是新添一層,不管是加減一個常數(shù)還是做乘法,或者是對兩層的簡單拼接。所以,將一層單獨劈一半出來,是一件難事。強調(diào),Keras的最小操作單位是Layer,每次操作的是整個batch。自然,在keras中,每個層都是對象,可以通過dir(Layer對象)來查看具有哪些屬性。然而,Backend中Tensorflow的最小操作單位是Tensor,而你搞不清楚到底是Layer和Tensor時,盲目而想當(dāng)然地進行層的操作,就會出問題。到底是什么?通過type和shape是看不出來的。

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

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

當(dāng)遇到如下報錯信息:

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

TypeError: 'Tensor' object is not callable

等等

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

使用Lambda編寫自己的層

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

# 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))

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

L1 = F(L0);

改成

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

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

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

參考

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

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

keras許多簡單操作,都需要新建一個層,使用Lambda可以很好完成需求。當(dāng)你不知道有這個東西存在的時候,就會走不少彎路。

以上這篇使用Keras實現(xiàn)Tensor的相乘和相加代碼就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python命令行參數(shù)解析工具 docopt 安裝和應(yīng)用過程詳解

    Python命令行參數(shù)解析工具 docopt 安裝和應(yīng)用過程詳解

    這篇文章主要介紹了Python命令行參數(shù)解析工具 docopt 安裝和應(yīng)用過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • python-docx如何縮進兩個字符

    python-docx如何縮進兩個字符

    筆者遇到這樣的需求要求正文內(nèi)容每段首行頂兩格,也就是向右縮進兩個字符,怎么操作呢?下面小編給大家?guī)砹藀ython-docx的縮進問題——如何縮進兩個字符,需要的朋友可以參考下
    2022-11-11
  • Linux下遠(yuǎn)程連接Jupyter+pyspark部署教程

    Linux下遠(yuǎn)程連接Jupyter+pyspark部署教程

    這篇文章主要為大家詳細(xì)介紹了Linux下遠(yuǎn)程連接Jupyter+pyspark部署教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Python中不同進制互相轉(zhuǎn)換(二進制、八進制、十進制和十六進制)

    Python中不同進制互相轉(zhuǎn)換(二進制、八進制、十進制和十六進制)

    這篇文章主要介紹了Python中不同進制互相轉(zhuǎn)換,本文講解了二進制、八進制、十進制和十六進制的相與轉(zhuǎn)換實現(xiàn)代碼,需要的朋友可以參考下
    2015-04-04
  • Pytest運行方式及參數(shù)使用示例詳解

    Pytest運行方式及參數(shù)使用示例詳解

    這篇文章主要介紹了Pytest運行方式及參數(shù)使用詳細(xì)教程,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • python學(xué)習(xí)之使用Matplotlib畫實時的動態(tài)折線圖的示例代碼

    python學(xué)習(xí)之使用Matplotlib畫實時的動態(tài)折線圖的示例代碼

    這篇文章主要介紹了python學(xué)習(xí)之使用Matplotlib畫實時的動態(tài)折線圖的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 詳解python爬取彈幕與數(shù)據(jù)分析

    詳解python爬取彈幕與數(shù)據(jù)分析

    這篇文章主要介紹了詳解python爬取彈幕與數(shù)據(jù)分析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • python中decimal模塊的具體使用

    python中decimal模塊的具體使用

    本文主要介紹了python中decimal模塊的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 一起來了解python的運算符

    一起來了解python的運算符

    這篇文章主要為大家詳細(xì)介紹了python的運算符,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Python?3.12安裝庫報錯解決方案

    Python?3.12安裝庫報錯解決方案

    這篇文章主要介紹了Python?3.12安裝庫報錯的解決方案,講解了Python?3.12移除pkgutil.ImpImporter支持導(dǎo)致的AttributeError錯誤,并提供了兩種解決方案,需要的朋友可以參考下
    2025-03-03

最新評論

庆安县| 泊头市| 汉川市| 那曲县| 澄江县| 巴东县| 英吉沙县| 西华县| 嵊州市| 桃源县| 敦煌市| 西吉县| 南丹县| 宝鸡市| 汉阴县| 湟中县| 高陵县| 通渭县| 疏附县| 嘉峪关市| 中江县| 铜川市| 蒲江县| 钟山县| 清水河县| 如东县| 新巴尔虎左旗| 比如县| 四子王旗| 塘沽区| 册亨县| 丹江口市| 井陉县| 铜陵市| 涿鹿县| 鲁甸县| 长垣县| 永和县| 普安县| 宜兰县| 红安县|