Python keras.layers.Embedding TypeError:uu call_uu()缺少1个必需的位置参数:';形状';

Python keras.layers.Embedding TypeError:uu call_uu()缺少1个必需的位置参数:';形状';,python,tensorflow,keras,neural-network,Python,Tensorflow,Keras,Neural Network,我正在尝试使用Keras.layers.Embedding层和embeddings_initializer=Keras.initializers.Identity建立一个Keras模型 这应该让我直接在Keras模型中实现一个热编码,同时向模型提供单词列表的嵌入表示(即从单词键到稀疏二进制向量) 每个示例的输入示例: [ [5,22,3], # Statement encoding [6,9,1,76], # Context encoding ] 我正在尝试实施以下内容: (看丹尼尔的回答

我正在尝试使用Keras.layers.Embedding层和embeddings_initializer=Keras.initializers.Identity建立一个Keras模型

这应该让我直接在Keras模型中实现一个热编码,同时向模型提供单词列表的嵌入表示(即从单词键到稀疏二进制向量)

每个示例的输入示例:

[ [5,22,3], # Statement encoding
  [6,9,1,76], # Context encoding
]
我正在尝试实施以下内容:

(看丹尼尔的回答)

嵌入层的预期输出:

[ [ [B11], [B12], [B13] ], # Statement encoding for lstm_emb_phrase 
  [[B21], [B22], [B23], [B24] ], # Context encoding for lstm_emb_cont
]
其中#Bij#应该是短语i的单词j的二进制数组

这是我目前编写的代码:

DEFAULT_INNER_ACTIVATION = 'relu'
DEFAULT_OUTPUT_ACTIVATION = 'softplus'

    def __init__(self, sentence_max_lenght, ctx_max_len, dense_features_dim, vocab_size):

        lstm_input_phrase = keras.layers.Input(shape=(sentence_max_lenght,), name='L0_STC_MyApp')
        lstm_input_cont = keras.layers.Input(shape=(ctx_max_len,), name='L0_CTX_MyApp')

        # The following line is #56
        lstm_emb_phrase = keras.layers.Embedding(vocab_size, vocab_size, embeddings_initializer=keras.initializers.Identity,
                                                 input_length=sentence_max_lenght, name='L0E_STC_MyApp')(lstm_input_phrase)

        lstm_emb_phrase = keras.layers.LSTM(DEFAULT_MODEL_L1_STC_DIM, name='L1_STC_MyApp')(lstm_emb_phrase)
        lstm_emb_phrase = keras.layers.Dense(DEFAULT_MODEL_L2_STC_DIM, name='L2_STC_MyApp', activation=DEFAULT_INNER_ACTIVATION)(lstm_emb_phrase)


        lstm_emb_cont = keras.layers.Embedding(vocab_size, vocab_size,
                                               embeddings_initializer=keras.initializers.Identity,
                                               input_length=ctx_max_len, name='L0E_CTX_MyApp')(lstm_input_cont)

        lstm_emb_cont = keras.layers.LSTM(DEFAULT_MODEL_L1_CTX_DIM, name='L1_CTX_MyApp')(lstm_emb_cont)
        lstm_emb_cont = keras.layers.Dense(DEFAULT_MODEL_L2_CTX_DIM, name='L2_CTX_MyApp', activation=DEFAULT_INNER_ACTIVATION)(lstm_emb_cont)


        x = keras.layers.concatenate([lstm_emb_phrase, lstm_emb_cont])
        x = keras.layers.Dense(DEFAULT_MODEL_L3_DIM, activation=DEFAULT_INNER_ACTIVATION)(x)
        x = keras.layers.Dense(DEFAULT_MODEL_L4_DIM, activation=DEFAULT_INNER_ACTIVATION)(x)

        main_output = keras.layers.Dense(DEFAULT_OUTPUT_DIM, activation=DEFAULT_OUTPUT_ACTIVATION)(x)

        self.model = keras.models.Model(inputs=[lstm_input_phrase, lstm_input_cont],
                                        outputs=main_output)

        self.model.compile(loss='binary_crossentropy', metrics=['accuracy'])
这是我尝试运行脚本时遇到的错误:

WARNING:tensorflow:From [PATH_TO_MyApp]\venv\lib\site-packages\tensorflow\python\framework\op_def_library.py:263: colocate_with (
from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.
Instructions for updating:
Colocations handled automatically by placer.
Traceback (most recent call last):
  File "my_script.py", line 307, in <module>
    main()
  File "my_script.py", line 60, in main
    flag = flag or train_r_skills(argsparser)
  File "my_script.py", line 230, in train_r_skills
    sk_extr = MyKerasModel(stm_max_len, ctx_max_len, segm_max_len, vocab_size)
  File "[PATH_TO_MyApp]\MyApp\parser\MyKerasModel_002.py", line 56, in __init__
    input_length=ctx_features_dim, name='L0E_CTX_MyApp')(lstm_input_cont)
  File "[PATH_TO_MyApp]\venv\lib\site-packages\keras\engine\base_layer.py", line 431, in __call__
    self.build(unpack_singleton(input_shapes))
  File "[PATH_TO_MyApp]\venv\lib\site-packages\keras\layers\embeddings.py", line 109, in build
    dtype=self.dtype)
  File "[PATH_TO_MyApp]\venv\lib\site-packages\keras\legacy\interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)
  File "[PATH_TO_MyApp]\venv\lib\site-packages\keras\engine\base_layer.py", line 252, in add_weight
    constraint=constraint)
  File "[PATH_TO_MyApp]\venv\lib\site-packages\keras\backend\tensorflow_backend.py", line 402, in variable
    v = tf.Variable(value, dtype=tf.as_dtype(dtype), name=name)
  File "[PATH_TO_MyApp]\venv\lib\site-packages\tensorflow\python\ops\variables.py", line 213, in __call__
    return cls._variable_v1_call(*args, **kwargs)
  File "[PATH_TO_MyApp]\venv\lib\site-packages\tensorflow\python\ops\variables.py", line 176, in _variable_v1_call
    aggregation=aggregation)
  File "[PATH_TO_MyApp]\venv\lib\site-packages\tensorflow\python\ops\variables.py", line 155, in <lambda>
    previous_getter = lambda **kwargs: default_variable_creator(None, **kwargs)
  File "[PATH_TO_MyApp]\venv\lib\site-packages\tensorflow\python\ops\variable_scope.py", line 2495, in default_variable_creator
    expected_shape=expected_shape, import_scope=import_scope)
  File "[PATH_TO_MyApp]\venv\lib\site-packages\tensorflow\python\ops\variables.py", line 217, in __call__
    return super(VariableMetaclass, cls).__call__(*args, **kwargs)
  File "[PATH_TO_MyApp]\venv\lib\site-packages\tensorflow\python\ops\variables.py", line 1395, in __init__
    constraint=constraint)
  File "[PATH_TO_MyApp]\venv\lib\site-packages\tensorflow\python\ops\variables.py", line 1503, in _init_from_args
    initial_value(), name="initial_value", dtype=dtype)
