首页 > 解决方案 > tensorflow.keras:图形在“time_distributed_1”层断开

问题描述

我正在尝试将几个完全连接的层附加到分层注意网络 (HAN) 的末尾,以对文本执行二进制分类任务。我的修改产生了一个多输入模型,它应该接受一些文本输入(通过 HAN)以及一些我需要通过密集网络的附加值(浮点数)。但我遇到以下错误:

ValueError: Graph disconnected: 无法在“time_distributed_1”层获得张量 Tensor("word_input:0", shape=(None, 100, 7), dtype=float32) 的值。访问以下先前层没有问题:[]

我在没有修改的情况下运行了 HAN 网络,并且能够成功地将其训练为我的数据(文本上的二进制分类问题)。

这是模型的代码:

embedding_layer = Embedding(len(char_index) + 1,
                            EMBEDDING_DIM,
                            input_length=MAX_WORD_LENGTH,
                            trainable=True)

char_input = Input(shape=(MAX_WORD_LENGTH,), dtype='float32', name = 'char_input')
char_sequences = embedding_layer(char_input)
char_lstm = Bidirectional(LSTM(100, return_sequences=True))(char_sequences)
char_dense = TimeDistributed(Dense(200))(char_lstm)
char_att = AttentionWithContext()(char_dense)
charEncoder = Model(char_input, char_att) 

words_input = Input(shape=(MAX_WORDS, MAX_WORD_LENGTH), dtype='float32', name = 'word_input')
words_encoder = TimeDistributed(charEncoder)(words_input) 
words_lstm = Bidirectional(LSTM(100, return_sequences=True))(words_encoder)
words_dense = TimeDistributed(Dense(200))(words_lstm)
words_att = AttentionWithContext()(words_dense)
preds = Dense(1, activation='sigmoid')(words_att)
# model = Model(words_input, preds)
sentEncoder = Model(words_input, preds)

stats_input = Input(shape = (8,), name = 'stat_input')
stats_x = Dense(4, activation = 'relu')(stats_input)
stats_x_2 = Dense(2, activation = 'relu')(stats_x)
stats_x_3 = Dense(1, activation = 'sigmoid')(stats_x_2)

final_layer = Add()([preds, stats_x_3])
out = Dense(1, activation = 'sigmoid')(final_layer)

merged_output_model = Model(stats_input, out)


model = Model(inputs = [char_input, stats_input], outputs = out)

model.compile(loss='binary_crossentropy',
              optimizer='adam',
              metrics=['acc'])
# plot_model(model, to_file='model.png', show_shapes = True)

model.summary()

earlyCallback = EarlyStopping(patience = 5, verbose = 1)

model.fit(
    {"char_input": x_train, "stat_input": stats_train},
    y_train,
    validation_data = ({"char_input": x_val, "stat_input": stats_val}, y_val),
    epochs = 600,
    callbacks = [earlyCallback]
)

这是我使用 HAN 模型的 kaggle 链接: https ://www.kaggle.com/sermakarevich/hierarchical-attention-network

我的整个代码: https ://gist.github.com/sonaalPradeep/6848be0faf5cfa389466fa83d6025c83

追溯 :

Traceback (most recent call last):
  File "han_w_stats.py", line 219, in <module>
    merged_output_model = Model(stats_input, out)
  File "/home/lenovo/venvs/keras-tf/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 242, in __new__
    return functional.Functional(*args, **kwargs)
  File "/home/lenovo/venvs/keras-tf/lib/python3.8/site-packages/tensorflow/python/training/tracking/base.py", line 457, in _method_wrapper
    result = method(self, *args, **kwargs)
  File "/home/lenovo/venvs/keras-tf/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 115, in __init__
    self._init_graph_network(inputs, outputs)
  File "/home/lenovo/venvs/keras-tf/lib/python3.8/site-packages/tensorflow/python/training/tracking/base.py", line 457, in _method_wrapper
    result = method(self, *args, **kwargs)
  File "/home/lenovo/venvs/keras-tf/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 190, in _init_graph_network
    nodes, nodes_by_depth, layers, _ = _map_graph_network(
  File "/home/lenovo/venvs/keras-tf/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 926, in _map_graph_network
    raise ValueError('Graph disconnected: '
ValueError: Graph disconnected: cannot obtain value for tensor Tensor("word_input:0", shape=(None, 100, 7), dtype=float32) at layer "time_distributed_1". The following previous layers were accessed without issue: []

标签: python-3.xkerastensorflow2.0

解决方案


推荐阅读