You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于预训练ELMO的情感分析模型调用model.fit()报outer_context属性错误

问题

使用预训练ELMO模型构建基础情感分析模型时,执行model.fit()抛出AttributeError: 'NoneType' object has no attribute 'outer_context'错误,已将输入文本转为numpy数组。

相关代码

本地加载ELMO:

elmo_path = r"C:\Users\name\Downloads\elmo"
elmo_module = hub.KerasLayer(elmo_path)

模型定义:

input_text = keras.layers.Input(shape=(), dtype=tf.string)
embeddings = elmo_module(input_text)
dense = keras.layers.Dense(256, activation="relu")(embeddings)
predictions = keras.layers.Dense(1, activation="sigmoid")(dense)
model = keras.Model(inputs=[input_text], outputs=predictions)

数据转换:

X_train_lemmatized = np.asarray(X_train_lemmatized)

模型编译与训练:

model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])
model.fit(X_train_lemmatized, y_train, epochs=1, batch_size=64)

完整错误信息

File "C:\Users\name\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\engine\training.py", line 1160, in train_function  *
    return step_function(self, iterator)
File "C:\Users\name\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\engine\training.py", line 1146, in step_function  **
    outputs = model.distribute_strategy.run(run_step, args=(data,))
File "C:\Users\name\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\engine\training.py", line 1135, in run_step  **
    outputs = model.train_step(data)
File "C:\Users\name\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\engine\training.py", line 997, in train_step
    self.optimizer.minimize(loss, self.trainable_variables, tape=tape)
File "C:\Users\name\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\optimizers\optimizer_v2\optimizer_v2.py", line 576, in minimize
    grads_and_vars = self._compute_gradients(
File "C:\Users\name\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\optimizers\optimizer_v2\optimizer_v2.py", line 634, in _compute_gradients
    grads_and_vars = self._get_gradients(
File "C:\Users\name\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\keras\optimizers\optimizer_v2\optimizer_v2.py", line 510, in _get_gradients
    grads = tape.gradient(loss, var_list, grad_loss)

AttributeError: 'NoneType' object has no attribute 'outer_context'

解决方案

1. 匹配TensorFlow与Hub版本兼容性

该错误多因TensorFlow和TensorFlow Hub版本不匹配导致,尤其是ELMO这类较早的预训练模型。建议:

  • 降级至兼容性较好的版本组合:
pip install tensorflow==2.10.0 tensorflow-hub==0.12.0

2. 明确ELMO层的输出配置

本地加载ELMO时,指定输出形状与输入类型,避免梯度跟踪异常:

import tensorflow as tf
import tensorflow_hub as hub
from tensorflow import keras

elmo_path = r"C:\Users\name\Downloads\elmo"
elmo_module = hub.KerasLayer(elmo_path, output_shape=(1024,), input_shape=(), dtype=tf.string)

3. 使用TensorFlow Dataset输入数据

将numpy数组转为tf.data.Dataset格式,规避训练时的数据格式冲突:

train_dataset = tf.data.Dataset.from_tensor_slices((X_train_lemmatized, y_train))
train_dataset = train_dataset.batch(64).prefetch(tf.data.AUTOTUNE)

model.fit(train_dataset, epochs=1)

4. 自定义训练循环处理梯度

若上述方法无效,可手动编写训练循环控制梯度流程:

@tf.function
def train_step(x, y):
    with tf.GradientTape() as tape:
        predictions = model(x, training=True)
        loss = model.compiled_loss(y, predictions)
    gradients = tape.gradient(loss, model.trainable_variables)
    model.optimizer.apply_gradients(zip(gradients, model.trainable_variables))
    model.compiled_metrics.update_state(y, predictions)
    return {m.name: m.result() for m in model.metrics}

# 执行训练循环
for epoch in range(1):
    print(f"Epoch {epoch+1}")
    for x_batch, y_batch in train_dataset:
        metrics = train_step(x_batch, y_batch)
    print({k: v.numpy() for k, v in metrics.items()})

内容的提问来源于stack exchange,提问作者1m2n3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:15:32