python - 为什么使用 Tensorflow-Hub KerasLayer 会出现 'Connecting to invalid output of source node' 错误?

标签 python tensorflow keras tensorflow-hub

编辑:我尝试打开急切执行以查看是否可以准确识别问题发生的位置,并且急切执行停止了错误并使其成功运行。不知道为什么会出现这种情况,不幸的是这对我没有帮助。

原始帖子:我对 Tensorflow 还很陌生,我正在尝试了解如何在 tf.keras 模型中使用 Tensorflow-Hub 模块。我的目标是创建一个电子邮件分类系统来在我的组织中路由电子邮件。

我已经使用通用句子编码器模块预处理的数据构建了一个模型。这是一个 RNN 并且工作得非常有效,但我感兴趣的是我是否可以提高我的准确性。

现在我想将该模块直接合并到我的神经网络中,以便我可以训练它。

我在 Jupyter Notebook 中运行它。

我构建了一个简单的非 RNN 模型来尝试进行 Tensorflow-Hub 模块训练。

print("Version: ", tf.__version__)
print("Eager mode: ", tf.executing_eagerly())
print("Hub version: ", hub.__version__)
print("GPU is", "available" if tf.test.is_gpu_available() else "NOT AVAILABLE")

hub_module = "https://tfhub.dev/google/tf2-preview/nnlm-en-dim128/1"
model = models.Sequential()
model.add(hub.KerasLayer(hub_module, input_shape=[], dtype=tf.string, trainable=True))
model.add(layers.Dense(128, activation='relu'))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(3, activation='softmax'))
model.build()
model.summary()
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy', 'mae'])

#Fake data
train_data = [["Hello how are you"], ["Goodbye my friend"], ["Happiness is a warm slice of toast"]]
train_labels = [[1, 0, 0],[0, 1, 0],[0, 0, 1]]

train_dataset = tf.data.Dataset.from_tensor_slices((train_data, train_labels))

model.fit(train_dataset, epochs=1, verbose=2)    

这是我的完整控制台输出:

Version:  1.14.0
Eager mode:  False
Hub version:  0.6.0
GPU is available
Model: "sequential_5"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
keras_layer_5 (KerasLayer)   (None, 128)               124642688 
_________________________________________________________________
dense_15 (Dense)             (None, 128)               16512     
_________________________________________________________________
dense_16 (Dense)             (None, 64)                8256      
_________________________________________________________________
dense_17 (Dense)             (None, 3)                 195       
=================================================================
Total params: 124,667,651
Trainable params: 124,667,651
Non-trainable params: 0
_________________________________________________________________
WARNING:tensorflow:Expected a shuffled dataset but input dataset `x` is not shuffled. Please invoke `shuffle()` on input dataset.

WARNING:tensorflow:Expected a shuffled dataset but input dataset `x` is not shuffled. Please invoke `shuffle()` on input dataset.

---------------------------------------------------------------------------
InvalidArgumentError                      Traceback (most recent call last)
~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\client\session.py in _do_call(self, fn, *args)
   1355     try:
-> 1356       return fn(*args)
   1357     except errors.OpError as e:

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\client\session.py in _run_fn(feed_dict, fetch_list, target_list, options, run_metadata)
   1338       # Ensure any changes to the graph are reflected in the runtime.
