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

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

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

前言

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

最初的想法

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

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

這么寫會(huì)報(bào)錯(cuò),如下

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

這樣就沒問題了。

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

天坑

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

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

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

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

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

也就是說,對(duì)每一層的加減乘除都得用keras的函數(shù),你不能簡單使用形如 ‘new_layer' =1−= 1-=1−'layer'這樣的表達(dá)方式來對(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í)上,很簡單,假設(shè)L0和L1是兩層,你只要將你形如下面這樣的表達(dá):

L1 = F(L0);

改成

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

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

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

參考

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

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

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

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

相關(guān)文章

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

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

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

    python-docx如何縮進(jìn)兩個(gè)字符

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

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

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

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

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

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

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

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

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

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

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

    python中decimal模塊的具體使用

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

    一起來了解python的運(yùn)算符

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

    Python?3.12安裝庫報(bào)錯(cuò)解決方案

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

最新評(píng)論

仪陇县| 元阳县| 平昌县| 龙门县| 北碚区| 休宁县| 高青县| 上林县| 平乐县| 大荔县| 吉首市| 新余市| 万安县| 永顺县| 兰坪| 汝阳县| 都昌县| 汝州市| 田阳县| 铅山县| 伊宁市| 当雄县| 涞水县| 三穗县| 南汇区| 定日县| 永春县| 济阳县| 化德县| 夏津县| 襄城县| 滕州市| 瓦房店市| 乐昌市| 博罗县| 大理市| 涿鹿县| 和林格尔县| 诸暨市| 德清县| 印江|