TypeError: __call__() missing 1 required positional argument: 'shape'

警告:tensorflow:From[PATH_TO_MyApp]\venv\lib\site packages\tensorflow\python\framework\op_def_library.py:263:colocate_(
不推荐使用tensorflow.python.framework.ops中的,并将在将来的版本中删除。
更新说明:
由placer自动处理Colocations。
回溯(最近一次呼叫最后一次):
文件“my_script.py”,第307行,在
main()
文件“my_script.py”,第60行,在main中
旗帜=旗帜或训练技能(argsparser)
文件“my_script.py”,第230行,培训技能
sk_extr=MyKerasModel(stm_max_len、ctx_max_len、segm_max_len、vocab_size)
文件“[PATH_TO_MyApp]\MyApp\parser\MyKerasModel_002.py”,第56行,在u init中__
输入长度=ctx功能尺寸,名称='L0E\u ctx\u MyApp')(lstm\u输入长度=ctx\u连续)
文件“[PATH\u TO\u MyApp]\venv\lib\site packages\keras\engine\base\u layer.py”,第431行,在调用中__
自我构建(解包单例(输入形状))
文件“[PATH\u TO\u MyApp]\venv\lib\site packages\keras\layers\embeddings.py”,第109行,内部版本
dtype=self.dtype)
文件“[PATH\u TO\u MyApp]\venv\lib\site packages\keras\legacy\interfaces.py”,第91行,在包装器中
返回函数(*args,**kwargs)
文件“[PATH\u TO\u MyApp]\venv\lib\site packages\keras\engine\base\u layer.py”,第252行,添加权重
约束=约束)
变量中的文件“[PATH\u TO\u MyApp]\venv\lib\site packages\keras\backend\tensorflow\u backend.py”,第402行
v=tf.Variable(value,dtype=tf.as_dtype(dtype),name=name)
文件“[PATH\u TO\u MyApp]\venv\lib\site packages\tensorflow\python\ops\variables.py”,第213行,在调用中__
返回cls.\u变量\u v1\u调用(*args,**kwargs)
文件“[PATH\u TO\u MyApp]\venv\lib\site packages\tensorflow\python\ops\variables.py”,第176行,在变量v1\u调用中
聚合=聚合)
文件“[PATH\u TO\u MyApp]\venv\lib\site packages\tensorflow\python\ops\variables.py”,第155行,在
上一个\u getter=lambda**kwargs:默认\u变量\u创建者(无,**kwargs)
文件“[PATH\u TO\u MyApp]\venv\lib\site packages\tensorflow\python\ops\variable\u scope.py”,第2495行,默认为\u variable\u creator
预期形状=预期形状,导入范围=导入范围)
文件“[PATH\u TO\u MyApp]\venv\lib\site packages\tensorflow\python\ops\variables.py”,第217行,在调用中__
返回super(VariableMetaclass,cls)。\调用(*args,**kwargs)
文件“[PATH\u TO\u MyApp]\venv\lib\site packages\tensorflow\python\ops\variables.py”,第1395行,在\uu init中__
约束=约束)
文件“[PATH\u TO\u MyApp]\venv\lib\site packages\tensorflow\python\ops\variables.py”,第1503行,位于\u参数的\u init\u中
初始值(),name=“初始值”,dtype=dtype)
TypeError:\调用\缺少1个必需的位置参数:“形状”
你能帮我了解发生了什么事吗

编辑: 然而,正如C.Lightfoot所建议的,我也检查了,就我所知,似乎与我的问题不匹配(我没有将代码从Keras 1转换为Keras 2)。请给我更多的提示,如果有什么我错过了这篇文章

干杯,
/H

正如C.Lightfoot所建议的,我检查过的代码可能重复,但据我所知,似乎与我的问题不匹配(我没有将代码从Keras 1转换为Keras 2)。请给我更多的提示,如果我在这篇文章中遗漏了什么。我通过在输入NN之前操作输入,设置了一个临时的解决方法。因此,我现在不使用嵌入层。请让我知道这个问题是否有解决方案。正如C.Lightfoot所建议的,我检查过的可能重复,但是,据我所知,似乎与我的问题不匹配(我没有将代码从Keras 1转换为Keras 2)。请给我更多的提示,如果我在这篇文章中遗漏了什么。我通过在输入NN之前操作输入,设置了一个临时的解决方法。因此,我现在不使用嵌入层。请让我知道是否有解决这个问题的办法。