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

跟随Chollet机器学习书籍时,KerasTensor传入tf函数报错求助

解决KerasTensor传入TensorFlow函数报错问题

问题背景

运行以下代码时第3行报错:A KerasTensor cannot be used as input to a TensorFlow function,报错原因是直接将Keras张量传入了原生TensorFlow函数,尝试创建新类但不知具体操作。

原代码:

import tensorflow as tf
inputs = keras.Input(shape=(None,), dtype="int64")
embedded = tf.one_hot(inputs, depth=max_tokens)
x = layers.Bidirectional(layers.LSTM(32))(embedded)
x = layers.Dropout(0.5)(x)
outputs = layers.Dense(1, activation="sigmoid")(x)
model = keras.Model(inputs, outputs)
model.compile(optimizer="rmsprop",
              loss="binary_crossentropy",
              metrics=["accuracy"])
model.summary()

解决方案

方法一:用Lambda层封装TensorFlow操作

将tf.one_hot包装进Keras的Lambda层,让操作兼容KerasTensor:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

max_tokens = 1000  # 替换为你的实际词汇量
inputs = keras.Input(shape=(None,), dtype="int64")
# 用Lambda层包装tf.one_hot
embedded = layers.Lambda(lambda x: tf.one_hot(x, depth=max_tokens))(inputs)
x = layers.Bidirectional(layers.LSTM(32))(embedded)
x = layers.Dropout(0.5)(x)
outputs = layers.Dense(1, activation="sigmoid")(x)
model = keras.Model(inputs, outputs)
model.compile(optimizer="rmsprop",
              loss="binary_crossentropy",
              metrics=["accuracy"])
model.summary()

方法二:改用Keras Embedding层(更推荐)

对于文本嵌入场景,Keras的Embedding层是更高效的原生解决方案,替代手动one-hot:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

max_tokens = 1000  # 替换为你的实际词汇量
inputs = keras.Input(shape=(None,), dtype="int64")
# 使用Embedding层,input_dim对应词汇量,output_dim设为与one-hot维度一致
embedded = layers.Embedding(input_dim=max_tokens, output_dim=max_tokens)(inputs)
x = layers.Bidirectional(layers.LSTM(32))(embedded)
x = layers.Dropout(0.5)(x)
outputs = layers.Dense(1, activation="sigmoid")(x)
model = keras.Model(inputs, outputs)
model.compile(optimizer="rmsprop",
              loss="binary_crossentropy",
              metrics=["accuracy"])
model.summary()

注意事项

  • 必须定义max_tokens的具体数值,否则代码会因未定义变量报错
  • 补全keras和layers的导入语句,原代码缺少这部分导入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:12:40