-> 1339       self._extend_graph()
   1340       return self._call_tf_sessionrun(

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\client\session.py in _extend_graph(self)
   1373     with self._graph._session_run_lock():  # pylint: disable=protected-access
-> 1374       tf_session.ExtendSession(self._session)
   1375 

InvalidArgumentError: Node 'Adam/gradients/keras_layer_1/StatefulPartitionedCall_grad/StatefulPartitionedCall': Connecting to invalid output 1 of source node keras_layer_1/StatefulPartitionedCall which has 1 outputs

During handling of the above exception, another exception occurred:

InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-11-492e87ad5d5d> in <module>
     28 train_dataset = tf.data.Dataset.from_tensor_slices((train_data, train_labels))
     29 
---> 30 model.fit(train_dataset, epochs=1, verbose=2)

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
    778           validation_steps=validation_steps,
    779           validation_freq=validation_freq,
--> 780           steps_name='steps_per_epoch')
    781 
    782   def evaluate(self,

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\keras\engine\training_arrays.py in model_iteration(model, inputs, targets, sample_weights, batch_size, epochs, verbose, callbacks, val_inputs, val_targets, val_sample_weights, shuffle, initial_epoch, steps_per_epoch, validation_steps, validation_freq, mode, validation_in_fit, prepared_feed_values_from_dataset, steps_name, **kwargs)
    139       reset_dataset_after_each_epoch = True
    140       steps_per_epoch = training_utils.infer_steps_for_dataset(
--> 141           inputs, steps_per_epoch, epochs=epochs, steps_name=steps_name)
    142     input_iterator = _get_iterator(inputs, model._distribution_strategy)
    143 

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\keras\engine\training_utils.py in infer_steps_for_dataset(dataset, steps, epochs, steps_name)
   1391   """
   1392   assert isinstance(dataset, dataset_ops.DatasetV2)
-> 1393   size = K.get_value(cardinality.cardinality(dataset))
   1394   if size == cardinality.INFINITE and steps is None:
   1395     raise ValueError('When passing an infinitely repeating dataset, you '

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\keras\backend.py in get_value(x)
   2987     return function([], x)(x)
   2988 
-> 2989   return x.eval(session=get_session((x,)))
   2990 
   2991 

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\keras\backend.py in get_session(op_input_list)
    460   if not _MANUAL_VAR_INIT:
    461     with session.graph.as_default():
--> 462       _initialize_variables(session)
    463   return session
    464 

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\keras\backend.py in _initialize_variables(session)
    877     # marked as initialized.
    878     is_initialized = session.run(
--> 879         [variables_module.is_variable_initialized(v) for v in candidate_vars])
    880     uninitialized_vars = []
    881     for flag, v in zip(is_initialized, candidate_vars):

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\client\session.py in run(self, fetches, feed_dict, options, run_metadata)
    948     try:
    949       result = self._run(None, fetches, feed_dict, options_ptr,
--> 950                          run_metadata_ptr)
    951       if run_metadata:
    952         proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\client\session.py in _run(self, handle, fetches, feed_dict, options, run_metadata)
   1171     if final_fetches or final_targets or (handle and feed_dict_tensor):
   1172       results = self._do_run(handle, final_targets, final_fetches,
-> 1173                              feed_dict_tensor, options, run_metadata)
   1174     else:
   1175       results = []

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\client\session.py in _do_run(self, handle, target_list, fetch_list, feed_dict, options, run_metadata)
   1348     if handle is None:
   1349       return self._do_call(_run_fn, feeds, fetches, targets, options,
-> 1350                            run_metadata)
   1351     else:
   1352       return self._do_call(_prun_fn, handle, feeds, fetches)

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\client\session.py in _do_call(self, fn, *args)
   1368           pass
   1369       message = error_interpolation.interpolate(message, self._graph)
-> 1370       raise type(e)(node_def, op, message)
   1371 
   1372   def _extend_graph(self):

InvalidArgumentError: Node 'Adam/gradients/keras_layer_1/StatefulPartitionedCall_grad/StatefulPartitionedCall': Connecting to invalid output 1 of source node keras_layer_1/StatefulPartitionedCall which has 1 outputs

最佳答案

此问题已通过从 TF 1.14 升级到 TF 2.0 RC 得到解决。

关于python - 为什么使用 Tensorflow-Hub KerasLayer 会出现 'Connecting to invalid output of source node' 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57846223/

相关文章:

Python Keras - ImageDataGenerator 中的自定义标签

python - 如何使用 torchaudio 反转 MelSpectrogram 并获得音频波形?

python - 在python中传递一个方法

python - TensorFlow 放置算法

python - Keras历史平均自定义损失函数

python - 在 model.fit() 期间记录 Keras 中每个时期的计算时间

python - tensorflow 2 : Getting "WARNING:tensorflow:9 out of the last 9 calls to <function> triggered tf.function retracing. Tracing is expensive"

python - 在python中使用正则表达式将文本文件拆分为单词

python - Pandas:在列的应用函数中使用索引值

tensorflow - 在Tensorflow-Serving中,是否可以只得到top-k的预测结果?