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

錯誤原因與提示

我在使用keras搭建模型時,需要使用TensorFlow夾雜搭建,但是keras無論使用函數式還是序列式,每一層的輸出類型都是layer類型 ,所以當你使用非keras函數時,得到的變量類型不是layer類型,因此會報下面的錯誤:

File "..\lib\site-packages\keras\engine\network.py", line 1325, in build_map
node = layer._inbound_nodes[node_index]
AttributeError: 'NoneType' object has no attribute '_inbound_nodes'

解決辦法

解決方法就是將自定義層的輸出變爲keras layer類型,實現也很簡單,就是調用keras中的Lambda函數。

下面以簡單的案例舉例說明如何解決:

方法一

from tensorflow import squeeze
from keras.layers import Lambda

def squeeze_dim(input):
    output = squeeze(input, axis = [1,2])

def my_model(inputs):
    x = Conv2d(inputs)
    ...
    
    # 只需要使用Lambda調用預定義好的函數即可
    x = Lambda(squeeze_dim, name='sqe_dim')(x)
    
    model = Model(input = inputs, output = x)
    ...

方法二

from tensorflow import squeeze
from keras.layers import Lambda

def my_model(inputs):
    x = Conv2d(inputs)
    ...
    
    # 直接使用Lambda將函數包裹
    x = Lambda(lambda x: squeeze(x, axis = [1,2]) )
    
    model = Model(input = inputs, output = x)
    ...

結束

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章