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

解決Keras的自定義lambda層去reshape張量時(shí)model保存出錯(cuò)問(wèn)題

 更新時(shí)間:2020年07月01日 14:53:57   作者:馮爽朗  
這篇文章主要介紹了解決Keras的自定義lambda層去reshape張量時(shí)model保存出錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

前幾天忙著參加一個(gè)AI Challenger比賽,一直沒有更新博客,忙了將近一個(gè)月的時(shí)間,也沒有取得很好的成績(jī),不過(guò)這這段時(shí)間內(nèi)的確學(xué)到了很多,就在決賽結(jié)束的前一天晚上,準(zhǔn)備復(fù)現(xiàn)使用一個(gè)新的網(wǎng)絡(luò)UPerNet的時(shí)候出現(xiàn)了一個(gè)很匪夷所思,莫名其妙的一個(gè)問(wèn)題。谷歌很久都沒有解決,最后在一個(gè)日語(yǔ)網(wǎng)站上看到了解決方法。

事后想想,這個(gè)問(wèn)題在后面搭建網(wǎng)絡(luò)的時(shí)候會(huì)很常見,但是網(wǎng)上卻沒有人提出解決辦法,So, I think that's very necessary for me to note this.

背景

分割網(wǎng)絡(luò)在進(jìn)行上采樣的時(shí)候我用的是雙線性插值上采樣的,而Keras里面并沒有實(shí)現(xiàn)雙線性插值的函數(shù),所以要自己調(diào)用tensorflow里面的tf.image.resize_bilinear()函數(shù)來(lái)進(jìn)行resize,如果直接用tf.image.resize_bilinear()函數(shù)對(duì)Keras張量進(jìn)行resize的話,會(huì)報(bào)出異常,大概意思是tenorflow張量不能轉(zhuǎn)換為Keras張量,要想將Kears Tensor轉(zhuǎn)換為 Tensorflow Tensor需要進(jìn)行自定義層,Keras自定義層的時(shí)候需要用到Lambda層來(lái)包裝。

大概源碼(只是大概意思)如下:

from keras.layers import Lambda
import tensorflow as tf
 
first_layer=Input(batch_shape=(None, 64, 32, 3))
f=Conv2D(filters, 3, activation = None, padding = 'same', kernel_initializer = 'glorot_normal',name='last_conv_3')(x)
upsample_bilinear = Lambda(lambda x: tf.image.resize_bilinear(x,size=first_layer.get_shape().as_list()[1:3]))
f=upsample_bilinear(f)

然后編譯 這個(gè)源碼:

optimizer = SGD(lr=0.01, momentum=0.9)
model.compile(optimizer = optimizer, loss = model_dice, metrics = ['accuracy'])
model.save('model.hdf5')

其中要注意到這個(gè)tf.image.resize_bilinear()里面的size,我用的是根據(jù)張量(first_layer)的形狀來(lái)做為reshape后的形狀,保存模型用的是model.save().然后就會(huì)出現(xiàn)以下錯(cuò)誤!

異常描述:

在一個(gè)epoch完成后保存model時(shí)出現(xiàn)下面錯(cuò)誤,五個(gè)錯(cuò)誤提示隨機(jī)出現(xiàn):

TypeError: cannot serialize ‘_io.TextIOWrapper' object

TypeError: object.new(PyCapsule) is not safe, use PyCapsule.new()

AttributeError: ‘NoneType' object has no attribute ‘update'

TypeError: cannot deepcopy this pattern object

TypeError: can't pickle module objects

問(wèn)題分析:

這個(gè)有兩方面原因:

tf.image.resize_bilinear()中的size不應(yīng)該用另一個(gè)張量的size去指定。

如果用了另一個(gè)張量去指定size,用model.save()來(lái)保存model是不能序列化的。那么保存model的時(shí)候只能保存權(quán)重——model.save_weights('mode_weights.hdf5')

解決辦法(兩種):

1.tf.image.resize_bilinear()的size用常數(shù)去指定

upsample_bilinear = Lambda(lambda x: tf.image.resize_bilinear(x,size=[64,32]))

2.如果用了另一個(gè)張量去指定size,那么就修改保存模型的函數(shù),變成只保存權(quán)重

model.save_weights('model_weights.hdf5')

總結(jié):

​​​​我想使用keras的Lambda層去reshape一個(gè)張量

