首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >级联层的数值误差

级联层的数值误差
EN

Stack Overflow用户
提问于 2022-07-23 19:29:37
回答 1查看 62关注 0票数 0

嗯,我试图在Pubmed200k随机对照临床试验数据集上复制一个来自的模型,你可以在这个中找到它。

具有5个唯一标记用于输出的数据集如下所示:

嗯,我已经取得了一些进展,我尽力复制了这篇论文,但最后,我得到了一个值错误:

代码语言:javascript
复制
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-55-d583261b0496> in <module>()
     23 
     24 # 4. create an output layer
---> 25 dropout_layer = tf.keras.layers.Dropout(0.5,name='dropout_layer')(concat_model)
     26 dense_layer = tf.keras.layers.Dense(200,name='dense_layer')(dropout_layer)
     27 dropout_layer = tf.keras.layers.Dropout(0.5,name='dropout_layer_2')(dense_layer)

1 frames
/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/constant_op.py in convert_to_eager_tensor(value, ctx, dtype)
    100       dtype = dtypes.as_dtype(dtype).as_datatype_enum
    101   ctx.ensure_initialized()
--> 102   return ops.EagerTensor(value, ctx.device_name, dtype)
    103 
    104 

ValueError: Exception encountered when calling layer "dropout_layer" (type Dropout).

Attempt to convert a value (<keras.layers.merge.Concatenate object at 0x7f51a0b5f850>) with an unsupported type (<class 'keras.layers.merge.Concatenate'>) to a Tensor.

Call arguments received:
  • inputs=<keras.layers.merge.Concatenate object at 0x7f51a0b5f850>
  • training=False

对于代码,我尽我最大的努力去评论尽可能多的事情。

代码语言:javascript
复制
# 1. word model:
inputs = tf.keras.layers.Input(
    shape=(1,), dtype=tf.string, name="text_input"
)  # takes a list of input
text_vectorization_layer = text_vectorizer(inputs)  # word level vectorizer
text_embedding_layer = embedding(text_vectorization_layer)  # word level embedding
# flatten_layer = tf.keras.layers.Flatten()(text_embedding_layer)
outputs = tf.keras.layers.Dense(300, activation="relu", name="text_output")(
    text_embedding_layer
)  # output of 300 from fig 1. https://arxiv.org/pdf/1612.05251.pdf
token_model = tf.keras.Model(inputs, outputs)  # token model

# 2. char model:
inputs = tf.keras.layers.Input(shape=(1,), dtype=tf.string, name="char_input")
char_vectorization_layer = char_vectorizer(inputs)  # character level vectorization
char_embedding_layer = char_embedding(char_vectorization_layer)  # char level embedding
outputs = tf.keras.layers.Bidirectional(
    tf.keras.layers.LSTM(25), name="bi_directional_lstm"
)(
    char_embedding_layer
)  # bi directional lstm as output
char_model = tf.keras.Model(inputs, outputs)

# 3. concatinating both the model
concat_model = tf.keras.layers.Concatenate([token_model, char_model])

# 4. create output layer
dropout_layer = tf.keras.layers.Dropout(0.5, name="dropout_layer")(concat_model)
dense_layer = tf.keras.layers.Dense(200, name="dense_layer")(dropout_layer)
dropout_layer = tf.keras.layers.Dropout(0.5, name="dropout_layer_2")(dense_layer)
output_layer = tf.keras.layer.Dense(5, activation="softmax", name="final_output_layer")(
    dropout_layer
)

我没有得到连接层的输出结果,因为它导致了辍学层的错误。

谢谢@Djinn,修正了代码:

代码语言:javascript
复制
# 1. word model:
inputs = tf.keras.layers.Input(
    shape=(1,), dtype=tf.string, name="text_input"
)  # takes a list of input
text_vectorization_layer = text_vectorizer(inputs)  # word level vectorizer
text_embedding_layer = embedding(text_vectorization_layer)  # word level embedding
flatten_layer = tf.keras.layers.Flatten()(text_embedding_layer)
outputs = tf.keras.layers.Dense(300, activation="relu", name="text_output")(
    flatten_layer
)  # output of 300 from fig 1. https://arxiv.org/pdf/1612.05251.pdf
token_model = tf.keras.Model(inputs, outputs)  # token model

# 2. char model:
inputs = tf.keras.layers.Input(shape=(1,), dtype=tf.string, name="char_input")
char_vectorization_layer = char_vectorizer(inputs)  # character level vectorization
char_embedding_layer = char_embedding(char_vectorization_layer)  # char level embedding
outputs = tf.keras.layers.Bidirectional(
    tf.keras.layers.LSTM(25), name="bi_directional_lstm"
)(
    char_embedding_layer
)  # bi directional lstm as output
char_model = tf.keras.Model(inputs, outputs)

# 3. concatinating both the model
concat_model = tf.keras.layers.Concatenate()([token_model.output, char_model.output])

# 4. create output layer
dropout_layer = tf.keras.layers.Dropout(0.5, name="dropout_layer")(concat_model)
dense_layer = tf.keras.layers.Dense(200, name="dense_layer")(dropout_layer)
dropout_layer = tf.keras.layers.Dropout(0.5, name="dropout_layer_2")(dense_layer)
output_layer = tf.keras.layers.Dense(
    5, activation="softmax", name="final_output_layer"
)(dropout_layer)

# 5.final model
model_2 = tf.keras.Model(
    inputs=[token_model.input, char_model.input],
    outputs=output_layer,
    name="token_char_model",
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-23 20:41:46

你正在连接两个模型。您可能希望连接它们的输出(或者最后一层,如果您想这样做的话)。如果需要,可以连接任何兼容的层)。您也错误地调用了Concatenate。大写为C的ConcatenateConcatenate(params)([layers])。具有小写c的concatenateconcatenate([layers], params)

更改:

代码语言:javascript
复制
concat_model = tf.keras.layers.Concatenate([token_model, char_model])

代码语言:javascript
复制
concat_model = tf.keras.layers.Concatenate()([token_model.output, char_model.output])

# or if you changed the name of the two outputs to, for example, [output0, output1]
concat_model = tf.keras.layers.Concatenate()([output0, output1])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73093682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档