【问题标题】:unable to build model as backend.squeeze has no layer无法构建模型作为后端。挤压没有层
【发布时间】:2019-02-21 05:53:32
【问题描述】:

我正在尝试构建一个模型,其中我有一个张量必须被压缩然后输入 LSTM。

模型无法编译,因为压缩张量没有层属性。

Using TensorFlow backend.
Traceback (most recent call last):
  File "C:/workspace/keras_test/src/testing.py", line 10, in <module>
    model = Model(inputs=model_in, outputs=output)
  File "E:\ProgramData\Miniconda3\envs\py37\lib\site-packages\keras\legacy\interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)
  File "E:\ProgramData\Miniconda3\envs\py37\lib\site-packages\keras\engine\network.py", line 93, in __init__
    self._init_graph_network(*args, **kwargs)
  File "E:\ProgramData\Miniconda3\envs\py37\lib\site-packages\keras\engine\network.py", line 237, in _init_graph_network
    self.inputs, self.outputs)
  File "E:\ProgramData\Miniconda3\envs\py37\lib\site-packages\keras\engine\network.py", line 1353, in _map_graph_network
    tensor_index=tensor_index)
  File "E:\ProgramData\Miniconda3\envs\py37\lib\site-packages\keras\engine\network.py", line 1340, in build_map
    node_index, tensor_index)
  File "E:\ProgramData\Miniconda3\envs\py37\lib\site-packages\keras\engine\network.py", line 1340, in build_map
    node_index, tensor_index)
  File "E:\ProgramData\Miniconda3\envs\py37\lib\site-packages\keras\engine\network.py", line 1312, in build_map
    node = layer._inbound_nodes[node_index]
AttributeError: 'NoneType' object has no attribute '_inbound_nodes'

有关最小示例,请参阅:

from keras import Input, backend, Model
from keras.layers import LSTM, Dense

input_shape = (128, 1, 1)
model_in = Input(tensor=Input(input_shape), shape=input_shape)
squeezed = backend.squeeze(model_in, 2)
hidden1 = LSTM(10)(squeezed)
output = Dense(1, activation='sigmoid')(hidden1)

model = Model(inputs=model_in, outputs=output)
model.summary()

如何删除model_in 的一维而不丢失图层信息?

【问题讨论】:

    标签: python tensorflow keras lstm


    【解决方案1】:

    后端操作 squeeze 没有包裹在 Lambda 层中,因此生成的张量不是 Keras 张量。因此,它缺少一些属性,例如_inbound_nodes。您可以将squeeze 操作包装如下:

    from keras import Input, backend, Model
    from keras.layers import LSTM, Dense, Lambda
    
    input_shape = (128, 1, 1)
    model_in = Input(tensor=Input(input_shape), shape=input_shape)
    squeezed = Lambda(lambda x: backend.squeeze(x, 2))(model_in)
    hidden1 = LSTM(10)(squeezed)
    output = Dense(1, activation='sigmoid')(hidden1)
    
    model = Model(inputs=model_in, outputs=output)
    model.summary()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 2018-09-06
      • 1970-01-01
      • 2018-03-22
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多