如果為重塑形狀指定了張量,則保存模型(保存)將失敗

您可以使用save_weights而不是save進(jìn)行保存

補(bǔ)充知識(shí):Keras 添加一個(gè)自定義的loss層(output及compile中,輸出及l(fā)oss的表示方法)

例如:

計(jì)算兩個(gè)層之間的距離,作為一個(gè)loss

distance=keras.layers.Lambda(lambda x: tf.norm(x, axis=0))(keras.layers.Subtract(Dense1-Dense2))

這是添加的一個(gè)loss層,這個(gè)distance就直接作為loss

model=Model(input=[,,,], output=[distance])

model.compile(....., loss=lambda y_true, y_pred: ypred)

以上這篇解決Keras的自定義lambda層去reshape張量時(shí)model保存出錯(cuò)問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python刪除字典中的某個(gè)key的常用方法

    Python刪除字典中的某個(gè)key的常用方法

    字典是Python中的一種數(shù)據(jù)類型,它是一個(gè)無(wú)序的鍵值對(duì)集合,在實(shí)際的編程中,我們經(jīng)常需要?jiǎng)h除字典中的某個(gè)鍵值對(duì),本文將從多個(gè)角度分析Python刪除字典中的某個(gè)key的方法,需要的朋友可以參考下
    2024-10-10
  • python中的property及屬性與特性之間的優(yōu)先權(quán)

    python中的property及屬性與特性之間的優(yōu)先權(quán)

    這篇文章主要介紹了python中的property及屬性與特性之間的優(yōu)先權(quán),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • pyspark創(chuàng)建DataFrame的幾種方法

    pyspark創(chuàng)建DataFrame的幾種方法

    為了便于操作,使用pyspark時(shí)我們通常將數(shù)據(jù)轉(zhuǎn)為DataFrame的形式來(lái)完成清洗和分析動(dòng)作。那么你知道pyspark創(chuàng)建DataFrame有幾種方法嗎,下面就一起來(lái)了解一下
    2021-05-05
  • 定制FileField中的上傳文件名稱實(shí)例

    定制FileField中的上傳文件名稱實(shí)例

    下面小編就為大家?guī)?lái)一篇定制FileField中的上傳文件名稱實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • python logging設(shè)置level失敗的解決方法

    python logging設(shè)置level失敗的解決方法

    今天小編就為大家分享一篇python logging設(shè)置level失敗的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • pytorch 改變tensor尺寸的實(shí)現(xiàn)

    pytorch 改變tensor尺寸的實(shí)現(xiàn)

    今天小編就為大家分享一篇pytorch 改變tensor尺寸的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • Django框架模板文件使用及模板文件加載順序分析

    Django框架模板文件使用及模板文件加載順序分析

    這篇文章主要介紹了Django框架模板文件使用及模板文件加載順序,結(jié)合實(shí)例形式分析了Django框架模板文件的功能、用法及加載順序,需要的朋友可以參考下
    2019-05-05
  • Python使用剪切板的方法

    Python使用剪切板的方法

    這篇文章主要為大家詳細(xì)介紹了Python使用剪切板的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 淺談Python中threading join和setDaemon用法及區(qū)別說(shuō)明

    淺談Python中threading join和setDaemon用法及區(qū)別說(shuō)明

    這篇文章主要介紹了淺談Python中threading join和setDaemon用法及區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • python+selenium爬取微博熱搜存入Mysql的實(shí)現(xiàn)方法

    python+selenium爬取微博熱搜存入Mysql的實(shí)現(xiàn)方法

    這篇文章主要介紹了python+selenium爬取微博熱搜存入Mysql的實(shí)現(xiàn)方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01

最新評(píng)論

太原市| 泗洪县| 正宁县| 桐乡市| 武夷山市| 汕头市| 昌吉市| 壤塘县| 北宁市| 吉水县| 沅江市| 天峨县| 兴国县| 广西| 兖州市| 怀化市| 宁德市| 西乌珠穆沁旗| 板桥市| 本溪市| 侯马市| 浙江省| 丰镇市| 家居| 隆林| 岳阳市| 上杭县| 津南区| 遂宁市| 晋中市| 和硕县| 麻江县| 邓州市| 抚顺市| 仙居县| 衡阳县| 溧阳市| 沈丘县| 汨罗市| 丰都县| 六枝特区|